Skip to main content
The Iceberg REST Catalog API implements the Apache Iceberg REST Catalog specification, enabling query engines like Snowflake, DuckDB, Spark, and Trino to discover and read Planasonix-managed Iceberg tables. Base URL: https://api.planasonix.com
Auth: Authorization: Bearer plus your flx_ API key or a JWT obtained via the OAuth2 token exchange endpoint.

OAuth2 Token Exchange

POST /v1/oauth/tokens

Exchange an flx_ API key for a short-lived JWT. This endpoint is unauthenticated and follows the Iceberg REST spec’s OAuth2 flow.
grant_type
string
required
Must be client_credentials.
client_id
string
required
Your flx_ API key.

Configuration

GET /v1/config

Returns the catalog configuration, including the default warehouse identifier.

Namespaces

GET /v1/namespaces

List namespaces in the catalog.
parent
string
Optional parent namespace for hierarchical namespace listing.

POST /v1/namespaces

Create a new namespace.
namespace
string[]
required
Namespace identifier as an array of strings.
properties
object
Key-value properties for the namespace.

GET /v1/namespaces/{namespace}

Get metadata for a namespace.

DELETE /v1/namespaces/{namespace}

Drop a namespace. The namespace must be empty (no tables). Returns 204 No Content on success, 409 Conflict if the namespace contains tables.

POST /v1/namespaces/{namespace}/properties

Update namespace properties.
updates
object
Properties to set or overwrite.
removals
string[]
Property keys to remove.

Tables

GET /v1/namespaces/{namespace}/tables

List tables in a namespace.

POST /v1/namespaces/{namespace}/tables

Create a new table.
name
string
required
Table name.
schema
object
required
Iceberg schema definition.
partition-spec
object
Optional partition specification.
location
string
Optional custom storage location.

GET /v1/namespaces/{namespace}/tables/{table}

Load a table. Returns the full table metadata and temporary storage credentials for data file access.
The config field contains temporary, read-only credentials scoped to the table’s storage location. These credentials are typically valid for 1 hour (AWS STS) or the duration of the SAS token (Azure).

POST /v1/namespaces/{namespace}/tables/{table}

Commit updates to a table. Uses optimistic concurrency — if another commit has occurred since your loadTable, the request returns 409 Conflict.
requirements
object[]
required
Pre-conditions that must be satisfied (e.g., assert-table-uuid, assert-current-schema-id).
updates
object[]
required
Table update actions (e.g., add-schema, add-snapshot, set-current-schema, set-properties).

DELETE /v1/namespaces/{namespace}/tables/{table}

Drop a table and remove it from the catalog. Returns 204 No Content on success.

POST /v1/tables/rename

Rename a table within or across namespaces.
source
object
required
Source table identifier (namespace and name).
destination
object
required
Destination table identifier (namespace and name).

POST /v1/namespaces/{namespace}/tables/{table}/metrics

Report table scan metrics. Accepts the request and returns 204 No Content.

Error Responses

All error responses follow the Iceberg REST spec format:
{
  "error": {
    "message": "Table not found: analytics.page_views",
    "type": "NoSuchTableException",
    "code": 404
  }
}
CodeTypeDescription
400BadRequestExceptionInvalid request body or parameters
401NotAuthorizedExceptionMissing or invalid authentication
403ForbiddenExceptionFeature not available for your tier
404NoSuchNamespaceExceptionNamespace not found
404NoSuchTableExceptionTable not found
409AlreadyExistsExceptionNamespace or table already exists
409CommitFailedExceptionOptimistic concurrency conflict
429TooManyRequestsExceptionRate limit exceeded

Rate Limits

Catalog API requests are rate-limited per organization by tier:
TierRequests/Day
Professional10,000
Premium100,000
EnterpriseUnlimited
When the limit is exceeded, the API returns 429 Too Many Requests.