# Admin

# Workspaces

## Create

**post** `/compute/v1/admin/workspaces`

Create a workspace

### Body Parameters

- `data_retention: optional object { unit, value }`

  How long result data is retained before automatic deletion. Defaults to 7 days if not specified. Maximum retention is 14 days (336 hours).

  - `unit: "hours" or "days"`

    Time unit for retention duration

    - `"hours"`

    - `"days"`

  - `value: number`

    Duration value. Maximum retention is 14 days (or 336 hours).

- `name: optional string`

  Workspace name

### Returns

- `id: string`

  Workspace ID

- `archived_at: string`

- `created_at: string`

- `data_retention: object { unit, value }`

  How long result data is retained before automatic deletion. Defaults to 7 days if not specified. Maximum retention is 14 days (336 hours).

  - `unit: "hours" or "days"`

    Time unit for retention duration

    - `"hours"`

    - `"days"`

  - `value: number`

    Duration value. Maximum retention is 14 days (or 336 hours).

- `is_default: boolean`

  Whether this is the default workspace

- `name: string`

  Workspace name

- `updated_at: string`

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/workspaces \
    -H 'Content-Type: application/json' \
    -H "x-api-key: $BOLTZ_API_KEY" \
    -d '{}'
```

## List

**get** `/compute/v1/admin/workspaces`

List workspaces

### Query Parameters

- `after_id: optional string`

  Return results after this ID

- `before_id: optional string`

  Return results before this ID

- `limit: optional number`

  Max items to return

### Returns

- `data: array of object { id, archived_at, created_at, 4 more }`

  - `id: string`

    Workspace ID

  - `archived_at: string`

  - `created_at: string`

  - `data_retention: object { unit, value }`

    How long result data is retained before automatic deletion. Defaults to 7 days if not specified. Maximum retention is 14 days (336 hours).

    - `unit: "hours" or "days"`

      Time unit for retention duration

      - `"hours"`

      - `"days"`

    - `value: number`

      Duration value. Maximum retention is 14 days (or 336 hours).

  - `is_default: boolean`

    Whether this is the default workspace

  - `name: string`

    Workspace name

  - `updated_at: string`

- `first_id: string`

  ID of the first item. Use as before_id for the previous page.

- `has_more: boolean`

- `last_id: string`

  ID of the last item. Use as after_id for the next page.

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/workspaces \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## Retrieve

**get** `/compute/v1/admin/workspaces/{workspace_id}`

Get a workspace

### Path Parameters

- `workspace_id: string`

### Returns

- `id: string`

  Workspace ID

- `archived_at: string`

- `created_at: string`

- `data_retention: object { unit, value }`

  How long result data is retained before automatic deletion. Defaults to 7 days if not specified. Maximum retention is 14 days (336 hours).

  - `unit: "hours" or "days"`

    Time unit for retention duration

    - `"hours"`

    - `"days"`

  - `value: number`

    Duration value. Maximum retention is 14 days (or 336 hours).

- `is_default: boolean`

  Whether this is the default workspace

- `name: string`

  Workspace name

- `updated_at: string`

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/workspaces/$WORKSPACE_ID \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## Update

**post** `/compute/v1/admin/workspaces/{workspace_id}`

Update a workspace

### Path Parameters

- `workspace_id: string`

### Body Parameters

- `data_retention: optional object { unit, value }`

  How long result data is retained before automatic deletion. Defaults to 7 days if not specified. Maximum retention is 14 days (336 hours).

  - `unit: "hours" or "days"`

    Time unit for retention duration

    - `"hours"`

    - `"days"`

  - `value: number`

    Duration value. Maximum retention is 14 days (or 336 hours).

- `name: optional string`

### Returns

- `id: string`

  Workspace ID

- `archived_at: string`

- `created_at: string`

- `data_retention: object { unit, value }`

  How long result data is retained before automatic deletion. Defaults to 7 days if not specified. Maximum retention is 14 days (336 hours).

  - `unit: "hours" or "days"`

    Time unit for retention duration

    - `"hours"`

    - `"days"`

  - `value: number`

    Duration value. Maximum retention is 14 days (or 336 hours).

- `is_default: boolean`

  Whether this is the default workspace

- `name: string`

  Workspace name

- `updated_at: string`

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/workspaces/$WORKSPACE_ID \
    -H 'Content-Type: application/json' \
    -H "x-api-key: $BOLTZ_API_KEY" \
    -d '{}'
```

