Table Format Namespaces API

Namespace (database/schema) management

OpenAPI Specification

table-format-namespaces-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Apache Iceberg REST Catalog Commits Namespaces API
  description: The Apache Iceberg REST Catalog API is an open standard (OpenAPI spec) for interacting with Apache Iceberg table catalogs. It provides a common HTTP interface for catalog operations including namespace management, table lifecycle, view management, and metadata operations. Multiple catalog implementations support this specification including Apache Polaris, Project Nessie, AWS Glue, and Google BigLake.
  version: 0.0.1
  contact:
    name: Apache Iceberg Community
    url: https://iceberg.apache.org/community/
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://{catalog-host}
  description: Iceberg REST Catalog endpoint
  variables:
    catalog-host:
      default: localhost:8181
      description: Hostname and port of the Iceberg REST catalog service
security:
- BearerAuth: []
- OAuth2:
  - catalog
tags:
- name: Namespaces
  description: Namespace (database/schema) management
paths:
  /v1/namespaces:
    get:
      operationId: listNamespaces
      summary: List Namespaces
      description: List all namespaces. A namespace is a container for tables, analogous to a database or schema.
      tags:
      - Namespaces
      parameters:
      - name: parent
        in: query
        description: Parent namespace (for nested namespaces)
        required: false
        schema:
          type: string
      - name: pageToken
        in: query
        required: false
        schema:
          type: string
      - name: pageSize
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: List of namespaces
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListNamespacesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createNamespace
      summary: Create Namespace
      description: Create a new namespace with optional properties.
      tags:
      - Namespaces
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNamespaceRequest'
      responses:
        '200':
          description: Namespace created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateNamespaceResponse'
        '409':
          $ref: '#/components/responses/Conflict'
  /v1/namespaces/{namespace}:
    get:
      operationId: loadNamespaceMetadata
      summary: Get Namespace Metadata
      description: Load metadata properties for a namespace.
      tags:
      - Namespaces
      parameters:
      - $ref: '#/components/parameters/NamespaceParam'
      responses:
        '200':
          description: Namespace metadata
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetNamespaceResponse'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: dropNamespace
      summary: Drop Namespace
      description: Drop a namespace. The namespace must be empty.
      tags:
      - Namespaces
      parameters:
      - $ref: '#/components/parameters/NamespaceParam'
      responses:
        '204':
          description: Namespace dropped
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/namespaces/{namespace}/properties:
    post:
      operationId: updateNamespaceProperties
      summary: Update Namespace Properties
      description: Set or remove namespace properties.
      tags:
      - Namespaces
      parameters:
      - $ref: '#/components/parameters/NamespaceParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateNamespacePropertiesRequest'
      responses:
        '200':
          description: Properties updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateNamespacePropertiesResponse'
components:
  schemas:
    UpdateNamespacePropertiesRequest:
      type: object
      properties:
        removals:
          type: array
          items:
            type: string
        updates:
          type: object
          additionalProperties:
            type: string
    IcebergErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
            type:
              type: string
            code:
              type: integer
    GetNamespaceResponse:
      type: object
      properties:
        namespace:
          type: array
          items:
            type: string
        properties:
          type: object
          additionalProperties:
            type: string
    ListNamespacesResponse:
      type: object
      properties:
        namespaces:
          type: array
          items:
            type: array
            items:
              type: string
        next-page-token:
          type: string
    UpdateNamespacePropertiesResponse:
      type: object
      properties:
        updated:
          type: array
          items:
            type: string
        removed:
          type: array
          items:
            type: string
        missing:
          type: array
          items:
            type: string
    CreateNamespaceResponse:
      type: object
      properties:
        namespace:
          type: array
          items:
            type: string
        properties:
          type: object
          additionalProperties:
            type: string
    CreateNamespaceRequest:
      type: object
      required:
      - namespace
      properties:
        namespace:
          type: array
          items:
            type: string
          description: Namespace identifier parts (e.g., ["mydb"] or ["catalog", "schema"])
        properties:
          type: object
          additionalProperties:
            type: string
  parameters:
    NamespaceParam:
      name: namespace
      in: path
      required: true
      description: Namespace identifier (can be multi-level with ASCII unit separator)
      schema:
        type: string
  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/IcebergErrorResponse'
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/IcebergErrorResponse'
    Conflict:
      description: Commit conflict or resource already exists
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/IcebergErrorResponse'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: /v1/oauth/tokens
          scopes:
            catalog: Access catalog operations
externalDocs:
  description: Apache Iceberg REST Catalog Specification
  url: https://iceberg.apache.org/rest-catalog-spec/