Skip to main content

Overview

The Java SDK in the current platform code is published as org.open-metadata:openmetadata-sdk. It provides a service-level client through OpenMetadata.client() and a higher-level fluent layer under org.openmetadata.sdk.fluent.*.

Installation

Use the SDK version that matches your server release.

Maven

<dependency>
    <groupId>org.open-metadata</groupId>
    <artifactId>openmetadata-sdk</artifactId>
    <version>YOUR_OPENMETADATA_VERSION</version>
</dependency>

Gradle

implementation "org.open-metadata:openmetadata-sdk:YOUR_OPENMETADATA_VERSION"

Quick start

import org.openmetadata.sdk.client.OpenMetadata;
import org.openmetadata.sdk.fluent.Tables;
import org.openmetadata.sdk.models.ListParams;

OpenMetadata.initialize(
    "https://your-company.getcollate.io/api",
    "your-jwt-token"
);

var client = OpenMetadata.client();

// Service-level access
var tablesPage = client.tables().list(new ListParams().setLimit(10));
for (var table : tablesPage.getData()) {
    System.out.println(table.getFullyQualifiedName());
}

// Fluent helpers
Tables.setDefaultClient(client);
var table = Tables.findByName("service.database.schema.table")
    .includeAll()
    .fetch();

table.withDescription("Curated in the Java SDK").save();

SDK surfaces

  • OpenMetadata.client() exposes REST-backed services such as tables(), glossaries(), databaseServices(), and lineage().
  • org.openmetadata.sdk.fluent.* provides chainable helpers for common workflows, such as Tables.create(), Glossaries.findByName(), and Users.list().
  • Resource methods use org.openmetadata.sdk.models.ListParams for pagination and filtering.

Common patterns

Create a table

import java.util.List;
import org.openmetadata.schema.type.Column;
import org.openmetadata.schema.type.ColumnDataType;
import static org.openmetadata.sdk.fluent.Tables.create;

Tables.setDefaultClient(client);

var table = create()
    .name("orders")
    .inSchema("sample_data.ecommerce_db.shopify")
    .withDescription("Orders curated from the commerce warehouse")
    .withColumns(List.of(
        new Column().withName("id").withDataType(ColumnDataType.BIGINT),
        new Column().withName("status").withDataType(ColumnDataType.VARCHAR).withDataLength(255)
    ))
    .execute();

Fetch and update an entity

Tables.setDefaultClient(client);

var table = Tables.findByName("sample_data.ecommerce_db.shopify.orders")
    .includeAll()
    .fetch();

table.withDisplayName("Orders").save();

List with pagination

import org.openmetadata.sdk.models.ListParams;

var page = client.tables().list(
    new ListParams()
        .setLimit(50)
        .setService("sample_data")
);

if (page.getPaging() != null && page.getPaging().getAfter() != null) {
    var nextPage = client.tables().list(
        new ListParams()
            .setLimit(50)
            .setAfter(page.getPaging().getAfter())
    );
}

Next steps