## Archive

**post** `/compute/v1/admin/workspaces/{workspace_id}/archive`

Archives a workspace and deactivates all its API keys. This action is irreversible.

### Path Parameters

- `workspace_id: string`

### Returns

- `id: string`

  Workspace ID

- `archived_at: string`

- `created_at: string`

- `data_retention: object { unit, value }`

  How long result data is retained before automatic deletion. Defaults to 7 days if not specified. Maximum retention is 14 days (336 hours).

  - `unit: "hours" or "days"`

    Time unit for retention duration

    - `"hours"`

    - `"days"`

  - `value: number`

    Duration value. Maximum retention is 14 days (or 336 hours).

- `is_default: boolean`

  Whether this is the default workspace

- `name: string`

  Workspace name

- `updated_at: string`

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/workspaces/$WORKSPACE_ID/archive \
    -X POST \
    -H "x-api-key: $BOLTZ_API_KEY"
```

# API Keys

## Create

**post** `/compute/v1/admin/api-keys`

Create a workspace API key

### Body Parameters

- `name: string`

  API key name

- `allowed_ips: optional array of string`

  IP addresses allowed to use this key (IPv4 or IPv6). An empty array (the default) means all IPs are allowed.

- `expires_in_days: optional number`

  Days until the key expires. Omit for a key that does not expire.

- `mode: optional "live" or "test"`

  Key mode. Test keys create test-mode resources with synthetic data.

  - `"live"`

  - `"test"`

- `workspace_id: optional string`

  Workspace ID to scope this key to. Omit for default workspace.

### Returns

- `key: string`

  The full API key. This is only shown once — store it securely.

- `key_details: object { id, allowed_ips, created_at, 8 more }`

  - `id: string`

    API key ID

  - `allowed_ips: array of string`

    IP addresses allowed to use this key. An empty array means all IPs are allowed.

  - `created_at: string`

  - `expires_at: string`

    When the key expires. Null if the key does not expire.

  - `is_active: boolean`

  - `key_prefix: string`

    First 12 characters of the key

  - `key_type: "workspace"`

    - `"workspace"`

  - `last_used_at: string`

  - `livemode: boolean`

    Whether this is a live API key (false for test keys).

  - `name: string`

    API key name

  - `workspace_id: string`

    Workspace this key is scoped to

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/api-keys \
    -H 'Content-Type: application/json' \
    -H "x-api-key: $BOLTZ_API_KEY" \
    -d '{
          "name": "x"
        }'
```

## List

**get** `/compute/v1/admin/api-keys`

List API keys

### Query Parameters

- `after_id: optional string`

  Return results after this ID

- `before_id: optional string`

  Return results before this ID

- `limit: optional number`

  Max items to return

- `workspace_id: optional string`

  Filter by workspace ID. If not provided, returns keys across all workspaces.

### Returns

- `data: array of object { id, allowed_ips, created_at, 8 more }`

  - `id: string`

    API key ID

  - `allowed_ips: array of string`

    IP addresses allowed to use this key. An empty array means all IPs are allowed.

  - `created_at: string`

  - `expires_at: string`

    When the key expires. Null if the key does not expire.

  - `is_active: boolean`

  - `key_prefix: string`

    First 12 characters of the key

  - `key_type: "admin" or "workspace"`

    - `"admin"`

    - `"workspace"`

  - `last_used_at: string`

  - `livemode: boolean`

    Whether this is a live API key (false for test keys).

  - `name: string`

    API key name

  - `workspace_id: string`

    Workspace ID if workspace-scoped

- `first_id: string`

  ID of the first item. Use as before_id for the previous page.

- `has_more: boolean`

