openapi: 3.2.0 info: title: Lakekeeper Project API version: 0.0.0 description: 'Operations tagged project across 2 of this provider''s published API definitions: lakekeeper-management-api-openapi.yml, lakekeeper-management-plus-api-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https security: - bearerAuth: [] tags: - name: project description: Manage Projects paths: /management/v1/endpoint-statistics: post: tags: - project summary: Get API Statistics description: "Retrieves detailed endpoint call statistics for your project, allowing you to monitor API usage patterns,\ntrack frequency of operations, and analyze response codes.\n\n## Data Collection\n\nThe statistics include:\n- Endpoint paths and HTTP methods\n- Response status codes\n- Call counts per endpoint\n- Warehouse context (when applicable)\n- Timestamps of activity\n\n## Time Aggregation\n\nStatistics are aggregated hourly. Within each hour window:\n- An initial entry is created on the first API call\n- Subsequent calls update the existing hourly entry\n- Each hour boundary creates a new aggregation bucket\n- Hours with no API activity have no entries (gaps in data)\n\n## Response Format\n\nThe response includes timestamp buckets (in UTC) and corresponding endpoint metrics,\nallowing for time-series analysis of API usage patterns.\n\nExample:\n- 00:00:00-00:16:32: no activity\n - `timestamps: []`\n- 00:16:32: warehouse created:\n - `{timestamps: [\"01:00:00\"], called_endpoints: [[{\"count\": 1, \"http_route\": \"POST /management/v1/warehouse\", \"status_code\": 201, \"warehouse_id\": null, \"warehouse_name\": null, \"created_at\": \"00:16:32\", \"updated_at\": null}]]}`\n- 00:30:00: table created:\n - `timestamps: [\"01:00:00\"], called_endpoints: [[{\"count\": 1, \"http_route\": \"POST /management/v1/warehouse\", \"status_code\": 201, \"warehouse_id\": null, \"warehouse_name\": null, \"created_at\": \"00:16:32\", \"updated_at\": null}, {\"count\": 1, \"http_route\": \"POST /catalog/v1/{prefix}/namespaces/{namespace}/tables\", \"status_code\": 201, \"warehouse_id\": \"ff17f1d0-90ad-4e7d-bf02-be718b78c2ee\", \"warehouse_name\": \"staging\", \"created_at\": \"00:30:00\", \"updated_at\": null}]]`\n- 00:45:00: table created:\n - `timestamps: [\"01:00:00\"], called_endpoints: [[{\"count\": 1, \"http_route\": \"POST /management/v1/warehouse\", \"status_code\": 201, \"warehouse_id\": null, \"warehouse_name\": null, \"created_at\": \"00:16:32\", \"updated_at\": null}, {\"count\": 1, \"http_route\": \"POST /catalog/v1/{prefix}/namespaces/{namespace}/tables\", \"status_code\": 201, \"warehouse_id\": \"ff17f1d0-90ad-4e7d-bf02-be718b78c2ee\", \"warehouse_name\": \"staging\", \"created_at\": \"00:30:00\", \"updated_at\": \"00:45:00\"}]]`\n- 01:00:36: table deleted:\n - `timestamps: [\"01:00:00\",\"02:00:00\"], called_endpoints: [[{\"count\": 1, \"http_route\": \"POST /management/v1/warehouse\", \"status_code\": 201, \"warehouse_id\": null, \"warehouse_name\": null, \"created_at\": \"00:16:32\", \"updated_at\": null},{\"count\": 1, \"http_route\": \"POST /catalog/v1/{prefix}/namespaces/{namespace}/tables\", \"status_code\": 201, \"warehouse_id\": \"ff17f1d0-90ad-4e7d-bf02-be718b78c2ee\", \"warehouse_name\": \"staging\", \"created_at\": \"00:30:00\", \"updated_at\": \"00:45:00\"}],[{\"count\": 1, \"http_route\": \"DELETE /catalog/v1/{prefix}/namespaces/{namespace}/tables/{table}\", \"status_code\": 200, \"warehouse_id\": \"ff17f1d0-90ad-4e7d-bf02-be718b78c2ee\", \"warehouse_name\": \"staging\", \"created_at\": \"01:00:36\", \"updated_at\": \"null\"}]]`" operationId: get_endpoint_statistics requestBody: content: application/json: schema: $ref: '#/components/schemas/GetEndpointStatisticsRequest' required: true responses: '200': description: Endpoint statistics content: application/json: schema: $ref: '#/components/schemas/EndpointStatisticsResponse' 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https /management/v1/project: get: tags: - project summary: Get Project description: Retrieves information about the user's default project. operationId: get_project parameters: - name: x-project-id in: header description: Project ID (optional; falls back to the default project if not provided) required: false schema: type: - string - 'null' responses: '200': description: Project details content: application/json: schema: $ref: '#/components/schemas/GetProjectResponse' 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' post: tags: - project summary: Create Project description: Creates a new project with the specified configuration. operationId: create_project requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateProjectRequest' required: true responses: '201': description: Project created successfully content: application/json: schema: $ref: '#/components/schemas/CreateProjectResponse' 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' delete: tags: - project summary: Delete Project operationId: delete_project parameters: - name: x-project-id in: header description: Project ID (optional; falls back to the default project if not provided) required: false schema: type: - string - 'null' responses: '204': description: Project deleted successfully 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https /management/v1/project-list: get: tags: - project summary: List Projects description: Lists all projects that the requesting user has access to. operationId: list_projects responses: '200': description: List of projects content: application/json: schema: $ref: '#/components/schemas/ListProjectsResponse' 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https /management/v1/project/actions: get: tags: - project summary: Get allowed actions for a project operationId: get_project_actions parameters: - name: principalUser in: query description: 'The user to show actions for. If neither user nor role is specified, shows actions for the current user.' required: false schema: type: string - name: principalRole in: query description: 'The role to show actions for. If neither user nor role is specified, shows actions for the current user.' required: false schema: type: string format: uuid - name: x-project-id in: header description: Project ID (optional; falls back to the default project if not provided) required: false schema: type: - string - 'null' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetLakekeeperProjectActionsResponse' 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https /management/v1/project/rename: post: tags: - project summary: Rename Project operationId: rename_project parameters: - name: x-project-id in: header description: Project ID (optional; falls back to the default project if not provided) required: false schema: type: - string - 'null' requestBody: content: application/json: schema: $ref: '#/components/schemas/RenameProjectRequest' required: true responses: '200': description: Project renamed successfully 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https /management/v1/project/{project_id}: get: tags: - project summary: Get Project operationId: get_project_by_id_deprecated parameters: - name: project_id in: path required: true schema: type: string responses: '200': description: Project details content: application/json: schema: $ref: '#/components/schemas/GetProjectResponse' 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' deprecated: true delete: tags: - project summary: Delete Project by ID description: Permanently removes a specific project and all its associated resources. operationId: delete_project_by_id_deprecated parameters: - name: project_id in: path required: true schema: type: string responses: '204': description: Project deleted successfully 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' deprecated: true servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https /management/v1/project/{project_id}/rename: post: tags: - project summary: Rename Project by ID description: Updates the name of a specific project. operationId: rename_project_by_id_deprecated parameters: - name: project_id in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RenameProjectRequest' required: true responses: '200': description: Project renamed successfully 4XX: description: '' content: application/json: schema: $ref: '#/components/schemas/IcebergErrorResponse' deprecated: true servers: - url: '{scheme}://{host}{basePath}' description: Lakekeeper Management API variables: basePath: default: '' description: Optional path prefix (starting with '/') to be prepended to all routes host: default: localhost description: The host (and optional port) for the specified server scheme: default: https description: The scheme of the URI, either http or https components: schemas: EndpointStatisticsResponse: type: object required: - timestamps - called-endpoints - previous-page-token - next-page-token properties: called-endpoints: type: array items: type: array items: $ref: '#/components/schemas/EndpointStatistic' description: 'Array of arrays of statistics detailing each called endpoint for each `timestamp`. See docs of `timestamps` for more details.' next-page-token: type: string description: 'Token to get the next page of results. Inverse of `previous-page-token`, see its documentation above.' previous-page-token: type: string description: 'Token to get the previous page of results. Endpoint statistics are not paginated through page-limits, we paginate them by stepping through time. By default, the list-statistics endpoint will return all statistics for `now()` - 1 day to `now()`. In the request, you can specify a `range_specifier` to set the end date and step interval. The `previous-page-token` will then move to the neighboring window. E.g. in the default case of `now()` and 1 day, it''d be `now()` - 2 days to `now()` - 1 day.' timestamps: type: array items: type: string format: date-time description: 'Array of timestamps indicating the time at which each entry in the `called_endpoints` array is valid. We lazily create a new statistics entry every hour, in between hours, the existing entry is being updated. If any endpoint is called in the following hour, there''ll be an entry in `timestamps` for the following hour. If not, then there''ll be no entry.' CreateProjectRequest: type: object required: - project-name properties: project-id: type: - string - 'null' description: 'Request a specific project ID - optional. If not provided, a new project ID will be generated (recommended).' project-name: type: string description: Name of the project to create. EndpointStatistic: type: object required: - count - http-route - status-code - created-at properties: count: type: integer format: int64 description: Number of requests to this endpoint for the current time-slice. created-at: type: string format: date-time description: 'Timestamp at which the datapoint was created in the database. This is the exact time at which the current endpoint-status-warehouse combination was called for the first time in the current time-slice.' http-route: type: string description: 'The route of the endpoint. Format: `METHOD /path/to/endpoint`' status-code: type: integer format: int32 description: The status code of the response. minimum: 0 updated-at: type: - string - 'null' format: date-time description: 'Timestamp at which the datapoint was last updated. This is the exact time at which the current datapoint was last updated.' warehouse-id: type: - string - 'null' format: uuid description: 'The ID of the warehouse that handled the request. Only present for requests that could be associated with a warehouse. Some management endpoints cannot be associated with a warehouse, e.g. warehouse creation or user management will not have a `warehouse-id`.' warehouse-name: type: - string - 'null' description: 'The name of the warehouse that handled the request. Only present for requests that could be associated with a warehouse. Some management endpoints cannot be associated with a warehouse, e.g. warehouse creation or user management will not have a `warehouse-id`' GetEndpointStatisticsRequest: type: object required: - warehouse properties: range-specifier: oneOf: - type: 'null' - $ref: '#/components/schemas/TimeWindowSelector' description: 'Range specifier Either for an explicit range or a page token to paginate through the results. See the docs of `TimeWindowSelector` for more details.' status-codes: type: - array - 'null' items: type: integer format: int32 minimum: 0 description: 'Status code filter Optional filter to only return statistics for requests with specific status codes.' warehouse: $ref: '#/components/schemas/WarehouseFilter' description: 'Warehouse filter Can return statistics for a specific warehouse, all warehouses or requests that could not be associated to any warehouse.' GetLakekeeperProjectActionsResponse: type: object required: - allowed-actions properties: allowed-actions: type: array items: $ref: '#/components/schemas/LakekeeperProjectActionKind' TimeWindowSelector: oneOf: - type: object required: - end - interval - type properties: end: type: string format: date-time description: 'End timestamp of the time window Specify' example: 2023-12-31 23:59:59+00:00 interval: type: string description: 'Duration/span of the time window The returned statistics will be for the time window from `end` - `interval` to `end`. Specify a ISO8601 duration string, e.g. `PT1H` for 1 hour, `P1D` for 1 day.' example: P1D type: type: string enum: - window example: type: window end: 2023-12-31 23:59:59+00:00 interval: P1D - type: object required: - token - type properties: token: type: string description: 'Opaque Token from previous response for paginating through time windows Use the `next_page_token` or `previous_page_token` from a previous response' type: type: string enum: - page-token example: type: page-token token: xyz LakekeeperProjectActionKind: oneOf: - type: object required: - action properties: action: type: string enum: - create_warehouse - type: object required: - action properties: action: type: string enum: - delete - type: object required: - action properties: action: type: string enum: - rename - type: object required: - action properties: action: type: string enum: - get_metadata - type: object required: - action properties: action: type: string enum: - list_warehouses - type: object required: - action properties: action: type: string enum: - include_in_list - type: object required: - action properties: action: type: string enum: - create_role - type: object required: - action properties: action: type: string enum: - list_roles - type: object required: - action properties: action: type: string enum: - search_roles - type: object required: - action properties: action: type: string enum: - get_endpoint_statistics - type: object required: - action properties: action: type: string enum: - modify_task_queue_config - type: object required: - action properties: action: type: string enum: - get_task_queue_config - type: object required: - action properties: action: type: string enum: - get_project_tasks - type: object required: - action properties: action: type: string enum: - control_project_tasks GetProjectResponse: type: object required: - project-id - project-name properties: project-id: type: string description: ID of the project. project-name: type: string description: Name of the project ListProjectsResponse: type: object required: - projects properties: projects: type: array items: $ref: '#/components/schemas/GetProjectResponse' description: List of projects WarehouseFilter: oneOf: - type: object description: Filter for a specific warehouse required: - id - type properties: id: type: string format: uuid type: type: string enum: - warehouse-id - type: object description: Filter for items that are not associated with a warehouse required: - type properties: type: type: string enum: - unmapped - type: object description: Return all items in the current project, regardless of warehouse association required: - type properties: type: type: string enum: - all IcebergErrorResponse: type: object description: JSON wrapper for all error responses (non-2xx) required: - error properties: error: $ref: '#/components/schemas/ErrorModel' CreateProjectResponse: type: object required: - project-id properties: project-id: type: string description: ID of the created project. RenameProjectRequest: type: object required: - new-name properties: new-name: type: string description: New name for the project. ErrorModel: type: object description: JSON error payload returned in a response with further details on the error required: - message - type - code properties: code: type: integer format: int32 description: HTTP response code minimum: 0 message: type: string description: Human-readable error message stack: type: array items: type: string type: type: string description: Internal type definition of the error securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT x-refined-from: - lakekeeper-management-api-openapi.yml - lakekeeper-management-plus-api-openapi.yml