PATCH /v1/topics/{id}
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
AuthProvider,
OpenMetadataConnection,
)
from metadata.generated.schema.security.client.openMetadataJWTClientConfig import (
OpenMetadataJWTClientConfig,
)
from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.generated.schema.entity.data.topic import Topic
from metadata.generated.schema.type.schema import SchemaType, Topic as TopicSchema
metadata = OpenMetadata(
OpenMetadataConnection(
hostPort="https://your-company.getcollate.io/api",
authProvider=AuthProvider.openmetadata,
securityConfig=OpenMetadataJWTClientConfig(jwtToken="your-jwt-token"),
)
)
# Retrieve, modify, and update
topic = metadata.get_by_id(entity=Topic, entity_id="0a021819-982e-4ee4-a5a2-4af30eaa3016")
modified = topic.model_copy(deep=True)
modified.description = "Updated: All Protobuf record events captured with enhanced schema"
modified.messageSchema = TopicSchema(
schemaType=SchemaType.Protobuf,
schemaText="syntax = \"proto3\";\npackage tutorial;\nmessage Person { ... }"
)
updated = metadata.patch(entity=Topic, source=topic, destination=modified)
print(f"Updated to version {updated.version.root}")
import org.openmetadata.schema.entity.data.Topic;
// client is an initialized OpenMetadataClient.
// Retrieve, modify, and update
Topic topic = client.topics().get("0a021819-982e-4ee4-a5a2-4af30eaa3016");
topic.setDescription("Updated: All Protobuf record events captured with enhanced schema");
Topic updated = client.topics().update(topic.getId(), topic);
# Update by ID
curl -X PATCH "{base_url}/api/v1/topics/0a021819-982e-4ee4-a5a2-4af30eaa3016" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json-patch+json" \
-d '[
{"op": "replace", "path": "/description", "value": "Updated: All Protobuf record events captured with enhanced schema"}
]'
# Update by name
curl -X PATCH "{base_url}/api/v1/topics/name/sample_kafka.address_book" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json-patch+json" \
-d '[
{"op": "replace", "path": "/description", "value": "Updated: All Protobuf record events captured with enhanced schema"}
]'
{
"id": "0a021819-982e-4ee4-a5a2-4af30eaa3016",
"name": "address_book",
"fullyQualifiedName": "sample_kafka.address_book",
"description": "Updated: All Protobuf record events captured with enhanced schema",
"version": 0.2,
"updatedAt": 1769982663546,
"updatedBy": "admin",
"service": {
"id": "469ef25e-9bdf-4d5f-8553-eb0ce8581f30",
"type": "messagingService",
"name": "sample_kafka",
"fullyQualifiedName": "sample_kafka",
"displayName": "sample_kafka",
"deleted": false
},
"serviceType": "Kafka",
"messageSchema": {
"schemaText": "syntax = \"proto2\";\npackage tutorial;\nmessage Person { ... }",
"schemaType": "Protobuf",
"schemaFields": [
{
"name": "AddressBook",
"dataType": "RECORD",
"fullyQualifiedName": "sample_kafka.address_book.AddressBook",
"children": []
}
]
},
"partitions": 1,
"cleanupPolicies": ["delete"],
"replicationFactor": 1,
"maximumMessageSize": 1,
"retentionSize": -1,
"href": "http://localhost:8585/api/v1/topics/0a021819-982e-4ee4-a5a2-4af30eaa3016",
"deleted": false,
"owners": [],
"tags": [],
"domains": []
}
Update a Topic
Update topic properties using JSON Patch operations (add, remove, replace) to modify metadata fields like description, owners, tags, and custom properties via the Collate REST API.
PATCH
/
v1
/
topics
/
{id}
PATCH /v1/topics/{id}
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
AuthProvider,
OpenMetadataConnection,
)
from metadata.generated.schema.security.client.openMetadataJWTClientConfig import (
OpenMetadataJWTClientConfig,
)
from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.generated.schema.entity.data.topic import Topic
from metadata.generated.schema.type.schema import SchemaType, Topic as TopicSchema
metadata = OpenMetadata(
OpenMetadataConnection(
hostPort="https://your-company.getcollate.io/api",
authProvider=AuthProvider.openmetadata,
securityConfig=OpenMetadataJWTClientConfig(jwtToken="your-jwt-token"),
)
)
# Retrieve, modify, and update
topic = metadata.get_by_id(entity=Topic, entity_id="0a021819-982e-4ee4-a5a2-4af30eaa3016")
modified = topic.model_copy(deep=True)
modified.description = "Updated: All Protobuf record events captured with enhanced schema"
modified.messageSchema = TopicSchema(
schemaType=SchemaType.Protobuf,
schemaText="syntax = \"proto3\";\npackage tutorial;\nmessage Person { ... }"
)
updated = metadata.patch(entity=Topic, source=topic, destination=modified)
print(f"Updated to version {updated.version.root}")
import org.openmetadata.schema.entity.data.Topic;
// client is an initialized OpenMetadataClient.
// Retrieve, modify, and update
Topic topic = client.topics().get("0a021819-982e-4ee4-a5a2-4af30eaa3016");
topic.setDescription("Updated: All Protobuf record events captured with enhanced schema");
Topic updated = client.topics().update(topic.getId(), topic);
# Update by ID
curl -X PATCH "{base_url}/api/v1/topics/0a021819-982e-4ee4-a5a2-4af30eaa3016" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json-patch+json" \
-d '[
{"op": "replace", "path": "/description", "value": "Updated: All Protobuf record events captured with enhanced schema"}
]'
# Update by name
curl -X PATCH "{base_url}/api/v1/topics/name/sample_kafka.address_book" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json-patch+json" \
-d '[
{"op": "replace", "path": "/description", "value": "Updated: All Protobuf record events captured with enhanced schema"}
]'
{
"id": "0a021819-982e-4ee4-a5a2-4af30eaa3016",
"name": "address_book",
"fullyQualifiedName": "sample_kafka.address_book",
"description": "Updated: All Protobuf record events captured with enhanced schema",
"version": 0.2,
"updatedAt": 1769982663546,
"updatedBy": "admin",
"service": {
"id": "469ef25e-9bdf-4d5f-8553-eb0ce8581f30",
"type": "messagingService",
"name": "sample_kafka",
"fullyQualifiedName": "sample_kafka",
"displayName": "sample_kafka",
"deleted": false
},
"serviceType": "Kafka",
"messageSchema": {
"schemaText": "syntax = \"proto2\";\npackage tutorial;\nmessage Person { ... }",
"schemaType": "Protobuf",
"schemaFields": [
{
"name": "AddressBook",
"dataType": "RECORD",
"fullyQualifiedName": "sample_kafka.address_book.AddressBook",
"children": []
}
]
},
"partitions": 1,
"cleanupPolicies": ["delete"],
"replicationFactor": 1,
"maximumMessageSize": 1,
"retentionSize": -1,
"href": "http://localhost:8585/api/v1/topics/0a021819-982e-4ee4-a5a2-4af30eaa3016",
"deleted": false,
"owners": [],
"tags": [],
"domains": []
}
Update a Topic
Update a topic’s properties using JSON Merge Patch. You can update by ID or by fully qualified name.The Python examples on this page use the original client (
metadata.ingestion.ometa.ometa_api.OpenMetadata). For more information, see Which Python SDK Should I Use?.Update by ID
Update by Name
UsePATCH /v1/topics/name/{fqn} to update by fully qualified name.
Body Parameters
Send a JSON object with the fields to update. Only provided fields are changed.PATCH /v1/topics/{id}
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
AuthProvider,
OpenMetadataConnection,
)
from metadata.generated.schema.security.client.openMetadataJWTClientConfig import (
OpenMetadataJWTClientConfig,
)
from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.generated.schema.entity.data.topic import Topic
from metadata.generated.schema.type.schema import SchemaType, Topic as TopicSchema
metadata = OpenMetadata(
OpenMetadataConnection(
hostPort="https://your-company.getcollate.io/api",
authProvider=AuthProvider.openmetadata,
securityConfig=OpenMetadataJWTClientConfig(jwtToken="your-jwt-token"),
)
)
# Retrieve, modify, and update
topic = metadata.get_by_id(entity=Topic, entity_id="0a021819-982e-4ee4-a5a2-4af30eaa3016")
modified = topic.model_copy(deep=True)
modified.description = "Updated: All Protobuf record events captured with enhanced schema"
modified.messageSchema = TopicSchema(
schemaType=SchemaType.Protobuf,
schemaText="syntax = \"proto3\";\npackage tutorial;\nmessage Person { ... }"
)
updated = metadata.patch(entity=Topic, source=topic, destination=modified)
print(f"Updated to version {updated.version.root}")
import org.openmetadata.schema.entity.data.Topic;
// client is an initialized OpenMetadataClient.
// Retrieve, modify, and update
Topic topic = client.topics().get("0a021819-982e-4ee4-a5a2-4af30eaa3016");
topic.setDescription("Updated: All Protobuf record events captured with enhanced schema");
Topic updated = client.topics().update(topic.getId(), topic);
# Update by ID
curl -X PATCH "{base_url}/api/v1/topics/0a021819-982e-4ee4-a5a2-4af30eaa3016" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json-patch+json" \
-d '[
{"op": "replace", "path": "/description", "value": "Updated: All Protobuf record events captured with enhanced schema"}
]'
# Update by name
curl -X PATCH "{base_url}/api/v1/topics/name/sample_kafka.address_book" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json-patch+json" \
-d '[
{"op": "replace", "path": "/description", "value": "Updated: All Protobuf record events captured with enhanced schema"}
]'
{
"id": "0a021819-982e-4ee4-a5a2-4af30eaa3016",
"name": "address_book",
"fullyQualifiedName": "sample_kafka.address_book",
"description": "Updated: All Protobuf record events captured with enhanced schema",
"version": 0.2,
"updatedAt": 1769982663546,
"updatedBy": "admin",
"service": {
"id": "469ef25e-9bdf-4d5f-8553-eb0ce8581f30",
"type": "messagingService",
"name": "sample_kafka",
"fullyQualifiedName": "sample_kafka",
"displayName": "sample_kafka",
"deleted": false
},
"serviceType": "Kafka",
"messageSchema": {
"schemaText": "syntax = \"proto2\";\npackage tutorial;\nmessage Person { ... }",
"schemaType": "Protobuf",
"schemaFields": [
{
"name": "AddressBook",
"dataType": "RECORD",
"fullyQualifiedName": "sample_kafka.address_book.AddressBook",
"children": []
}
]
},
"partitions": 1,
"cleanupPolicies": ["delete"],
"replicationFactor": 1,
"maximumMessageSize": 1,
"retentionSize": -1,
"href": "http://localhost:8585/api/v1/topics/0a021819-982e-4ee4-a5a2-4af30eaa3016",
"deleted": false,
"owners": [],
"tags": [],
"domains": []
}
Returns
Returns the updated topic object with the new version number.Response
Error Handling
| Code | Error Type | Description |
|---|---|---|
400 | BAD_REQUEST | Invalid JSON patch or malformed request |
401 | UNAUTHORIZED | Invalid or missing authentication token |
403 | FORBIDDEN | User lacks permission to update this topic |
404 | NOT_FOUND | Topic with given ID or FQN does not exist |
409 | CONFLICT | Concurrent modification detected |
Was this page helpful?