---
title: "Get Warehouse"
method: GET
path: "/management/v1/warehouse/{warehouse_id}"
tags: ["warehouse"]
---

# Get Warehouse

`GET /management/v1/warehouse/{warehouse_id}`

## Request

- Base URL: `https://localhost`
- URL: `https://localhost/management/v1/warehouse/{warehouse_id}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/lakekeeper/apis/lakekeeper-management-api/docs/management/v1/warehouse/:warehouse_id/get.ts> (a function with typed inputs; its response is checked against the schema)

Retrieves detailed information about a specific warehouse.

## Path parameters

- `warehouse_id` string, uuid, required

## Response `200`

Warehouse details

- GetWarehouseResponse
  - `allowed-format-versions` integer[], required: Iceberg table format versions that may be created in, or upgraded to, within this warehouse.
  - `default-format-version` integer, nullable: Default Iceberg table format version applied when a create-table request does not specify one. When absent, resolves to v2 if allowed, otherwise the highest allowed version.
  - `delete-profile` union, required
    - object
      - `type` 'hard', required
    - object
      - `expiration-seconds` integer, required
      - `type` 'soft', required
  - `id` string, uuid, required: ID of the warehouse.
  - `managed-by` 'self-managed' | 'instance-admin': Which control plane, if any, exclusively manages a warehouse's spec. `self-managed` (the default) leaves the spec mutable by the warehouse's own owners through the usual grants. When set to `instance-admin`, spec changes — storage profile, credentials, delete profile, rename, status, protection, format-version policy, and deletion — are accepted only from instance administrators; other callers are rejected even when their grants would otherwise allow it. Child resources (namespaces, tables, grants), task-queue configuration, and data access are unaffected.
  - `name` string, required: Name of the warehouse.
  - `project-id` string, required: Project ID in which the warehouse was created.
  - `protected` boolean, required: Whether the warehouse is protected from being deleted.
  - `status` 'active' | 'inactive', required: Status of a warehouse
  - `storage-credential-type` union: The type of storage credential configured for a warehouse, without secret values. This is returned in API responses so clients know which credential type was selected (e.g. to restore radio button state in the UI).
    - object: S3 credential type
      - `credential-type` 'access-key' | 'aws-system-identity' | 'cloudflare-r2', required: The type of S3 credential.
      - `type` 's3', required
    - object: Azure credential type
      - `credential-type` 'client-credentials' | 'shared-access-key' | 'azure-system-identity', required: The type of Azure credential.
      - `type` 'az', required
    - object: GCS credential type
      - `credential-type` 'service-account-key' | 'gcp-system-identity', required: The type of GCS credential.
      - `type` 'gcs', required
  - `storage-profile` union, required: Storage profile for a warehouse.
    - object: Generic Azure Data Lake Storage Gen2 profile. Speaks ADLS Gen2 against any storage account.
      - `account-name` string, required: Name of the azure storage account.
      - `allow-alternative-protocols` boolean: Allow alternative protocols such as `wasbs://` in locations. This is disabled by default. We do not recommend to use this setting except for migration of old tables via the register endpoint.
      - `authority-host` string, uri, nullable: The authority host to use for authentication. Default: `https://login.microsoftonline.com`.
      - `filesystem` string, required: Name of the adls filesystem, in blobstorage also known as container.
      - `host` string, nullable: The host to use for the storage account. Default: `dfs.core.windows.net`.
      - `key-prefix` string, nullable: Subpath in the filesystem to use.
      - `sas-enabled` boolean: Enable SAS (Shared Access Signature) token generation for Azure Data Lake Storage. When disabled, clients cannot use vended credentials for this storage profile. Defaults to true.
      - `sas-token-validity-seconds` integer, nullable: The validity of the sas token in seconds. Default: 3600. Max: 7 days.
      - `storage-layout` union: Controls how namespace and tabular paths are constructed under the warehouse base location. - `default` / omitted: flat — no namespace directories; all tabulars are placed directly under the base location with a fixed `"{uuid}"` segment. (Changed in 0.13; before 0.13 the default emitted a `"{uuid}"` directory for the direct-parent namespace. Existing namespaces created before 0.13 keep their persisted location, so only namespaces created on/after 0.13 use the flat default.) - `full-hierarchy`: one directory per namespace level, one per tabular. - `tabular-only`: no namespace directories; all tabulars are placed directly under the base location, with a configurable tabular template (which must contain `{uuid}`). Segment templates may use `{uuid}` and `{name}` as placeholders.
        - object
          - `type` 'default', required
        - object: No namespace directories; all tabulars are placed directly under the base location. For a tabular `my_tabular` (uuid `…002`) the path is: `<base>/<tabular-segment>`. The tabular template must contain `{uuid}` to avoid collisions between tabulars with the same name.
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'tabular-only', required
        - object: One directory per namespace level, one per tabular. For a tabular `my_tabular` (uuid `…003`) in `grandparent_ns` / `parent_ns` the path is: `<base>/<grandparent-segment>/<parent-segment>/<tabular-segment>`.
          - `namespace` string, required: Template string for namespace path segments. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual namespace UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my name" becomes "my%20name"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a namespace named "my ns" renders to "my%20ns-550e8400-e29b-41d4-a716-446655440001".
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'full-hierarchy', required
      - `type` 'adls', required
    - object: `OneLake` (Microsoft Fabric) profile. Knows how to construct `OneLake` URLs from workspace + lakehouse IDs and how to derive the workspace-private-link endpoint host.
      - `authority-host` string, uri, nullable: The authority host to use for authentication. Default: `https://login.microsoftonline.com`.
      - `directory-rel-path` string, nullable: Subpath beneath `<top-level-folder>/` inside the lakehouse — the root directory under which Lakekeeper writes all warehouse data.
      - `endpoint-mode` union: How Lakekeeper connects to the `OneLake` DFS endpoint. Fabric supports two kinds of Azure Private Link configurations, and only one of them maps to a dedicated variant here: - **Tenant-level private link**: traffic to the global host `onelake.dfs.fabric.microsoft.com` is routed privately via DNS that points the global FQDN at a tenant-PE NIC. From Lakekeeper's perspective this is indistinguishable from public traffic — use `Default`. (Same shape as a private endpoint in front of a regular ADLS Gen2 storage account.) - **Workspace-level private link**: each workspace gets its own `<wsId>.z<xy>.dfs.fabric.microsoft.com` FQDN routed via a workspace-scoped PE. Lakekeeper needs to build that FQDN — use [`WorkspacePrivateLink`].
        - object: Use the global `OneLake` endpoint `onelake.dfs.fabric.microsoft.com`. Default. Also the correct choice for tenant-level private link — tenant PE only changes DNS resolution, not the URL Lakekeeper constructs.
          - `type` 'default', required
        - object: Use a region-pinned endpoint `<region>-onelake.dfs.fabric.microsoft.com`. Use this when data residency requires the request to stay within a specific Azure region.
          - `region` string, required: Azure region slug, e.g. `westus`, `centralus`, `northeurope`. Trimmed and lowercased at validation time, then pattern-checked to match the Azure region-slug shape (lowercase ASCII letter followed by lowercase letters or digits) so a stray `.` or `-` can't smuggle an extra host segment into the resolved DFS host. An unknown but well-shaped slug still surfaces as a DNS-resolution failure at access time. See `normalize_endpoint_mode` for the exact rule.
          - `type` 'regional', required
        - object: Use a workspace-scoped private-link endpoint `<workspaceId>.z<xy>.dfs.fabric.microsoft.com`. The host is computed from the workspace ID at runtime; users only opt in via this variant. For *tenant*-level private link, stay on [`Default`] — the global onelake FQDN is what gets routed through a tenant PE.
          - `type` 'workspace-private-link', required
      - `lakehouse-id` string, uuid, required: UUID of the lakehouse within the workspace.
      - `sas-enabled` boolean: Enable SAS-token generation. Defaults to true.
      - `sas-token-validity-seconds` integer, nullable: SAS-token validity in seconds. Default: 3600. Max: 3600 (`OneLake` cap).
      - `storage-layout` union: Controls how namespace and tabular paths are constructed under the warehouse base location. - `default` / omitted: flat — no namespace directories; all tabulars are placed directly under the base location with a fixed `"{uuid}"` segment. (Changed in 0.13; before 0.13 the default emitted a `"{uuid}"` directory for the direct-parent namespace. Existing namespaces created before 0.13 keep their persisted location, so only namespaces created on/after 0.13 use the flat default.) - `full-hierarchy`: one directory per namespace level, one per tabular. - `tabular-only`: no namespace directories; all tabulars are placed directly under the base location, with a configurable tabular template (which must contain `{uuid}`). Segment templates may use `{uuid}` and `{name}` as placeholders.
        - object
          - `type` 'default', required
        - object: No namespace directories; all tabulars are placed directly under the base location. For a tabular `my_tabular` (uuid `…002`) the path is: `<base>/<tabular-segment>`. The tabular template must contain `{uuid}` to avoid collisions between tabulars with the same name.
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'tabular-only', required
        - object: One directory per namespace level, one per tabular. For a tabular `my_tabular` (uuid `…003`) in `grandparent_ns` / `parent_ns` the path is: `<base>/<grandparent-segment>/<parent-segment>/<tabular-segment>`.
          - `namespace` string, required: Template string for namespace path segments. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual namespace UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my name" becomes "my%20name"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a namespace named "my ns" renders to "my%20ns-550e8400-e29b-41d4-a716-446655440001".
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'full-hierarchy', required
      - `top-level-folder` 'Files' | 'Tables': Top-level managed folder within a Fabric lakehouse. Fabric reserves `Files/` and `Tables/` as managed folders directly under each lakehouse item. `Files/` is the default for Lakekeeper-managed Iceberg tables; `Tables/` is supported for completeness but writing Iceberg metadata there conflicts with Fabric's automatic Delta/Iceberg virtualization.
      - `workspace-id` string, uuid, required: UUID of the Fabric workspace this warehouse lives in.
      - `type` 'onelake', required
    - object: S3 storage profile
      - `allow-alternative-protocols` boolean, nullable: Allow `s3a://` and `s3n://` in locations. This is disabled by default. We do not recommend to use this setting except for migration of old hadoop-based tables via the register endpoint. Tables with `s3a` paths are not accessible outside the Java ecosystem.
      - `assume-role-arn` string, nullable: Optional ARN to assume when accessing the bucket from Lakekeeper.
      - `aws-kms-key-arn` string, nullable: ARN of the KMS key used to encrypt the S3 bucket, if any.
      - `bucket` string, required: Name of the S3 bucket
      - `endpoint` string, uri, nullable: Optional endpoint to use for S3 requests, if not provided the region will be used to determine the endpoint. If both region and endpoint are provided, the endpoint will be used. Example: `http://s3-de.my-domain.com:9000`
      - `flavor` 'aws' | 's3-compat'
      - `key-prefix` string, nullable: Subpath in the bucket to use.
      - `legacy-md5-behavior` boolean, nullable: Legacy MD5 behavior for S3 operations requiring checksums. When enabled, Lakekeeper will use the legacy MD5 checksum for operations like `DeleteObjects`.
      - `path-style-access` boolean, nullable: Path style access for S3 requests. If the underlying S3 supports both, we recommend to not set `path_style_access`.
      - `push-s3-delete-disabled` boolean: Controls whether the `s3.delete-enabled=false` flag is sent to clients. In all Iceberg 1.x versions, when Spark executes `DROP TABLE xxx PURGE`, it directly deletes files from S3, bypassing the catalog's soft-deletion mechanism. Other query engines properly delegate this operation to the catalog. This Spark behavior is expected to change in Iceberg 2.0. Setting this to `true` pushes the `s3.delete-enabled=false` flag to clients, which discourages Spark from directly deleting files during `DROP TABLE xxx PURGE` operations. Note that clients may override this setting, and it affects other Spark operations that require file deletion, such as removing snapshots. For more details, refer to Lakekeeper's [Soft-Deletion documentation](https://docs.lakekeeper.io/docs/nightly/concepts/#soft-deletion). This flag has no effect if Soft-Deletion is disabled for the warehouse.
      - `region` string, required: Region to use for S3 requests.
      - `remote-signing-enabled` boolean: Enable remote signing for S3 requests. When disabled, clients cannot use remote signing even if STS is disabled. Defaults to true.
      - `remote-signing-url-style` 'path' | 'virtual_host' | 'auto'
      - `storage-layout` union: Controls how namespace and tabular paths are constructed under the warehouse base location. - `default` / omitted: flat — no namespace directories; all tabulars are placed directly under the base location with a fixed `"{uuid}"` segment. (Changed in 0.13; before 0.13 the default emitted a `"{uuid}"` directory for the direct-parent namespace. Existing namespaces created before 0.13 keep their persisted location, so only namespaces created on/after 0.13 use the flat default.) - `full-hierarchy`: one directory per namespace level, one per tabular. - `tabular-only`: no namespace directories; all tabulars are placed directly under the base location, with a configurable tabular template (which must contain `{uuid}`). Segment templates may use `{uuid}` and `{name}` as placeholders.
        - object
          - `type` 'default', required
        - object: No namespace directories; all tabulars are placed directly under the base location. For a tabular `my_tabular` (uuid `…002`) the path is: `<base>/<tabular-segment>`. The tabular template must contain `{uuid}` to avoid collisions between tabulars with the same name.
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'tabular-only', required
        - object: One directory per namespace level, one per tabular. For a tabular `my_tabular` (uuid `…003`) in `grandparent_ns` / `parent_ns` the path is: `<base>/<grandparent-segment>/<parent-segment>/<tabular-segment>`.
          - `namespace` string, required: Template string for namespace path segments. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual namespace UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my name" becomes "my%20name"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a namespace named "my ns" renders to "my%20ns-550e8400-e29b-41d4-a716-446655440001".
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'full-hierarchy', required
      - `sts-enabled` boolean, required
      - `sts-endpoint` string, uri, nullable: Optional endpoint to use for STS requests. Use this when the STS endpoint differs from the S3 endpoint, which is common with S3-compatible storage systems. If not provided, the S3 `endpoint` is used for STS requests as well.
      - `sts-role-arn` string, nullable: Optional role ARN to assume for sts vended-credentials. If not provided, `assume_role_arn` is used. Either `assume_role_arn` or `sts_role_arn` must be provided if `sts_enabled` is true.
      - `sts-session-tags` object: Optional session tags for STS assume role operations.
      - `sts-token-validity-seconds` integer: The validity of the sts tokens in seconds. Default is 3600
      - `type` 's3', required
    - object
      - `bucket` string, required: Name of the GCS bucket
      - `key-prefix` string, nullable: Subpath in the bucket to use.
      - `storage-layout` union: Controls how namespace and tabular paths are constructed under the warehouse base location. - `default` / omitted: flat — no namespace directories; all tabulars are placed directly under the base location with a fixed `"{uuid}"` segment. (Changed in 0.13; before 0.13 the default emitted a `"{uuid}"` directory for the direct-parent namespace. Existing namespaces created before 0.13 keep their persisted location, so only namespaces created on/after 0.13 use the flat default.) - `full-hierarchy`: one directory per namespace level, one per tabular. - `tabular-only`: no namespace directories; all tabulars are placed directly under the base location, with a configurable tabular template (which must contain `{uuid}`). Segment templates may use `{uuid}` and `{name}` as placeholders.
        - object
          - `type` 'default', required
        - object: No namespace directories; all tabulars are placed directly under the base location. For a tabular `my_tabular` (uuid `…002`) the path is: `<base>/<tabular-segment>`. The tabular template must contain `{uuid}` to avoid collisions between tabulars with the same name.
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'tabular-only', required
        - object: One directory per namespace level, one per tabular. For a tabular `my_tabular` (uuid `…003`) in `grandparent_ns` / `parent_ns` the path is: `<base>/<grandparent-segment>/<parent-segment>/<tabular-segment>`.
          - `namespace` string, required: Template string for namespace path segments. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual namespace UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my name" becomes "my%20name"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a namespace named "my ns" renders to "my%20ns-550e8400-e29b-41d4-a716-446655440001".
          - `tabular` string, required: Template string for tabular names. Placeholders {uuid} and {name} (with curly braces) will be replaced with the actual tabular UUID and name respectively. The {name} value is percent-encoded (URL percent-encoding) so spaces and special characters are escaped (e.g. "my tabular" becomes "my%20tabular"). The {uuid} value is inserted as-is without encoding. Example: "{name}-{uuid}" for a tabular named "my tabular" renders to "my%20tabular-550e8400-e29b-41d4-a716-446655440002".
          - `type` 'full-hierarchy', required
      - `sts-enabled` boolean: Enable STS (Security Token Service) downscoped token generation for GCS. When disabled, clients cannot use vended credentials for this storage profile. Defaults to true.
      - `type` 'gcs', required
  - `updated-at` string, date-time, nullable: Last updated timestamp.
  - `warehouse-id` string, uuid, required: ID of the warehouse.

## Other responses

- `4XX`

---

[API](https://skmtc.dev/lakekeeper/apis/lakekeeper-management-api.md) - [All operations](https://skmtc.dev/lakekeeper/apis/lakekeeper-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/lakekeeper/apis/lakekeeper-management-api/revisions/c5cb9a12a98c?raw)
