{
  "components": {
    "schemas": {
      "AggregatedHealthScore": {
        "properties": {
          "dimensions": {
            "description": "Latest aggregated score per dimension. Dimensions with no results in the last 7 days are omitted.",
            "items": {
              "$ref": "#/components/schemas/DimensionHealthScore"
            },
            "title": "Dimensions",
            "type": "array"
          },
          "matched_count": {
            "description": "Number of table assets you can view that match the filters, whether or not they have test results in the window. `0` when nothing matches.",
            "title": "Matched Count",
            "type": "integer"
          },
          "total": {
            "$ref": "#/components/schemas/AggregatedHealthScoreBucket",
            "description": "Weighted score across all dimensions for the whole matching asset set, using the environment's configured dimension weights. Aggregated across the assets' test results, not an average of per-asset scores."
          }
        },
        "required": ["matched_count", "total", "dimensions"],
        "title": "AggregatedHealthScore",
        "type": "object"
      },
      "AggregatedHealthScoreBucket": {
        "properties": {
          "bucket_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Start of the hourly bucket this score was computed for. `null` when no matching asset has test results in the window.",
            "title": "Bucket At"
          },
          "score": {
            "description": "Health score in the range 0-1 for the most recent hourly bucket. `0` when no matching asset has test results in the window.",
            "title": "Score",
            "type": "number"
          },
          "test_count": {
            "description": "Number of test results that contributed to this score.",
            "title": "Test Count",
            "type": "integer"
          }
        },
        "required": ["score", "test_count", "bucket_at"],
        "title": "AggregatedHealthScoreBucket",
        "type": "object"
      },
      "ApiError": {
        "properties": {
          "code": {
            "description": "Stable code identifying the type of error.",
            "title": "Code",
            "type": "string"
          },
          "message": {
            "description": "Human-readable explanation of the error.",
            "title": "Message",
            "type": "string"
          }
        },
        "required": ["code", "message"],
        "title": "ApiError",
        "type": "object"
      },
      "ApiErrorResponse": {
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ApiError",
            "description": "Structured details about the error."
          }
        },
        "required": ["error"],
        "title": "ApiErrorResponse",
        "type": "object"
      },
      "Asset": {
        "properties": {
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the asset was created in the source platform, when available.",
            "title": "Created At"
          },
          "deleted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Soft-delete timestamp. Present only in the `deleted_since` feed.",
            "title": "Deleted At"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Description from the source platform.",
            "title": "Description"
          },
          "id": {
            "description": "Unique asset identifier.",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "description": "Extensible enum. High-level asset category; picks the typed endpoint that exposes this asset's extra fields (`/assets/tables` for `table`, `/assets/bi` for `bi`). New values may be added over time \u2014 treat any unrecognized value as `other` and do not hard-fail.",
            "examples": ["table", "bi", "semantic", "etl", "other"],
            "title": "Kind",
            "type": "string"
          },
          "name": {
            "description": "Asset name.",
            "title": "Name",
            "type": "string"
          },
          "owners": {
            "default": [],
            "description": "Owners assigned to the asset.",
            "items": {
              "type": "string"
            },
            "title": "Owners",
            "type": "array"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ID of the parent asset (e.g. a BI dashboard containing this page).",
            "title": "Parent Id"
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Logical path of the asset in its project tree.",
            "title": "Path"
          },
          "source_type": {
            "description": "Extensible enum. Integration that synced this asset. New values may be added over time.",
            "examples": ["dbt", "looker", "sigma", "fivetran", "tableau"],
            "title": "Source Type",
            "type": "string"
          },
          "synced_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When Elementary last synced this asset. Use with `synced_since` for incremental reads.",
            "title": "Synced At"
          },
          "tags": {
            "default": [],
            "description": "Tags assigned to the asset.",
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the asset was updated in the source platform, when available.",
            "title": "Updated At"
          }
        },
        "required": ["id", "name", "kind", "source_type"],
        "title": "Asset",
        "type": "object"
      },
      "AssetHealthScore": {
        "properties": {
          "asset_id": {
            "description": "ID of the asset (matches `Asset.id`).",
            "title": "Asset Id",
            "type": "string"
          },
          "dimensions": {
            "description": "Latest score per dimension. Dimensions with no results in the last 7 days are omitted.",
            "items": {
              "$ref": "#/components/schemas/DimensionHealthScore"
            },
            "title": "Dimensions",
            "type": "array"
          },
          "total": {
            "$ref": "#/components/schemas/HealthScoreBucket",
            "description": "Weighted score across all dimensions, using the environment's configured dimension weights. Computed per hourly bucket, where a dimension with no newer result keeps its last known score, so `total.bucket_at` can be later than some `dimensions[].bucket_at`. It is not the latest of the nested dimension scores."
          }
        },
        "required": ["asset_id", "total", "dimensions"],
        "title": "AssetHealthScore",
        "type": "object"
      },
      "AssetLineage": {
        "properties": {
          "downstream_asset_id": {
            "description": "Identifier of the downstream asset receiving data from upstream.",
            "title": "Downstream Asset Id",
            "type": "string"
          },
          "upstream_asset_id": {
            "description": "Identifier of the upstream asset; data flows from upstream to downstream.",
            "title": "Upstream Asset Id",
            "type": "string"
          }
        },
        "required": ["upstream_asset_id", "downstream_asset_id"],
        "title": "AssetLineage",
        "type": "object"
      },
      "BiAsset": {
        "properties": {
          "bi_platform": {
            "description": "Extensible enum. BI platform name. New values may be added over time.",
            "examples": ["looker", "sigma", "tableau", "powerbi"],
            "title": "Bi Platform",
            "type": "string"
          },
          "bi_type": {
            "description": "Extensible enum. BI-specific asset type. New values may be added over time.",
            "examples": ["dashboard", "explore", "look", "report"],
            "title": "Bi Type",
            "type": "string"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the asset was created in the source platform, when available.",
            "title": "Created At"
          },
          "deleted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Soft-delete timestamp. Present only in the `deleted_since` feed.",
            "title": "Deleted At"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Description from the source platform.",
            "title": "Description"
          },
          "id": {
            "description": "Unique asset identifier.",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "description": "Extensible enum. High-level asset category; picks the typed endpoint that exposes this asset's extra fields (`/assets/tables` for `table`, `/assets/bi` for `bi`). New values may be added over time \u2014 treat any unrecognized value as `other` and do not hard-fail.",
            "examples": ["table", "bi", "semantic", "etl", "other"],
            "title": "Kind",
            "type": "string"
          },
          "name": {
            "description": "Asset name.",
            "title": "Name",
            "type": "string"
          },
          "owners": {
            "default": [],
            "description": "Owners assigned to the asset.",
            "items": {
              "type": "string"
            },
            "title": "Owners",
            "type": "array"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ID of the parent asset (e.g. a BI dashboard containing this page).",
            "title": "Parent Id"
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Logical path of the asset in its project tree.",
            "title": "Path"
          },
          "source_type": {
            "description": "Extensible enum. Integration that synced this asset. New values may be added over time.",
            "examples": ["dbt", "looker", "sigma", "fivetran", "tableau"],
            "title": "Source Type",
            "type": "string"
          },
          "synced_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When Elementary last synced this asset. Use with `synced_since` for incremental reads.",
            "title": "Synced At"
          },
          "tags": {
            "default": [],
            "description": "Tags assigned to the asset.",
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the asset was updated in the source platform, when available.",
            "title": "Updated At"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "URL to the asset in its source platform.",
            "title": "Url"
          }
        },
        "required": [
          "id",
          "name",
          "kind",
          "source_type",
          "bi_platform",
          "bi_type"
        ],
        "title": "BiAsset",
        "type": "object"
      },
      "Column": {
        "properties": {
          "asset_id": {
            "description": "ID of the asset this column belongs to.",
            "title": "Asset Id",
            "type": "string"
          },
          "data_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Data type reported by the source platform.",
            "title": "Data Type"
          },
          "deleted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Soft-delete timestamp. Present only in the `deleted_since` feed.",
            "title": "Deleted At"
          },
          "id": {
            "description": "Unique column identifier.",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "description": "Column name.",
            "title": "Name",
            "type": "string"
          },
          "synced_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When Elementary last synced this column. Use with `synced_since` for incremental reads.",
            "title": "Synced At"
          }
        },
        "required": ["id", "name", "asset_id"],
        "title": "Column",
        "type": "object"
      },
      "ColumnLineage": {
        "properties": {
          "downstream_column_id": {
            "description": "Identifier of the downstream column receiving data from upstream.",
            "title": "Downstream Column Id",
            "type": "string"
          },
          "upstream_column_id": {
            "description": "Identifier of the upstream column; data flows from upstream to downstream.",
            "title": "Upstream Column Id",
            "type": "string"
          }
        },
        "required": ["upstream_column_id", "downstream_column_id"],
        "title": "ColumnLineage",
        "type": "object"
      },
      "DimensionHealthScore": {
        "properties": {
          "bucket_at": {
            "description": "Start of the hourly bucket this score was computed for.",
            "format": "date-time",
            "title": "Bucket At",
            "type": "string"
          },
          "dimension": {
            "description": "Extensible enum. Data-quality dimension this score covers. New values may be added over time.",
            "examples": [
              "completeness",
              "uniqueness",
              "freshness",
              "validity",
              "accuracy",
              "consistency"
            ],
            "title": "Dimension",
            "type": "string"
          },
          "score": {
            "description": "Health score in the range 0-1 for the most recent hourly bucket.",
            "title": "Score",
            "type": "number"
          },
          "test_count": {
            "description": "Number of test results that contributed to this score.",
            "title": "Test Count",
            "type": "integer"
          }
        },
        "required": ["score", "test_count", "bucket_at", "dimension"],
        "title": "DimensionHealthScore",
        "type": "object"
      },
      "Direction": {
        "enum": ["asc", "desc"],
        "title": "Direction",
        "type": "string"
      },
      "Environment": {
        "properties": {
          "cron": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Sync schedule as a cron expression, if configured.",
            "title": "Cron"
          },
          "id": {
            "description": "Use as `env_id` in all environment-scoped endpoints.",
            "title": "Id",
            "type": "string"
          },
          "last_sync_status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Extensible enum. Status of the environment's most recent sync. New values may be added over time.",
            "examples": ["success", "running", "error"],
            "title": "Last Sync Status"
          },
          "last_synced_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When Elementary last synced the environment.",
            "title": "Last Synced At"
          },
          "name": {
            "description": "Environment name.",
            "title": "Name",
            "type": "string"
          },
          "warehouse_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Extensible enum. Warehouse the environment reads from. New values may be added over time.",
            "examples": [
              "snowflake",
              "bigquery",
              "databricks",
              "redshift",
              "postgres"
            ],
            "title": "Warehouse Type"
          }
        },
        "required": ["id", "name"],
        "title": "Environment",
        "type": "object"
      },
      "HealthScoreBucket": {
        "properties": {
          "bucket_at": {
            "description": "Start of the hourly bucket this score was computed for.",
            "format": "date-time",
            "title": "Bucket At",
            "type": "string"
          },
          "score": {
            "description": "Health score in the range 0-1 for the most recent hourly bucket.",
            "title": "Score",
            "type": "number"
          },
          "test_count": {
            "description": "Number of test results that contributed to this score.",
            "title": "Test Count",
            "type": "integer"
          }
        },
        "required": ["score", "test_count", "bucket_at"],
        "title": "HealthScoreBucket",
        "type": "object"
      },
      "HistoryOrderBy": {
        "enum": ["start_time", "id"],
        "title": "HistoryOrderBy",
        "type": "string"
      },
      "OrderBy": {
        "enum": ["id", "synced_at"],
        "title": "OrderBy",
        "type": "string"
      },
      "PaginatedResponse_AssetHealthScore_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/AssetHealthScore"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[AssetHealthScore]",
        "type": "object"
      },
      "PaginatedResponse_AssetLineage_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/AssetLineage"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[AssetLineage]",
        "type": "object"
      },
      "PaginatedResponse_Asset_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/Asset"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[Asset]",
        "type": "object"
      },
      "PaginatedResponse_BiAsset_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/BiAsset"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[BiAsset]",
        "type": "object"
      },
      "PaginatedResponse_ColumnLineage_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/ColumnLineage"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[ColumnLineage]",
        "type": "object"
      },
      "PaginatedResponse_Column_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/Column"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[Column]",
        "type": "object"
      },
      "PaginatedResponse_TableAsset_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/TableAsset"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[TableAsset]",
        "type": "object"
      },
      "PaginatedResponse_TestExecution_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/TestExecution"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[TestExecution]",
        "type": "object"
      },
      "PaginatedResponse_Test_": {
        "properties": {
          "has_more": {
            "default": false,
            "description": "The only signal to continue pagination; a short page may still have more items because permission filtering can trim rows.",
            "title": "Has More",
            "type": "boolean"
          },
          "items": {
            "description": "Objects returned in the current page.",
            "items": {
              "$ref": "#/components/schemas/Test"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, valid only with identical query parameters.",
            "title": "Next Cursor"
          }
        },
        "required": ["items"],
        "title": "PaginatedResponse[Test]",
        "type": "object"
      },
      "TableAsset": {
        "properties": {
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the asset was created in the source platform, when available.",
            "title": "Created At"
          },
          "data_platform": {
            "description": "Extensible enum. Data platform name. New values may be added over time.",
            "examples": [
              "snowflake",
              "bigquery",
              "databricks",
              "redshift",
              "postgres"
            ],
            "title": "Data Platform",
            "type": "string"
          },
          "db_name": {
            "description": "Database (catalog) name.",
            "title": "Db Name",
            "type": "string"
          },
          "deleted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Soft-delete timestamp. Present only in the `deleted_since` feed.",
            "title": "Deleted At"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Description from the source platform.",
            "title": "Description"
          },
          "id": {
            "description": "Unique asset identifier.",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "description": "Extensible enum. High-level asset category; picks the typed endpoint that exposes this asset's extra fields (`/assets/tables` for `table`, `/assets/bi` for `bi`). New values may be added over time \u2014 treat any unrecognized value as `other` and do not hard-fail.",
            "examples": ["table", "bi", "semantic", "etl", "other"],
            "title": "Kind",
            "type": "string"
          },
          "materialization": {
            "description": "Extensible enum. Materialization strategy. New values may be added over time.",
            "examples": ["table", "view", "incremental", "ephemeral"],
            "title": "Materialization",
            "type": "string"
          },
          "name": {
            "description": "Asset name.",
            "title": "Name",
            "type": "string"
          },
          "owners": {
            "default": [],
            "description": "Owners assigned to the asset.",
            "items": {
              "type": "string"
            },
            "title": "Owners",
            "type": "array"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ID of the parent asset (e.g. a BI dashboard containing this page).",
            "title": "Parent Id"
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Logical path of the asset in its project tree.",
            "title": "Path"
          },
          "schema_name": {
            "description": "Schema name.",
            "title": "Schema Name",
            "type": "string"
          },
          "source_type": {
            "description": "Extensible enum. Integration that synced this asset. New values may be added over time.",
            "examples": ["dbt", "looker", "sigma", "fivetran", "tableau"],
            "title": "Source Type",
            "type": "string"
          },
          "synced_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When Elementary last synced this asset. Use with `synced_since` for incremental reads.",
            "title": "Synced At"
          },
          "table_name": {
            "description": "Table or view name.",
            "title": "Table Name",
            "type": "string"
          },
          "tags": {
            "default": [],
            "description": "Tags assigned to the asset.",
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the asset was updated in the source platform, when available.",
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "name",
          "kind",
          "source_type",
          "data_platform",
          "db_name",
          "schema_name",
          "table_name",
          "materialization"
        ],
        "title": "TableAsset",
        "type": "object"
      },
      "Test": {
        "properties": {
          "asset_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ID of the asset this test runs on, when known.",
            "title": "Asset Id"
          },
          "column_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Column the test runs on, for column-level tests.",
            "title": "Column Name"
          },
          "config": {
            "additionalProperties": true,
            "default": {},
            "description": "Test configuration as defined in the source system.",
            "title": "Config",
            "type": "object"
          },
          "definition_type": {
            "description": "Extensible enum. The test's name in the source system \u2014 dbt test name for dbt tests, test type for Elementary tests.",
            "examples": [
              "not_null",
              "unique",
              "volume_anomalies",
              "source_freshness"
            ],
            "title": "Definition Type",
            "type": "string"
          },
          "deleted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Soft-delete timestamp. Present only in the `deleted_since` feed.",
            "title": "Deleted At"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Description from the source platform.",
            "title": "Description"
          },
          "disabled": {
            "description": "Whether the test is disabled. A full scan omits disabled tests unless `disabled=true` is passed; the `synced_since` and `deleted_since` feeds always include them, so a sync observes a test being disabled.",
            "title": "Disabled",
            "type": "boolean"
          },
          "id": {
            "description": "Unique test identifier.",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "description": "Test name.",
            "title": "Name",
            "type": "string"
          },
          "owners": {
            "default": [],
            "description": "Owners assigned to the test.",
            "items": {
              "type": "string"
            },
            "title": "Owners",
            "type": "array"
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Logical path of the test in its project tree.",
            "title": "Path"
          },
          "project": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Project the test belongs to, when known.",
            "title": "Project"
          },
          "severity": {
            "description": "Configured severity of the test.",
            "examples": ["ERROR", "WARNING"],
            "title": "Severity",
            "type": "string"
          },
          "source_type": {
            "description": "Extensible enum. Integration that synced this test. New values may be added over time.",
            "examples": ["dbt", "elementary_cloud", "python_sdk"],
            "title": "Source Type",
            "type": "string"
          },
          "synced_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When Elementary last synced this test definition. Bumped by definition changes only \u2014 new executions do not bump it. Use with `synced_since` for incremental reads.",
            "title": "Synced At"
          },
          "tags": {
            "default": [],
            "description": "Tags assigned to the test.",
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array"
          },
          "test_type": {
            "description": "Extensible enum. Elementary's category for the test. New values may be added over time.",
            "examples": [
              "dbt_test",
              "anomaly_detection",
              "schema_change",
              "source_freshness",
              "elementary_cloud"
            ],
            "title": "Test Type",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the test definition was last updated in the source platform.",
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "name",
          "test_type",
          "definition_type",
          "source_type",
          "severity",
          "disabled"
        ],
        "title": "Test",
        "type": "object"
      },
      "TestExecution": {
        "properties": {
          "column_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Column this execution checked, when applicable.",
            "title": "Column Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Description of the test at execution time.",
            "title": "Description"
          },
          "duration_seconds": {
            "description": "How long the execution took.",
            "title": "Duration Seconds",
            "type": "number"
          },
          "exception": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Error message when the execution errored.",
            "title": "Exception"
          },
          "failure_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Number of failed rows or detected issues. Null when the execution does not produce a failing-row count (for example volume, freshness, or anomaly cloud tests).",
            "title": "Failure Count"
          },
          "id": {
            "description": "Identifier of this execution.",
            "title": "Id",
            "type": "string"
          },
          "quality_dimension": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Extensible enum. Data-quality dimension the test covers, when classified.",
            "examples": [
              "completeness",
              "uniqueness",
              "freshness",
              "validity",
              "accuracy",
              "consistency"
            ],
            "title": "Quality Dimension"
          },
          "result_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Extensible enum. Why the execution produced its status, when Elementary could determine it.",
            "examples": ["PERMISSIONS_ERROR"],
            "title": "Result Reason"
          },
          "start_time": {
            "description": "When the execution started.",
            "format": "date-time",
            "title": "Start Time",
            "type": "string"
          },
          "status": {
            "description": "Extensible enum. Result of the execution. New values may be added over time.",
            "examples": ["PASS", "WARN", "FAIL", "ERROR", "SKIPPED", "NO_DATA"],
            "title": "Status",
            "type": "string"
          },
          "sub_test_unique_id": {
            "description": "Stable identifier of the sub-test (a test can explode into several sub-tests, e.g. one per column). Use it to key latest executions.",
            "title": "Sub Test Unique Id",
            "type": "string"
          },
          "sub_type": {
            "description": "Sub-test type within the test (e.g. the anomaly type checked).",
            "title": "Sub Type",
            "type": "string"
          },
          "synced_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When Elementary last synced this execution.",
            "title": "Synced At"
          },
          "test_id": {
            "description": "ID of the test that produced this execution.",
            "title": "Test Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "test_id",
          "sub_test_unique_id",
          "sub_type",
          "status",
          "failure_count",
          "start_time",
          "duration_seconds"
        ],
        "title": "TestExecution",
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "description": "Personal or account token.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "The Elementary Public API is a REST interface for programmatically reading\nElementary's assets, columns, lineage, tests, and test results for one\nenvironment.\n\n**Authentication.** Send a bearer token (personal or account token) in the\n`Authorization` header. The token resolves to an account; results are scoped to\nthe environments that token may view.\n\n**Environment scope.** Every resource lives under `/{env_id}`. Call\n`GET /environments` first to discover the ids you can access.\n\n**Pagination.** List endpoints are keyset-paginated: pass `limit` (default 500,\nmax 2000) and follow `next_cursor` until `has_more` is `false`. Cursors are opaque\nand bound to the filters that produced them \u2014 reusing a cursor with different\nfilters returns `400`.\n\n**Incremental sync.** Every dataset supports a full scan (default). Assets,\ncolumns, and tests also expose two incremental feeds: `synced_since` (upserts)\nand `deleted_since` (soft-delete tombstones). A test's `synced_at` tracks its\ndefinition \u2014 new executions do not bump it.\n\nLatest test executions and per-test execution history are **not** incremental.\nLatest executions are a full snapshot replaced in place: re-read it. Execution\nhistory is append-only and scoped to one test, filtered by `start_time_from` /\n`start_time_to` (last 30 days by default).\n\n**Lookback limit.** Explicit lower bounds (`synced_since`, `deleted_since`,\n`start_time_from`) reach back at most 90 days; an older timestamp is treated as\n90 days ago rather than rejected. Omitting the filter still returns the full\ncurrent snapshot.\n\n**Rate limiting.** Requests are rate-limited per account; responses carry\n`RateLimit-*` headers and `429` responses include `Retry-After`.\n\n_Beta: the shape may change while we co-design with early adopters._\n",
    "title": "Elementary Public API",
    "version": "beta"
  },
  "openapi": "3.1.0",
  "paths": {
    "/public/beta/environments": {
      "get": {
        "description": "Lists the environments the token can access. Each `id` is an `env_id` for the other endpoints. Call this first.",
        "operationId": "list_environments_public_beta_environments_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Environment"
                  },
                  "title": "Response List Environments Public Beta Environments Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List environments",
        "tags": ["Environments"]
      }
    },
    "/public/beta/{env_id}/asset-health-scores": {
      "get": {
        "description": "Lists the current health score of every table asset that has test results in the last 7 days \u2014 a full snapshot, recomputed hourly. Not an incremental feed: re-read the snapshot instead of tracking changes. Ordered by `asset_id`.",
        "operationId": "list_asset_health_scores_public_beta__env_id__asset_health_scores_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Return only the health scores of these asset ids.",
            "in": "query",
            "name": "asset_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only the health scores of these asset ids.",
              "title": "Asset Ids"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_AssetHealthScore_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List asset health scores",
        "tags": ["Asset health scores"]
      }
    },
    "/public/beta/{env_id}/asset-health-scores/aggregate": {
      "get": {
        "description": "Returns one health score card for a set of table assets \u2014 the same number the Data Health dashboard shows for a filter or folder. The `ids`, `source_types`, `tags`, `db_names`, `schema_names`, `materializations` and `path` filters intersect; with no filters, every table asset you can view is included. Every `ids` value must be a table asset, otherwise the request fails with 400 listing the invalid ids. The score is aggregated across the matching assets' test results in the last 7 days, not averaged from per-asset scores. When no matching asset has test results in the window, returns a zero card (`score` 0, `test_count` 0, `bucket_at` null, no dimensions) alongside `matched_count`.",
        "operationId": "aggregate_asset_health_scores_public_beta__env_id__asset_health_scores_aggregate_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Aggregate only table assets with these ids.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Aggregate only table assets with these ids.",
              "title": "Ids"
            }
          },
          {
            "description": "Aggregate only table assets from these source types (e.g. `dbt`, `fivetran`).",
            "in": "query",
            "name": "source_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Aggregate only table assets from these source types (e.g. `dbt`, `fivetran`).",
              "title": "Source Types"
            }
          },
          {
            "description": "Aggregate only table assets tagged with any of these tags.",
            "in": "query",
            "name": "tags",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Aggregate only table assets tagged with any of these tags.",
              "title": "Tags"
            }
          },
          {
            "description": "Aggregate only table assets in these databases.",
            "in": "query",
            "name": "db_names",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Aggregate only table assets in these databases.",
              "title": "Db Names"
            }
          },
          {
            "description": "Aggregate only table assets in these schemas.",
            "in": "query",
            "name": "schema_names",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Aggregate only table assets in these schemas.",
              "title": "Schema Names"
            }
          },
          {
            "description": "Aggregate only table assets with these materializations (e.g. `table`, `view`, `incremental`).",
            "in": "query",
            "name": "materializations",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Aggregate only table assets with these materializations (e.g. `table`, `view`, `incremental`).",
              "title": "Materializations"
            }
          },
          {
            "description": "Return only table assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
            "in": "query",
            "name": "path",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
              "title": "Path"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AggregatedHealthScore"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Aggregate asset health scores",
        "tags": ["Asset health scores"]
      }
    },
    "/public/beta/{env_id}/asset-health-scores/{asset_id}": {
      "get": {
        "description": "Fetches the current health score of a single table asset. Returns 404 if the id isn't a table asset in this environment or has no test results in the last 7 days.",
        "operationId": "get_asset_health_score_public_beta__env_id__asset_health_scores__asset_id__get",
        "parameters": [
          {
            "description": "Asset identifier (`Asset.id`).",
            "in": "path",
            "name": "asset_id",
            "required": true,
            "schema": {
              "description": "Asset identifier (`Asset.id`).",
              "title": "Asset Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetHealthScore"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get an asset health score",
        "tags": ["Asset health scores"]
      }
    },
    "/public/beta/{env_id}/asset-lineage": {
      "get": {
        "description": "Lists asset-to-asset lineage edges. Full scan only. Edges are returned as-is, including edges to and from ephemeral (CTE-only) dbt models; those assets are also returned by the assets endpoints.",
        "operationId": "list_asset_lineage_public_beta__env_id__asset_lineage_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Return only edges touching these asset ids.",
            "in": "query",
            "name": "asset_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only edges touching these asset ids.",
              "title": "Asset Ids"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_AssetLineage_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List asset lineage edges",
        "tags": ["Asset lineage"]
      }
    },
    "/public/beta/{env_id}/assets": {
      "get": {
        "description": "Lists lineage assets of every kind (tables, BI assets, semantic models, \u2026) with their common fields. Use `kind` to enrich a row from the typed endpoints (`/assets/tables`, `/assets/bi`). Full scan by default; pass `synced_since` for the upserts feed or `deleted_since` for the tombstones feed (mutually exclusive).",
        "operationId": "list_assets_public_beta__env_id__assets_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only assets with these ids.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only assets with these ids.",
              "title": "Ids"
            }
          },
          {
            "description": "Return only assets from these source types (e.g. `dbt`, `fivetran`, `looker`).",
            "in": "query",
            "name": "source_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only assets from these source types (e.g. `dbt`, `fivetran`, `looker`).",
              "title": "Source Types"
            }
          },
          {
            "description": "Return only assets tagged with any of these tags.",
            "in": "query",
            "name": "tags",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only assets tagged with any of these tags.",
              "title": "Tags"
            }
          },
          {
            "description": "Return only assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
            "in": "query",
            "name": "path",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
              "title": "Path"
            }
          },
          {
            "description": "Upserts feed: assets whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "synced_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Upserts feed: assets whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Synced Since"
            }
          },
          {
            "description": "Tombstones feed: assets whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "deleted_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Tombstones feed: assets whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Deleted Since"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor).",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/OrderBy",
              "default": "id",
              "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor)."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "asc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Asset_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List assets",
        "tags": ["Assets"]
      }
    },
    "/public/beta/{env_id}/assets/bi": {
      "get": {
        "description": "Lists BI assets with their BI-specific fields (`bi_platform`, `bi_type`, `url`). Full scan by default; supports the `synced_since` / `deleted_since` feeds.",
        "operationId": "list_bi_assets_public_beta__env_id__assets_bi_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only BI assets with these ids.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only BI assets with these ids.",
              "title": "Ids"
            }
          },
          {
            "description": "Return only BI assets from these source types (e.g. `looker`, `sigma`).",
            "in": "query",
            "name": "source_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only BI assets from these source types (e.g. `looker`, `sigma`).",
              "title": "Source Types"
            }
          },
          {
            "description": "Return only BI assets tagged with any of these tags.",
            "in": "query",
            "name": "tags",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only BI assets tagged with any of these tags.",
              "title": "Tags"
            }
          },
          {
            "description": "Return only BI assets on these platforms (e.g. `looker`, `sigma`, `tableau`).",
            "in": "query",
            "name": "bi_platforms",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only BI assets on these platforms (e.g. `looker`, `sigma`, `tableau`).",
              "title": "Bi Platforms"
            }
          },
          {
            "description": "Return only BI assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
            "in": "query",
            "name": "path",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only BI assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
              "title": "Path"
            }
          },
          {
            "description": "Upserts feed: assets whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "synced_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Upserts feed: assets whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Synced Since"
            }
          },
          {
            "description": "Tombstones feed: assets whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "deleted_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Tombstones feed: assets whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Deleted Since"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor).",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/OrderBy",
              "default": "id",
              "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor)."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "asc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_BiAsset_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List BI assets",
        "tags": ["Assets"]
      }
    },
    "/public/beta/{env_id}/assets/bi/{asset_id}": {
      "get": {
        "description": "Fetches a single BI asset by id. Returns 404 if it doesn't exist in this environment or isn't a BI asset.",
        "operationId": "get_bi_asset_public_beta__env_id__assets_bi__asset_id__get",
        "parameters": [
          {
            "description": "Asset identifier.",
            "in": "path",
            "name": "asset_id",
            "required": true,
            "schema": {
              "description": "Asset identifier.",
              "title": "Asset Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BiAsset"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get a BI asset",
        "tags": ["Assets"]
      }
    },
    "/public/beta/{env_id}/assets/tables": {
      "get": {
        "description": "Lists warehouse table assets with their warehouse-specific fields (`data_platform`, `db_name`, `schema_name`, `table_name`, `materialization`). Full scan by default; supports the `synced_since` / `deleted_since` feeds.",
        "operationId": "list_table_assets_public_beta__env_id__assets_tables_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only table assets with these ids.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets with these ids.",
              "title": "Ids"
            }
          },
          {
            "description": "Return only table assets from these source types (e.g. `dbt`, `fivetran`).",
            "in": "query",
            "name": "source_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets from these source types (e.g. `dbt`, `fivetran`).",
              "title": "Source Types"
            }
          },
          {
            "description": "Return only table assets tagged with any of these tags.",
            "in": "query",
            "name": "tags",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets tagged with any of these tags.",
              "title": "Tags"
            }
          },
          {
            "description": "Return only table assets in these databases.",
            "in": "query",
            "name": "db_names",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets in these databases.",
              "title": "Db Names"
            }
          },
          {
            "description": "Return only table assets in these schemas.",
            "in": "query",
            "name": "schema_names",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets in these schemas.",
              "title": "Schema Names"
            }
          },
          {
            "description": "Return only table assets with these materializations (e.g. `table`, `view`, `incremental`).",
            "in": "query",
            "name": "materializations",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets with these materializations (e.g. `table`, `view`, `incremental`).",
              "title": "Materializations"
            }
          },
          {
            "description": "Return only table assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
            "in": "query",
            "name": "path",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only table assets whose `path` equals one of these paths or is nested under one of them (`/`-separated, e.g. `models/marts` matches `models/marts/orders.sql`; a trailing `/` is ignored). Repeatable; assets without a `path` never match.",
              "title": "Path"
            }
          },
          {
            "description": "Upserts feed: assets whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "synced_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Upserts feed: assets whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Synced Since"
            }
          },
          {
            "description": "Tombstones feed: assets whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "deleted_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Tombstones feed: assets whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Deleted Since"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor).",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/OrderBy",
              "default": "id",
              "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor)."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "asc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_TableAsset_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List table assets",
        "tags": ["Assets"]
      }
    },
    "/public/beta/{env_id}/assets/tables/{asset_id}": {
      "get": {
        "description": "Fetches a single table asset by id. Returns 404 if it doesn't exist in this environment or isn't a table asset.",
        "operationId": "get_table_asset_public_beta__env_id__assets_tables__asset_id__get",
        "parameters": [
          {
            "description": "Asset identifier.",
            "in": "path",
            "name": "asset_id",
            "required": true,
            "schema": {
              "description": "Asset identifier.",
              "title": "Asset Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TableAsset"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get a table asset",
        "tags": ["Assets"]
      }
    },
    "/public/beta/{env_id}/assets/{asset_id}": {
      "get": {
        "description": "Fetches a single asset (common fields) by id. Returns 404 if it doesn't exist in this environment.",
        "operationId": "get_asset_public_beta__env_id__assets__asset_id__get",
        "parameters": [
          {
            "description": "Asset identifier.",
            "in": "path",
            "name": "asset_id",
            "required": true,
            "schema": {
              "description": "Asset identifier.",
              "title": "Asset Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Asset"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get an asset",
        "tags": ["Assets"]
      }
    },
    "/public/beta/{env_id}/column-lineage": {
      "get": {
        "description": "Lists column-to-column lineage edges, one record per edge (mirroring the asset-lineage shape). Full scan by default; the `synced_since` / `deleted_since` feeds filter on the downstream column's timestamps.",
        "operationId": "list_column_lineage_public_beta__env_id__column_lineage_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only edges whose downstream column is in this set.",
            "in": "query",
            "name": "column_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only edges whose downstream column is in this set.",
              "title": "Column Ids"
            }
          },
          {
            "description": "Return only edges whose downstream column belongs to these asset ids.",
            "in": "query",
            "name": "asset_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only edges whose downstream column belongs to these asset ids.",
              "title": "Asset Ids"
            }
          },
          {
            "description": "Upserts feed: edges whose downstream column `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "synced_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Upserts feed: edges whose downstream column `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Synced Since"
            }
          },
          {
            "description": "Tombstones feed: edges whose downstream column `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "deleted_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Tombstones feed: edges whose downstream column `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Deleted Since"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor).",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/OrderBy",
              "default": "id",
              "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor)."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "asc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_ColumnLineage_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List column lineage",
        "tags": ["Column lineage"]
      }
    },
    "/public/beta/{env_id}/columns": {
      "get": {
        "description": "Lists asset columns. Full scan by default; pass `synced_since` for the upserts feed or `deleted_since` for the tombstones feed.",
        "operationId": "list_columns_public_beta__env_id__columns_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only columns with these ids.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only columns with these ids.",
              "title": "Ids"
            }
          },
          {
            "description": "Return only columns belonging to these asset ids.",
            "in": "query",
            "name": "asset_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only columns belonging to these asset ids.",
              "title": "Asset Ids"
            }
          },
          {
            "description": "Return only columns with these data types.",
            "in": "query",
            "name": "data_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only columns with these data types.",
              "title": "Data Types"
            }
          },
          {
            "description": "Upserts feed: columns whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "synced_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Upserts feed: columns whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Synced Since"
            }
          },
          {
            "description": "Tombstones feed: columns whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "deleted_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Tombstones feed: columns whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Deleted Since"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor).",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/OrderBy",
              "default": "id",
              "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor)."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "asc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Column_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List columns",
        "tags": ["Columns"]
      }
    },
    "/public/beta/{env_id}/columns/{column_id}": {
      "get": {
        "description": "Fetches a single column by id. Returns 404 if it doesn't exist in this environment.",
        "operationId": "get_column_public_beta__env_id__columns__column_id__get",
        "parameters": [
          {
            "description": "Column identifier.",
            "in": "path",
            "name": "column_id",
            "required": true,
            "schema": {
              "description": "Column identifier.",
              "title": "Column Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Column"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get a column",
        "tags": ["Columns"]
      }
    },
    "/public/beta/{env_id}/latest-test-executions": {
      "get": {
        "description": "Lists the most recent execution of every sub-test \u2014 a full snapshot of current test results. Not an incremental feed: rows are replaced in place, so re-read the snapshot instead of passing `synced_since`. Executions of disabled tests are omitted unless `disabled=true` is passed, and executions whose test was deleted are never returned.",
        "operationId": "list_latest_test_executions_public_beta__env_id__latest_test_executions_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only executions of these sub-tests.",
            "in": "query",
            "name": "sub_test_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions of these sub-tests.",
              "title": "Sub Test Ids"
            }
          },
          {
            "description": "Return only executions of these tests.",
            "in": "query",
            "name": "test_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions of these tests.",
              "title": "Test Ids"
            }
          },
          {
            "description": "Return only executions of tests on these asset ids.",
            "in": "query",
            "name": "asset_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions of tests on these asset ids.",
              "title": "Asset Ids"
            }
          },
          {
            "description": "Return only executions of tests of these test types.",
            "in": "query",
            "name": "test_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions of tests of these test types.",
              "title": "Test Types"
            }
          },
          {
            "description": "Return only executions of tests of these definition types.",
            "in": "query",
            "name": "definition_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions of tests of these definition types.",
              "title": "Definition Types"
            }
          },
          {
            "description": "Return only executions from these source types (e.g. `dbt`, `elementary_cloud`).",
            "in": "query",
            "name": "source_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions from these source types (e.g. `dbt`, `elementary_cloud`).",
              "title": "Source Types"
            }
          },
          {
            "description": "Return only executions with these statuses, as stored (e.g. `PASS`, `WARN`, `FAIL`, `ERROR`, `SKIPPED`, `NO_DATA`).",
            "in": "query",
            "name": "statuses",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions with these statuses, as stored (e.g. `PASS`, `WARN`, `FAIL`, `ERROR`, `SKIPPED`, `NO_DATA`).",
              "title": "Statuses"
            }
          },
          {
            "description": "Disabled tests' executions are omitted by default. Pass `true` to return only the disabled ones, `false` for the default (enabled only).",
            "in": "query",
            "name": "disabled",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Disabled tests' executions are omitted by default. Pass `true` to return only the disabled ones, `false` for the default (enabled only).",
              "title": "Disabled"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor).",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/OrderBy",
              "default": "id",
              "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor)."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "asc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_TestExecution_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List latest test executions",
        "tags": ["Latest test executions"]
      }
    },
    "/public/beta/{env_id}/latest-test-executions/{sub_test_unique_id}": {
      "get": {
        "description": "Fetches the most recent execution of a single sub-test by its `sub_test_unique_id`. Returns 404 if it doesn't exist in this environment or its test was deleted.",
        "operationId": "get_latest_test_execution_public_beta__env_id__latest_test_executions__sub_test_unique_id__get",
        "parameters": [
          {
            "description": "Sub-test identifier (`sub_test_unique_id`).",
            "in": "path",
            "name": "sub_test_unique_id",
            "required": true,
            "schema": {
              "description": "Sub-test identifier (`sub_test_unique_id`).",
              "title": "Sub Test Unique Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TestExecution"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get a latest test execution",
        "tags": ["Latest test executions"]
      }
    },
    "/public/beta/{env_id}/tests": {
      "get": {
        "description": "Lists test definitions. On a full scan disabled tests are omitted unless `disabled=true` is passed; the `synced_since` and `deleted_since` feeds always include them (with `disabled: true`) so a sync can observe a test being disabled. Full scan by default; pass `synced_since` for the upserts feed or `deleted_since` for the tombstones feed (mutually exclusive). A test's `synced_at` changes when its definition changes \u2014 new executions do not bump it.",
        "operationId": "list_tests_public_beta__env_id__tests_get",
        "parameters": [
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only tests with these ids.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only tests with these ids.",
              "title": "Ids"
            }
          },
          {
            "description": "Return only tests running on these asset ids.",
            "in": "query",
            "name": "asset_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only tests running on these asset ids.",
              "title": "Asset Ids"
            }
          },
          {
            "description": "Return only tests of these test types.",
            "in": "query",
            "name": "test_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only tests of these test types.",
              "title": "Test Types"
            }
          },
          {
            "description": "Return only tests of these definition types.",
            "in": "query",
            "name": "definition_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only tests of these definition types.",
              "title": "Definition Types"
            }
          },
          {
            "description": "Return only tests from these source types (e.g. `dbt`, `elementary_cloud`).",
            "in": "query",
            "name": "source_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only tests from these source types (e.g. `dbt`, `elementary_cloud`).",
              "title": "Source Types"
            }
          },
          {
            "description": "Return only tests tagged with any of these tags.",
            "in": "query",
            "name": "tags",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only tests tagged with any of these tags.",
              "title": "Tags"
            }
          },
          {
            "description": "Disabled tests are omitted by default. Pass `true` to return only the disabled ones, `false` for the default (enabled only).",
            "in": "query",
            "name": "disabled",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Disabled tests are omitted by default. Pass `true` to return only the disabled ones, `false` for the default (enabled only).",
              "title": "Disabled"
            }
          },
          {
            "description": "Upserts feed: tests whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "synced_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Upserts feed: tests whose `synced_at` >= this time (inclusive). Orders by `synced_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Synced Since"
            }
          },
          {
            "description": "Tombstones feed: tests whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "deleted_since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Tombstones feed: tests whose `deleted_at` >= this time (inclusive). Orders by `deleted_at`. Clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Deleted Since"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor).",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/OrderBy",
              "default": "id",
              "description": "Sort field for a full scan. Ignored when `synced_since`/`deleted_since` is set (those feeds always order by their own cursor)."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "asc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Test_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List tests",
        "tags": ["Tests"]
      }
    },
    "/public/beta/{env_id}/tests/{test_id}": {
      "get": {
        "description": "Fetches a single test by id, including disabled tests. Returns 404 if it doesn't exist in this environment.",
        "operationId": "get_test_public_beta__env_id__tests__test_id__get",
        "parameters": [
          {
            "description": "Test identifier.",
            "in": "path",
            "name": "test_id",
            "required": true,
            "schema": {
              "description": "Test identifier.",
              "title": "Test Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Test"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get a test",
        "tags": ["Tests"]
      }
    },
    "/public/beta/{env_id}/tests/{test_id}/executions": {
      "get": {
        "description": "Lists the execution history of a single test, most recent first. Covers the last 30 days unless `start_time_from` is passed. Not an incremental feed \u2014 page through it with `start_time_from` / `start_time_to`. Returns 404 if the test doesn't exist in this environment or isn't visible to the token.",
        "operationId": "list_test_executions_public_beta__env_id__tests__test_id__executions_get",
        "parameters": [
          {
            "description": "Test identifier.",
            "in": "path",
            "name": "test_id",
            "required": true,
            "schema": {
              "description": "Test identifier.",
              "title": "Test Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          },
          {
            "description": "Return only executions of these sub-tests.",
            "in": "query",
            "name": "sub_test_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions of these sub-tests.",
              "title": "Sub Test Ids"
            }
          },
          {
            "description": "Return only executions with these statuses, as stored (e.g. `PASS`, `WARN`, `FAIL`, `ERROR`, `SKIPPED`, `NO_DATA`).",
            "in": "query",
            "name": "statuses",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 1000,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions with these statuses, as stored (e.g. `PASS`, `WARN`, `FAIL`, `ERROR`, `SKIPPED`, `NO_DATA`).",
              "title": "Statuses"
            }
          },
          {
            "description": "Return only executions that started at or after this time. Defaults to 30 days ago, and is clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
            "in": "query",
            "name": "start_time_from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions that started at or after this time. Defaults to 30 days ago, and is clamped to the last 90 days \u2014 an older time is treated as 90 days ago.",
              "title": "Start Time From"
            }
          },
          {
            "description": "Return only executions that started at or before this time.",
            "in": "query",
            "name": "start_time_to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return only executions that started at or before this time.",
              "title": "Start Time To"
            }
          },
          {
            "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from a previous response's `next_cursor`. Reuse it only with the identical query parameters that produced it.",
              "title": "Cursor"
            }
          },
          {
            "description": "Maximum items to return per page (1-2000).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 500,
              "description": "Maximum items to return per page (1-2000).",
              "maximum": 2000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Sort field for the execution history.",
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/HistoryOrderBy",
              "default": "start_time",
              "description": "Sort field for the execution history."
            }
          },
          {
            "description": "Sort direction for `order_by`.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Direction",
              "default": "desc",
              "description": "Sort direction for `order_by`."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_TestExecution_"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "List test executions",
        "tags": ["Test executions"]
      }
    },
    "/public/beta/{env_id}/tests/{test_id}/executions/{execution_id}": {
      "get": {
        "description": "Fetches a single execution of a test. Returns 404 if the execution or the test doesn't exist in this environment, or if the execution belongs to a different test.",
        "operationId": "get_test_execution_public_beta__env_id__tests__test_id__executions__execution_id__get",
        "parameters": [
          {
            "description": "Test identifier.",
            "in": "path",
            "name": "test_id",
            "required": true,
            "schema": {
              "description": "Test identifier.",
              "title": "Test Id",
              "type": "string"
            }
          },
          {
            "description": "Test execution identifier.",
            "in": "path",
            "name": "execution_id",
            "required": true,
            "schema": {
              "description": "Test execution identifier.",
              "title": "Execution Id",
              "type": "string"
            }
          },
          {
            "description": "Environment identifier that scopes the request.",
            "in": "path",
            "name": "env_id",
            "required": true,
            "schema": {
              "description": "Environment identifier that scopes the request.",
              "title": "Env Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TestExecution"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Invalid cursor or request parameters."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Authentication is required."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The token does not have permission to access the resource."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "The requested resource was not found."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Request validation failed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "RateLimit-Limit": {
                "description": "Maximum requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current rate-limit window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            },
            "description": "An unexpected server error occurred."
          }
        },
        "summary": "Get a test execution",
        "tags": ["Test executions"]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://prod.api.elementary-data.com"
    }
  ],
  "tags": [
    {
      "description": "Discover accessible environments.",
      "name": "Environments"
    },
    {
      "description": "Lineage assets \u2014 tables, views, BI assets.",
      "name": "Assets"
    },
    {
      "description": "Columns of assets.",
      "name": "Columns"
    },
    {
      "description": "Asset-to-asset lineage edges.",
      "name": "Asset lineage"
    },
    {
      "description": "Column-level lineage edges.",
      "name": "Column lineage"
    },
    {
      "description": "Test definitions and their configuration.",
      "name": "Tests"
    },
    {
      "description": "Most recent execution of every sub-test.",
      "name": "Latest test executions"
    },
    {
      "description": "Execution history of a single test.",
      "name": "Test executions"
    },
    {
      "description": "Current data health score per asset.",
      "name": "Asset health scores"
    }
  ]
}
