OSS Tables provides API endpoints compatible with the Apache Iceberg REST Catalog and AWS S3 Tables. This topic details differences between OSS Tables and the Iceberg REST standard protocol in request parameters, response fields, and expected behavior across three dimensions: endpoints, parameters, and authentication. Use this information to assess compatibility when building your own client or selecting a compute engine.
Compatibility design principles
OSS Tables follows these three principles for its Iceberg REST Catalog interface:
AWS S3 Tables compatibility: Where the Iceberg standard protocol is ambiguous or allows multiple implementations, OSS Tables prioritizes compatibility with S3 Tables behavior. This simplifies cross-cloud client reuse and code migration.
Mainstream open source SDK compatibility: Without breaking S3 Tables compatibility, OSS Tables writes certain fields (such as pagination tokens) in two formats. This ensures the official Apache Iceberg Java and C++ SDKs work directly without modification.
Clearly defined unsupported features: These include views, CTAS (CREATE TABLE AS SELECT), multi-level namespaces, Plan API, OAuth2, and BearerAuth authentication.
Endpoint compatibility
The following table covers all 13 endpoints exposed by the OSS Tables Iceberg REST Catalog. The "S3 Tables behavior" column describes specific deviations from the Iceberg specification. The "OSS Tables compatibility" column explains how OSS Tables handles each case and its impact on clients.
OSS Tables provides an Iceberg REST Catalog endpoint that Iceberg clients use to manage table metadata. The endpoint format is:
Private network:
https://{region}-internal.oss-tables.aliyuncs.com/icebergPublic network:
https://{region}.oss-tables.aliyuncs.com/iceberg
In the table below, the {prefix} parameter uses the URL-encoded form of the table bucket ARN. The ARN format is acs:osstables:{region}:{userId}:bucket/{tableBucketName}.
Path | Method | Operation | Compatibility |
| GET |
| The response does not include the |
| GET |
| The response includes both |
| POST |
| Only the owner property is accepted. All other properties are rejected. |
| GET |
| The response does not include the |
| HEAD |
| Complies with the Iceberg specification. |
| DELETE |
| Complies with the Iceberg specification. |
| GET |
| Supports |
| POST |
| Does not support |
| GET |
| Supports the |
| POST |
| Complies with the Iceberg specification. For details on supported |
| DELETE |
| You must explicitly set |
| HEAD |
| Complies with the Iceberg specification. |
| POST |
| Complies with the Iceberg specification. |
updateTable compatibility
The updateTable endpoint submits transactions using two arrays: requirements (optimistic locking preconditions) and updates (metadata change actions).
Supported requirements
Supports all 8 requirement types defined in the Iceberg specification:
assert-createassert-table-uuidassert-ref-snapshot-idassert-last-assigned-field-idassert-current-schema-idassert-last-assigned-partition-idassert-default-spec-idassert-default-sort-order-id
Supported updates (metadata change actions)
assign-uuidupgrade-format-versionadd-schemaset-current-schemaadd-specset-default-specset-partition-statisticsremove-partition-statisticsadd-sort-orderset-default-sort-orderadd-snapshotset-snapshot-refremove-snapshot-refremove-snapshotsset-propertiesremove-propertiesset-statisticsremove-statistics
Unsupported updates
remove-schemasremove-partition-specsset-locationadd-encryption-keyremove-encryption-keyadd-view-versionset-current-view-version
General rules
Strict field type matching: All JSON field types must be correct (do not pass numbers as strings or arrays as objects). Otherwise, the request fails.
The action field must match: The action field value in each request must exactly match the corresponding action name.
Semantics of ID -1: In
set-current-schema,set-default-spec, andset-default-sort-order, a*-idvalue of -1 means "point to the most recently added corresponding object," per the Iceberg protocol convention.Idempotence: Operations such as
add-schema,add-spec,add-sort-order, andadd-snapshotskip execution if the target object already exists. They do not add duplicates.
Parameter compatibility
The following table covers compatibility for common path parameters, query parameters, and request headers defined in the Iceberg REST standard protocol.
Parameter | Compatibility |
| Multi-level namespaces are not supported. Requests with multi-level namespaces fail. |
| Supported. |
| Supported. |
| Not supported. The Plan API is not implemented. |
| Views are not supported. |
| Not supported. The request header is ignored. |
| Multi-level namespaces are not supported. Requests with this parameter fail. |
| Supported. Pass it as a URL-encoded query string parameter. The field is not returned in the last page response. |
| Supported. |
| Supported. |
| Not supported. The request header is ignored. |
Authentication compatibility
OSS Tables Iceberg REST Catalog supports only SigV4 signature authentication (with service name osstables). Other authentication methods defined in the Iceberg specification are not supported:
Authentication method | Compatibility |
SigV4 | Supported (recommended). The service name for signing is |
OAuth2 | Not supported. The Iceberg specification marks this as |
BearerAuth | Not supported. |
Integration recommendations
Before integrating with OSS Tables, note these three key impacts:
Client selection: Use the official Apache Iceberg Java or C++ SDK.
Table creation and deletion: CTAS (CREATE TABLE AS SELECT) is not supported. First call
createTableto create an empty table, then write data. When deleting a table, you must explicitly includepurgeRequested=true. Otherwise, the request returns a 400 error.Unsupported features: These include views, multi-level namespaces, Plan API,
Idempotency-Key,X-Iceberg-Access-Delegation, OAuth2, and BearerAuth authentication.