POST /v1/dataContracts
from metadata.sdk import configure
from metadata.sdk.entities import DataContracts
configure(
host="https://your-company.open-metadata.org/api",
jwt_token="your-jwt-token"
)
# Create a basic data contract for a table
contract = DataContracts.create(
name="sales-orders-contract",
entity={
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table"
},
description="Data contract for the sales orders table",
entityStatus="Active",
schema=[
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
semantics=[
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
sla={
"refreshFrequency": "PT1H",
"availability": 99.9
}
)
print(f"Created contract: {contract.fullyQualifiedName}")
import static org.openmetadata.sdk.fluent.DataContracts.*;
// Create a data contract with fluent API
DataContract contract = create()
.name("sales-orders-contract")
.forEntity(new EntityReference()
.withId(tableId)
.withType("table"))
.withDescription("Data contract for the sales orders table")
.withStatus(EntityStatus.ACTIVE)
.withSchema(List.of(
new Column().withName("order_id").withDataType(ColumnDataType.INT),
new Column().withName("customer_id").withDataType(ColumnDataType.INT),
new Column().withName("order_date").withDataType(ColumnDataType.TIMESTAMP)
))
.withSemanticRule(new SemanticsRule().withName("hasOwner"))
.withSemanticRule(new SemanticsRule().withName("hasDescription"))
.withSla(new ContractSLA()
.withRefreshFrequency("PT1H")
.withAvailability(99.9))
.execute();
curl -X POST "{base_url}/api/v1/dataContracts" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"name": "sales-orders-contract",
"entity": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table"
},
"description": "Data contract for the sales orders table",
"entityStatus": "Active",
"schema": [
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
"semantics": [
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
"sla": {
"refreshFrequency": "PT1H",
"availability": 99.9
}
}'
{
"id": "f7a1b2c3-d4e5-6789-0abc-def123456789",
"name": "sales-orders-contract",
"fullyQualifiedName": "sales-orders-contract",
"displayName": "sales-orders-contract",
"description": "Data contract for the sales orders table",
"entityStatus": "Active",
"entity": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table",
"name": "sales_orders",
"fullyQualifiedName": "sample_data.ecommerce_db.shopify.sales_orders"
},
"schema": [
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
"semantics": [
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
"sla": {
"refreshFrequency": "PT1H",
"availability": 99.9
},
"version": 0.1,
"updatedAt": 1769982800000,
"updatedBy": "admin"
}
Create a Data Contract
Create a new data contract for a data asset
POST
/
v1
/
dataContracts
POST /v1/dataContracts
from metadata.sdk import configure
from metadata.sdk.entities import DataContracts
configure(
host="https://your-company.open-metadata.org/api",
jwt_token="your-jwt-token"
)
# Create a basic data contract for a table
contract = DataContracts.create(
name="sales-orders-contract",
entity={
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table"
},
description="Data contract for the sales orders table",
entityStatus="Active",
schema=[
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
semantics=[
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
sla={
"refreshFrequency": "PT1H",
"availability": 99.9
}
)
print(f"Created contract: {contract.fullyQualifiedName}")
import static org.openmetadata.sdk.fluent.DataContracts.*;
// Create a data contract with fluent API
DataContract contract = create()
.name("sales-orders-contract")
.forEntity(new EntityReference()
.withId(tableId)
.withType("table"))
.withDescription("Data contract for the sales orders table")
.withStatus(EntityStatus.ACTIVE)
.withSchema(List.of(
new Column().withName("order_id").withDataType(ColumnDataType.INT),
new Column().withName("customer_id").withDataType(ColumnDataType.INT),
new Column().withName("order_date").withDataType(ColumnDataType.TIMESTAMP)
))
.withSemanticRule(new SemanticsRule().withName("hasOwner"))
.withSemanticRule(new SemanticsRule().withName("hasDescription"))
.withSla(new ContractSLA()
.withRefreshFrequency("PT1H")
.withAvailability(99.9))
.execute();
curl -X POST "{base_url}/api/v1/dataContracts" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"name": "sales-orders-contract",
"entity": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table"
},
"description": "Data contract for the sales orders table",
"entityStatus": "Active",
"schema": [
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
"semantics": [
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
"sla": {
"refreshFrequency": "PT1H",
"availability": 99.9
}
}'
{
"id": "f7a1b2c3-d4e5-6789-0abc-def123456789",
"name": "sales-orders-contract",
"fullyQualifiedName": "sales-orders-contract",
"displayName": "sales-orders-contract",
"description": "Data contract for the sales orders table",
"entityStatus": "Active",
"entity": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table",
"name": "sales_orders",
"fullyQualifiedName": "sample_data.ecommerce_db.shopify.sales_orders"
},
"schema": [
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
"semantics": [
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
"sla": {
"refreshFrequency": "PT1H",
"availability": 99.9
},
"version": 0.1,
"updatedAt": 1769982800000,
"updatedBy": "admin"
}
Create a Data Contract
Create a new data contract and attach it to a data asset. Only thename and entity reference are required — all other sections (schema, semantics, quality, SLA, security, terms of use) are optional.
Body Parameters
Name of the data contract. Must be unique.
Reference to the data asset this contract applies to.
Human-readable display name.
Description in Markdown format.
Contract status:
Draft, Active, or Deprecated.Terms of use in Markdown format. Describes allowed/disallowed use cases and compliance requirements.
Owner references (users or teams).
Reviewer user references.
ISO 8601 date from which this contract is effective.
ISO 8601 date until which this contract is effective.
POST /v1/dataContracts
from metadata.sdk import configure
from metadata.sdk.entities import DataContracts
configure(
host="https://your-company.open-metadata.org/api",
jwt_token="your-jwt-token"
)
# Create a basic data contract for a table
contract = DataContracts.create(
name="sales-orders-contract",
entity={
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table"
},
description="Data contract for the sales orders table",
entityStatus="Active",
schema=[
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
semantics=[
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
sla={
"refreshFrequency": "PT1H",
"availability": 99.9
}
)
print(f"Created contract: {contract.fullyQualifiedName}")
import static org.openmetadata.sdk.fluent.DataContracts.*;
// Create a data contract with fluent API
DataContract contract = create()
.name("sales-orders-contract")
.forEntity(new EntityReference()
.withId(tableId)
.withType("table"))
.withDescription("Data contract for the sales orders table")
.withStatus(EntityStatus.ACTIVE)
.withSchema(List.of(
new Column().withName("order_id").withDataType(ColumnDataType.INT),
new Column().withName("customer_id").withDataType(ColumnDataType.INT),
new Column().withName("order_date").withDataType(ColumnDataType.TIMESTAMP)
))
.withSemanticRule(new SemanticsRule().withName("hasOwner"))
.withSemanticRule(new SemanticsRule().withName("hasDescription"))
.withSla(new ContractSLA()
.withRefreshFrequency("PT1H")
.withAvailability(99.9))
.execute();
curl -X POST "{base_url}/api/v1/dataContracts" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"name": "sales-orders-contract",
"entity": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table"
},
"description": "Data contract for the sales orders table",
"entityStatus": "Active",
"schema": [
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
"semantics": [
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
"sla": {
"refreshFrequency": "PT1H",
"availability": 99.9
}
}'
{
"id": "f7a1b2c3-d4e5-6789-0abc-def123456789",
"name": "sales-orders-contract",
"fullyQualifiedName": "sales-orders-contract",
"displayName": "sales-orders-contract",
"description": "Data contract for the sales orders table",
"entityStatus": "Active",
"entity": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "table",
"name": "sales_orders",
"fullyQualifiedName": "sample_data.ecommerce_db.shopify.sales_orders"
},
"schema": [
{"name": "order_id", "dataType": "INT", "constraint": "PRIMARY_KEY"},
{"name": "customer_id", "dataType": "INT", "constraint": "NOT_NULL"},
{"name": "order_date", "dataType": "TIMESTAMP", "constraint": "NOT_NULL"},
{"name": "total_amount", "dataType": "DECIMAL"}
],
"semantics": [
{"name": "hasOwner"},
{"name": "hasDescription"},
{"name": "hasTags"}
],
"sla": {
"refreshFrequency": "PT1H",
"availability": 99.9
},
"version": 0.1,
"updatedAt": 1769982800000,
"updatedBy": "admin"
}
Upsert (Create or Update)
UsePUT /v1/dataContracts with the same body to create a new contract or update an existing one.
Error Handling
| Code | Error Type | Description |
|---|---|---|
400 | BAD_REQUEST | Invalid request body or missing required fields |
401 | UNAUTHORIZED | Invalid or missing authentication token |
403 | FORBIDDEN | User lacks permission to create data contracts |
409 | CONFLICT | A contract with the same name already exists |
Was this page helpful?
⌘I