- `last_id: string`

  ID of the last item. Use as after_id for the next page.

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/api-keys \
    -H "x-api-key: $BOLTZ_API_KEY"
```

## Revoke

**post** `/compute/v1/admin/api-keys/{api_key_id}/revoke`

Revoke an API key

### Path Parameters

- `api_key_id: string`

### Returns

- `id: string`

  API key ID

- `allowed_ips: array of string`

  IP addresses allowed to use this key. An empty array means all IPs are allowed.

- `created_at: string`

- `expires_at: string`

  When the key expires. Null if the key does not expire.

- `is_active: boolean`

- `key_prefix: string`

  First 12 characters of the key

- `key_type: "admin" or "workspace"`

  - `"admin"`

  - `"workspace"`

- `last_used_at: string`

- `livemode: boolean`

  Whether this is a live API key (false for test keys).

- `name: string`

  API key name

- `workspace_id: string`

  Workspace ID if workspace-scoped

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/api-keys/$API_KEY_ID/revoke \
    -X POST \
    -H "x-api-key: $BOLTZ_API_KEY"
```

# Usage

## List

**get** `/compute/v1/admin/usage`

Retrieve aggregated usage data across the organization, optionally grouped by workspace and/or application.

### Query Parameters

- `ending_at: string`

  End of the time range as an ISO 8601 date-time with timezone, for example 2026-04-08T18:56:46Z

- `starting_at: string`

  Start of the time range as an ISO 8601 date-time with timezone, for example 2026-04-08T18:56:46Z

- `window_size: "HOUR" or "DAY"`

  Time window size. HOUR supports up to 31 days per query; DAY supports up to 365 days per query.

  - `"HOUR"`

  - `"DAY"`

- `"applications[]": optional "structure_and_binding" or "small_molecule_design" or "small_molecule_library_screen" or 3 more or array of "structure_and_binding" or "small_molecule_design" or "small_molecule_library_screen" or 3 more`

  Filter to specific applications

  - `UnionMember0 = "structure_and_binding" or "small_molecule_design" or "small_molecule_library_screen" or 3 more`

    - `"structure_and_binding"`

    - `"small_molecule_design"`

    - `"small_molecule_library_screen"`

    - `"protein_design"`

    - `"protein_library_screen"`

    - `"adme"`

  - `UnionMember1 = array of "structure_and_binding" or "small_molecule_design" or "small_molecule_library_screen" or 3 more`

    - `"structure_and_binding"`

    - `"small_molecule_design"`

    - `"small_molecule_library_screen"`

    - `"protein_design"`

    - `"protein_library_screen"`

    - `"adme"`

- `"group_by[]": optional "workspace_id" or "application" or array of "workspace_id" or "application"`

  Group results by workspace_id and/or application

  - `UnionMember0 = "workspace_id" or "application"`

    - `"workspace_id"`

    - `"application"`

  - `UnionMember1 = array of "workspace_id" or "application"`

    - `"workspace_id"`

    - `"application"`

- `limit: optional number`

  Maximum number of buckets to return

- `page: optional string`

  Cursor for pagination

- `"workspace_ids[]": optional string or array of string`

  Filter to specific workspace IDs

  - `UnionMember0 = string`

  - `UnionMember1 = array of string`

### Returns

- `data: array of object { end_time, quantity, start_time, 2 more }`

  - `end_time: string`

  - `quantity: number`

    Aggregated billed quantity for this bucket

  - `start_time: string`

  - `application: optional "structure_and_binding" or "small_molecule_design" or "small_molecule_library_screen" or 3 more`

    - `"structure_and_binding"`

    - `"small_molecule_design"`

    - `"small_molecule_library_screen"`

    - `"protein_design"`

    - `"protein_library_screen"`

    - `"adme"`

  - `workspace_id: optional string`

    Present when grouped by workspace_id

- `has_more: boolean`

- `next_page: string`

### Example

```http
curl https://api.boltz.bio/compute/v1/admin/usage \
    -H "x-api-key: $BOLTZ_API_KEY"
```
