Skip to content
Catalogs Last updated: May 14, 2026

Iceberg REST Catalog

The Iceberg REST Catalog is a standardized HTTP API specification for Apache Iceberg catalog operations, enabling any engine or client to discover and access Iceberg tables from any compliant catalog implementation through a vendor-neutral protocol.

iceberg rest catalogiceberg rest api catalogiceberg catalog specificationrest catalog apiiceberg engine interoperability

Iceberg REST Catalog

The Iceberg REST Catalog is a standardized HTTP REST API specification that defines how query engines, ETL tools, and client libraries communicate with Apache Iceberg catalogs. It is one of the most important developments in the Iceberg ecosystem — transforming catalog access from a balkanized set of engine-specific integrations into a single, universal protocol.

Before the REST Catalog spec, each engine had its own catalog connectors: Spark had a Hive Metastore connector, a JDBC connector, a custom Nessie connector, and so on. Each new catalog required new connector code in every engine. The REST Catalog solves this with a single protocol: implement the REST API once, and every compliant engine connects automatically.

The REST Catalog API

The Iceberg REST Catalog API is an OpenAPI-defined HTTP service with endpoints for:

Catalog Operations

EndpointDescription
GET /v1/configGet catalog configuration and OAuth token endpoint
GET /v1/{prefix}/namespacesList namespaces
POST /v1/{prefix}/namespacesCreate a namespace
GET /v1/{prefix}/namespaces/{namespace}Get namespace properties
DELETE /v1/{prefix}/namespaces/{namespace}Drop a namespace

Table Operations

EndpointDescription
GET /v1/{prefix}/namespaces/{namespace}/tablesList tables
POST /v1/{prefix}/namespaces/{namespace}/tablesCreate a table
GET /v1/{prefix}/namespaces/{namespace}/tables/{table}Load table (returns metadata)
POST /v1/{prefix}/namespaces/{namespace}/tables/{table}Commit updates (atomic commit)
DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}Drop a table
HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}Check table existence

View Operations (Spec extension)

Supports creating, loading, and committing Iceberg views.

Authentication

The REST Catalog spec uses OAuth2 with bearer tokens. Clients request a token from the catalog’s token endpoint, then include it as a Bearer token in subsequent requests.

Credential Vending

One of the most powerful features of the REST Catalog spec is credential vending. Rather than requiring clients to hold long-lived object storage credentials (AWS IAM keys, Azure service principal secrets), the catalog vends short-lived, scoped credentials for specific tables:

  1. Client requests to load a table (e.g., GET /v1/.../tables/orders).
  2. Catalog authenticates the client, checks authorization.
  3. Catalog returns the table metadata AND short-lived object storage credentials scoped to the table’s storage location.
  4. Client uses these temporary credentials to read/write data files in object storage.

Benefits:

Configuration in Common Engines

Apache Spark

spark = SparkSession.builder \
    .config("spark.sql.catalog.my_catalog", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.my_catalog.type", "rest") \
    .config("spark.sql.catalog.my_catalog.uri", "https://my-catalog.example.com") \
    .config("spark.sql.catalog.my_catalog.credential", "my-client-id:my-client-secret") \
    .getOrCreate()

PyIceberg (Python)

from pyiceberg.catalog import load_catalog

catalog = load_catalog(
    "my_catalog",
    **{
        "type": "rest",
        "uri": "https://my-catalog.example.com",
        "credential": "my-client-id:my-client-secret",
    }
)
catalog:
  my_catalog:
    type: iceberg
    catalog-type: rest
    uri: https://my-catalog.example.com
    credential: my-client-id:my-client-secret

Compliant Catalog Implementations

Any service that implements the Iceberg REST Catalog spec is a valid Iceberg catalog. Major implementations include:

CatalogNotes
Apache PolarisOpen-source reference implementation, co-created by Dremio and Snowflake
Project NessieAdds Git-like branching on top of the REST spec
AWS GlueManaged AWS service with REST Catalog support
Dremio Open CatalogPowered by Apache Polaris, included in Dremio Cloud and Enterprise
Snowflake Open CatalogSnowflake’s managed REST catalog offering
TabularCommercial catalog-as-a-service
GravitinoApache-governed metadata service with REST Catalog support

Why the REST Catalog Changed Everything

Before the REST Catalog, adding Iceberg support to a new engine meant implementing connectors for every possible catalog type (Hive Metastore, JDBC, Nessie, etc.). This created a combinatorial integration problem.

After the REST Catalog: implement the REST client once, and every compliant catalog works automatically. This has dramatically accelerated the velocity of engine adoption — tools like DuckDB, Apache Arrow Flight SQL, and various AI agent frameworks can now connect to Iceberg catalogs with minimal effort.

The REST Catalog is the primary reason that “Iceberg everywhere” is now a realistic architecture, not just an aspiration.

📚 Go Deeper on Apache Iceberg

Alex Merced has authored three hands-on books covering Apache Iceberg, the Agentic Lakehouse, and modern data architecture. Pick up a copy to master the full ecosystem.

← Back to Iceberg Knowledge Base