PUT /v1/dataProducts/{fqn}/assets/add
from metadata.generated.schema.type.entityReference import EntityReference
from metadata.sdk import configure
from metadata.sdk.entities import DataProducts
configure(
host="https://your-company.open-metadata.org/api",
jwt_token="your-jwt-token"
)
# Identify the data product by its fully qualified name, and each asset by its UUID.
# Add input ports
DataProducts.add_input_ports(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-1", type="table")]
)
# Remove input ports
DataProducts.remove_input_ports(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-1", type="table")]
)
# Add output ports
DataProducts.add_output_ports(
"Marketing.CustomerInsights",
[EntityReference(id="dashboard-uuid-1", type="dashboard")]
)
# Remove output ports
DataProducts.remove_output_ports(
"Marketing.CustomerInsights",
[EntityReference(id="dashboard-uuid-1", type="dashboard")]
)
# Add assets
DataProducts.add_assets(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-2", type="table")]
)
# Remove assets
DataProducts.remove_assets(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-2", type="table")]
)
import static org.openmetadata.sdk.fluent.DataProducts.*;
// Identify the data product by its fully qualified name, and each asset by its UUID.
// Add assets
DataProducts.addAssets(
"Marketing.CustomerInsights",
List.of(new EntityReference("table-uuid-1", "table"))
);
// Remove assets
DataProducts.removeAssets(
"Marketing.CustomerInsights",
List.of(new EntityReference("table-uuid-1", "table"))
);
# The path identifier is the data product's fully qualified name. URL-encode it if it contains spaces.
# Add assets
curl -X PUT "{base_url}/api/v1/dataProducts/Marketing.CustomerInsights/assets/add" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{"id": "table-uuid-1", "type": "table"},
{"id": "topic-uuid-1", "type": "topic"}
]
}'
# Remove assets
curl -X PUT "{base_url}/api/v1/dataProducts/Marketing.CustomerInsights/assets/remove" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{"id": "table-uuid-1", "type": "table"}
]
}'
{
"id": "b1839f98-f046-5f35-bdef-20f9b3395cb2",
"name": "CustomerInsights",
"fullyQualifiedName": "Marketing.CustomerInsights",
"description": "Curated customer analytics data product",
"version": 0.3,
"updatedAt": 1769984330261,
"updatedBy": "admin",
"href": "http://localhost:8585/api/v1/dataProducts/b1839f98-f046-5f35-bdef-20f9b3395cb2",
"domain": {
"id": "a0729e98-e946-4e25-acde-10e8a2294ba1",
"type": "domain",
"name": "Marketing",
"fullyQualifiedName": "Marketing",
"deleted": false
},
"deleted": false,
"owners": [],
"experts": []
}
Ports & Assets
Manage input ports, output ports, and assets for a data product
PUT
/
v1
/
dataProducts
/
{fqn}
/
assets
/
add
PUT /v1/dataProducts/{fqn}/assets/add
from metadata.generated.schema.type.entityReference import EntityReference
from metadata.sdk import configure
from metadata.sdk.entities import DataProducts
configure(
host="https://your-company.open-metadata.org/api",
jwt_token="your-jwt-token"
)
# Identify the data product by its fully qualified name, and each asset by its UUID.
# Add input ports
DataProducts.add_input_ports(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-1", type="table")]
)
# Remove input ports
DataProducts.remove_input_ports(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-1", type="table")]
)
# Add output ports
DataProducts.add_output_ports(
"Marketing.CustomerInsights",
[EntityReference(id="dashboard-uuid-1", type="dashboard")]
)
# Remove output ports
DataProducts.remove_output_ports(
"Marketing.CustomerInsights",
[EntityReference(id="dashboard-uuid-1", type="dashboard")]
)
# Add assets
DataProducts.add_assets(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-2", type="table")]
)
# Remove assets
DataProducts.remove_assets(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-2", type="table")]
)
import static org.openmetadata.sdk.fluent.DataProducts.*;
// Identify the data product by its fully qualified name, and each asset by its UUID.
// Add assets
DataProducts.addAssets(
"Marketing.CustomerInsights",
List.of(new EntityReference("table-uuid-1", "table"))
);
// Remove assets
DataProducts.removeAssets(
"Marketing.CustomerInsights",
List.of(new EntityReference("table-uuid-1", "table"))
);
# The path identifier is the data product's fully qualified name. URL-encode it if it contains spaces.
# Add assets
curl -X PUT "{base_url}/api/v1/dataProducts/Marketing.CustomerInsights/assets/add" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{"id": "table-uuid-1", "type": "table"},
{"id": "topic-uuid-1", "type": "topic"}
]
}'
# Remove assets
curl -X PUT "{base_url}/api/v1/dataProducts/Marketing.CustomerInsights/assets/remove" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{"id": "table-uuid-1", "type": "table"}
]
}'
{
"id": "b1839f98-f046-5f35-bdef-20f9b3395cb2",
"name": "CustomerInsights",
"fullyQualifiedName": "Marketing.CustomerInsights",
"description": "Curated customer analytics data product",
"version": 0.3,
"updatedAt": 1769984330261,
"updatedBy": "admin",
"href": "http://localhost:8585/api/v1/dataProducts/b1839f98-f046-5f35-bdef-20f9b3395cb2",
"domain": {
"id": "a0729e98-e946-4e25-acde-10e8a2294ba1",
"type": "domain",
"name": "Marketing",
"fullyQualifiedName": "Marketing",
"deleted": false
},
"deleted": false,
"owners": [],
"experts": []
}
Ports & Assets
Manage the input ports, output ports, and associated assets of a data product. These endpoints allow you to add or remove data assets from a data product without replacing the entire entity.Add Assets
UsePUT /v1/dataProducts/{fqn}/assets/add to add assets to a data product.
string
required
Fully qualified name of the data product, such as
Marketing.CustomerInsights.array
required
Remove Assets
UsePUT /v1/dataProducts/{fqn}/assets/remove to remove assets from a data product.
string
required
Fully qualified name of the data product, such as
Marketing.CustomerInsights.array
required
PUT /v1/dataProducts/{fqn}/assets/add
from metadata.generated.schema.type.entityReference import EntityReference
from metadata.sdk import configure
from metadata.sdk.entities import DataProducts
configure(
host="https://your-company.open-metadata.org/api",
jwt_token="your-jwt-token"
)
# Identify the data product by its fully qualified name, and each asset by its UUID.
# Add input ports
DataProducts.add_input_ports(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-1", type="table")]
)
# Remove input ports
DataProducts.remove_input_ports(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-1", type="table")]
)
# Add output ports
DataProducts.add_output_ports(
"Marketing.CustomerInsights",
[EntityReference(id="dashboard-uuid-1", type="dashboard")]
)
# Remove output ports
DataProducts.remove_output_ports(
"Marketing.CustomerInsights",
[EntityReference(id="dashboard-uuid-1", type="dashboard")]
)
# Add assets
DataProducts.add_assets(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-2", type="table")]
)
# Remove assets
DataProducts.remove_assets(
"Marketing.CustomerInsights",
[EntityReference(id="table-uuid-2", type="table")]
)
import static org.openmetadata.sdk.fluent.DataProducts.*;
// Identify the data product by its fully qualified name, and each asset by its UUID.
// Add assets
DataProducts.addAssets(
"Marketing.CustomerInsights",
List.of(new EntityReference("table-uuid-1", "table"))
);
// Remove assets
DataProducts.removeAssets(
"Marketing.CustomerInsights",
List.of(new EntityReference("table-uuid-1", "table"))
);
# The path identifier is the data product's fully qualified name. URL-encode it if it contains spaces.
# Add assets
curl -X PUT "{base_url}/api/v1/dataProducts/Marketing.CustomerInsights/assets/add" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{"id": "table-uuid-1", "type": "table"},
{"id": "topic-uuid-1", "type": "topic"}
]
}'
# Remove assets
curl -X PUT "{base_url}/api/v1/dataProducts/Marketing.CustomerInsights/assets/remove" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{"id": "table-uuid-1", "type": "table"}
]
}'
{
"id": "b1839f98-f046-5f35-bdef-20f9b3395cb2",
"name": "CustomerInsights",
"fullyQualifiedName": "Marketing.CustomerInsights",
"description": "Curated customer analytics data product",
"version": 0.3,
"updatedAt": 1769984330261,
"updatedBy": "admin",
"href": "http://localhost:8585/api/v1/dataProducts/b1839f98-f046-5f35-bdef-20f9b3395cb2",
"domain": {
"id": "a0729e98-e946-4e25-acde-10e8a2294ba1",
"type": "domain",
"name": "Marketing",
"fullyQualifiedName": "Marketing",
"deleted": false
},
"deleted": false,
"owners": [],
"experts": []
}
Returns
Returns the updated data product object with the new version number reflecting the asset changes.Error Handling
| Code | Error Type | Description |
|---|---|---|
400 | BAD_REQUEST | Invalid request body or asset references |
401 | UNAUTHORIZED | Invalid or missing authentication token |
403 | FORBIDDEN | User lacks permission to modify this data product |
404 | NOT_FOUND | Data product or referenced asset does not exist |
Was this page helpful?