openapi: 3.2.0 info: title: Foxglove Layouts API version: v1 x-logo: url: https://foxglove.dev/images/logo-icon-round.png description: '# Python client Foxglove provides a Python client library ([`foxglove-client`](https://github.com/foxglove/foxglove-python)) to more easily interact with the Foxglove API. The SDK can be downloaded from [PyPI](https://pypi.org/project/foxglove-client/) and source is available on [GitHub](https://github.com/foxglove/foxglove-python). # Authentication All routes excluding the [Site Bucket Notifications endpoint](#tag/Sites/paths/~1site-bucket-notifications/post) require an [API key](/docs/settings#api-keys) with specific capabilities. Only organization admins can create an API key. Requests must include the API key in the `Authorization` header as a bearer token: ``` Authorization: Bearer fox_sk_1234... ``` Each endpoint in the API reference lists the capabilities required for access. An endpoint with Authorizations `ApiKey (devices.list)` would require an api key with the `devices.list` capability. # Sorting and pagination Some GET endpoints support sorting and pagination. Where supported, you will see the following query parameters in the endpoint documentation: * `sortBy` – Field name to sort by (endpoint specific) * `sortOrder` – "asc" or "desc" * `limit` – Number of records in the response * `offset` – Number of records to skip If no limit is provided, endpoints will default to a limit of 2000 items. Requesting a limit greater than 2000 items will result in a 400 response. # Timestamps Unless otherwise documented, all timestamp related fields (start, end, created, etc) use the ISO8601 conforming [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) UTC "Zulu" format. In the documentation this will appear as `string` types with `` formatting (i.e. `string `). These timestamps support nanosecond resolution with up to nine fractional digits. Examples: - 2023-04-06T09:15:30Z - 2023-04-06T18:27:45.876543210Z > Note: Variants of RFC3339 using durations or offsets which are not conforming to ISO8601 are not supported. # Rate limits To help ensure responsiveness for all clients, requests to the API may be rate-limited. In this case, a request will receive a status code of 429. Your client may refer to headers, such as "Retry-After", to determine when a request should be retried. In general, if your client experiences an error, you should adjust the rate at which your client makes requests, and you may issue retries with a strategy such as exponential backoff. ' servers: - url: https://api.foxglove.dev/v1 description: Production security: [] tags: - name: Layouts paths: /layouts: get: tags: - Layouts summary: List layouts description: 'List the org layouts. Note: Only layouts shared with the org are returned in the response; no personal layouts are returned. ' security: - ApiKey: - layouts.list parameters: - in: query name: updatedSince description: Return only layouts updated since this time. schema: type: string format: date-time - in: query name: includeData description: 'When set to false, the `data` field is omitted from the response items. This can be used to limit bandwidth when querying many Layouts. ' schema: type: boolean default: true responses: '200': description: List of org layouts content: application/json: schema: type: array items: $ref: '#/components/schemas/Layout' post: tags: - Layouts summary: Create a layout description: 'Creates a layout. API keys can only create shared layouts. ' security: - ApiKey: - layouts.create requestBody: required: true content: application/json: schema: type: object properties: id: type: string maxLength: 36 name: type: string savedAt: type: string format: date-time folderName: type: string pattern: ^[^/]*$ description: 'The folder name used to organize layouts in the UI. It cannot contain forward slashes. ' permission: $ref: '#/components/schemas/LayoutPermission' data: type: object additionalProperties: true description: 'The layout contents. This format is not yet stable and may change without notice; treat it as opaque and round-trip values returned by the API. ' required: - data - name - permission responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Layout' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/Error' '409': description: Conflict with ID content: application/json: schema: $ref: '#/components/schemas/Error' /layouts/{id}: parameters: - in: path name: id schema: type: string required: true description: Layout ID get: tags: - Layouts summary: Get a layout security: - ApiKey: - layouts.list parameters: - in: query name: includeData description: Include data in response schema: type: boolean default: false responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Layout' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' delete: tags: - Layouts summary: Delete a layout description: 'Soft-deletes a layout. API keys can only delete shared layouts. ' security: - ApiKey: - layouts.delete responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/GenericSuccess' '403': description: Caller is not permitted to delete this layout. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' patch: tags: - Layouts summary: Update a layout description: 'Updates an existing layout. API keys can only update shared layouts. ' security: - ApiKey: - layouts.update requestBody: required: true content: application/json: schema: type: object properties: name: type: string folderName: type: string pattern: ^[^/]*$ description: 'The folder name used to organize layouts in the UI. It cannot contain forward slashes. "" will unset the folderName. ' permission: $ref: '#/components/schemas/LayoutPermission' data: type: object additionalProperties: true description: 'The layout contents. This format is not yet stable and may change without notice; treat it as opaque and round-trip values returned by the API. ' required: [] responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Layout' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Caller is not permitted to update this layout. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' /layouts/{id}/restore: parameters: - in: path name: id schema: type: string required: true description: Layout ID post: tags: - Layouts summary: Restore a layout description: 'Restores a soft-deleted layout. API keys can only restore shared layouts. ' security: - ApiKey: - layouts.delete responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/GenericSuccess' '403': description: Caller is not permitted to restore this layout. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' components: schemas: Layout: type: object properties: id: type: string description: ID of the layout name: type: string description: Name of the layout createdAt: type: string format: date-time description: Timestamp when the layout was created on the server updatedAt: type: string format: date-time description: Timestamp when the layout was last updated on the server savedAt: type: string format: date-time description: Timestamp when the layout was last saved locally folderName: type: string description: Name of the folder the layout belongs to. permission: $ref: '#/components/schemas/LayoutPermission' data: type: object description: 'An object containing the layout data. Note: The layout data format is not considered stable and may change over time. ' additionalProperties: true required: - id - name - createdAt - updatedAt - permission LayoutPermission: type: string enum: - CREATOR_WRITE - ORG_READ - ORG_WRITE Error: type: object properties: error: type: string required: - error GenericSuccess: type: object properties: success: type: boolean const: true required: - success securitySchemes: Session: type: apiKey in: cookie name: fox.session description: User permissions when signed into the website ApiKey: type: http scheme: bearer description: API key authentication using HTTP Bearer auth SiteBucketNotificationBearerToken: type: http scheme: bearer description: Site bucket notification authentication using HTTP Bearer auth x-tagGroups: - name: Data Platform tags: - Coverage - Custom Properties - Device Tokens - Devices - Events - Event Types - Imports - Lake files - Projects - Recording Attachments - Recordings - Sessions - Site Tokens - Site Inbox Notification Tokens - Sites - Stream data - Topics - name: Webhooks tags: - Webhook Payloads - name: Visualization tags: - Extensions - Layouts