# Admin

# Workspaces

## Create

`client.Admin.Workspaces.New(ctx, body) (*AdminWorkspaceNewResponse, error)`

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

Create a workspace

### Parameters

- `body AdminWorkspaceNewParams`

  - `DataRetention param.Field[AdminWorkspaceNewParamsDataRetention]`

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

    - `Unit AdminWorkspaceNewParamsDataRetentionUnit`

      Time unit for retention duration

      - `const AdminWorkspaceNewParamsDataRetentionUnitHours AdminWorkspaceNewParamsDataRetentionUnit = "hours"`

      - `const AdminWorkspaceNewParamsDataRetentionUnitDays AdminWorkspaceNewParamsDataRetentionUnit = "days"`

    - `Value int64`

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

  - `Name param.Field[string]`

    Workspace name

### Returns

- `type AdminWorkspaceNewResponse struct{…}`

  - `ID string`

    Workspace ID

  - `ArchivedAt Time`

  - `CreatedAt Time`

  - `DataRetention AdminWorkspaceNewResponseDataRetention`

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

    - `Unit AdminWorkspaceNewResponseDataRetentionUnit`

      Time unit for retention duration

      - `const AdminWorkspaceNewResponseDataRetentionUnitHours AdminWorkspaceNewResponseDataRetentionUnit = "hours"`

      - `const AdminWorkspaceNewResponseDataRetentionUnitDays AdminWorkspaceNewResponseDataRetentionUnit = "days"`

    - `Value int64`

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

  - `IsDefault bool`

    Whether this is the default workspace

  - `Name string`

    Workspace name

  - `UpdatedAt Time`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  workspace, err := client.Admin.Workspaces.New(context.TODO(), boltzapi.AdminWorkspaceNewParams{

  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", workspace.ID)
}
```

## List

`client.Admin.Workspaces.List(ctx, query) (*CursorPage[AdminWorkspaceListResponse], error)`

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

List workspaces

### Parameters

- `query AdminWorkspaceListParams`

  - `AfterID param.Field[string]`

    Return results after this ID

  - `BeforeID param.Field[string]`

    Return results before this ID

  - `Limit param.Field[int64]`

    Max items to return

### Returns

- `type AdminWorkspaceListResponse struct{…}`

  - `ID string`

    Workspace ID

  - `ArchivedAt Time`

  - `CreatedAt Time`

  - `DataRetention AdminWorkspaceListResponseDataRetention`

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

    - `Unit AdminWorkspaceListResponseDataRetentionUnit`

      Time unit for retention duration

      - `const AdminWorkspaceListResponseDataRetentionUnitHours AdminWorkspaceListResponseDataRetentionUnit = "hours"`

      - `const AdminWorkspaceListResponseDataRetentionUnitDays AdminWorkspaceListResponseDataRetentionUnit = "days"`

    - `Value int64`

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

  - `IsDefault bool`

    Whether this is the default workspace

  - `Name string`

    Workspace name

  - `UpdatedAt Time`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  page, err := client.Admin.Workspaces.List(context.TODO(), boltzapi.AdminWorkspaceListParams{

  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", page)
}
```

## Retrieve

`client.Admin.Workspaces.Get(ctx, workspaceID) (*AdminWorkspaceGetResponse, error)`

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

Get a workspace

### Parameters

- `workspaceID string`

### Returns

- `type AdminWorkspaceGetResponse struct{…}`

  - `ID string`

    Workspace ID

  - `ArchivedAt Time`

  - `CreatedAt Time`

  - `DataRetention AdminWorkspaceGetResponseDataRetention`

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

    - `Unit AdminWorkspaceGetResponseDataRetentionUnit`

      Time unit for retention duration

      - `const AdminWorkspaceGetResponseDataRetentionUnitHours AdminWorkspaceGetResponseDataRetentionUnit = "hours"`

      - `const AdminWorkspaceGetResponseDataRetentionUnitDays AdminWorkspaceGetResponseDataRetentionUnit = "days"`

    - `Value int64`

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

  - `IsDefault bool`

    Whether this is the default workspace

  - `Name string`

    Workspace name

  - `UpdatedAt Time`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  workspace, err := client.Admin.Workspaces.Get(context.TODO(), "workspace_id")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", workspace.ID)
}
```

## Update

`client.Admin.Workspaces.Update(ctx, workspaceID, body) (*AdminWorkspaceUpdateResponse, error)`

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

Update a workspace

### Parameters

- `workspaceID string`

- `body AdminWorkspaceUpdateParams`

  - `DataRetention param.Field[AdminWorkspaceUpdateParamsDataRetention]`

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

    - `Unit AdminWorkspaceUpdateParamsDataRetentionUnit`

      Time unit for retention duration

      - `const AdminWorkspaceUpdateParamsDataRetentionUnitHours AdminWorkspaceUpdateParamsDataRetentionUnit = "hours"`

      - `const AdminWorkspaceUpdateParamsDataRetentionUnitDays AdminWorkspaceUpdateParamsDataRetentionUnit = "days"`

    - `Value int64`

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

  - `Name param.Field[string]`

### Returns

- `type AdminWorkspaceUpdateResponse struct{…}`

  - `ID string`

    Workspace ID

  - `ArchivedAt Time`

  - `CreatedAt Time`

  - `DataRetention AdminWorkspaceUpdateResponseDataRetention`

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

    - `Unit AdminWorkspaceUpdateResponseDataRetentionUnit`

      Time unit for retention duration

      - `const AdminWorkspaceUpdateResponseDataRetentionUnitHours AdminWorkspaceUpdateResponseDataRetentionUnit = "hours"`

      - `const AdminWorkspaceUpdateResponseDataRetentionUnitDays AdminWorkspaceUpdateResponseDataRetentionUnit = "days"`

    - `Value int64`

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

  - `IsDefault bool`

    Whether this is the default workspace

  - `Name string`

    Workspace name

  - `UpdatedAt Time`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  workspace, err := client.Admin.Workspaces.Update(
    context.TODO(),
    "workspace_id",
    boltzapi.AdminWorkspaceUpdateParams{

    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", workspace.ID)
}
```

## Archive

`client.Admin.Workspaces.Archive(ctx, workspaceID) (*AdminWorkspaceArchiveResponse, error)`

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

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

### Parameters

- `workspaceID string`

### Returns

- `type AdminWorkspaceArchiveResponse struct{…}`

  - `ID string`

    Workspace ID

  - `ArchivedAt Time`

  - `CreatedAt Time`

  - `DataRetention AdminWorkspaceArchiveResponseDataRetention`

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

    - `Unit AdminWorkspaceArchiveResponseDataRetentionUnit`

      Time unit for retention duration

      - `const AdminWorkspaceArchiveResponseDataRetentionUnitHours AdminWorkspaceArchiveResponseDataRetentionUnit = "hours"`

      - `const AdminWorkspaceArchiveResponseDataRetentionUnitDays AdminWorkspaceArchiveResponseDataRetentionUnit = "days"`

    - `Value int64`

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

  - `IsDefault bool`

    Whether this is the default workspace

  - `Name string`

    Workspace name

  - `UpdatedAt Time`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  response, err := client.Admin.Workspaces.Archive(context.TODO(), "workspace_id")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response.ID)
}
```

# API Keys

## Create

`client.Admin.APIKeys.New(ctx, body) (*AdminAPIKeyNewResponse, error)`

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

Create a workspace API key

### Parameters

- `body AdminAPIKeyNewParams`

  - `Name param.Field[string]`

    API key name

  - `AllowedIPs param.Field[[]string]`

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

  - `ExpiresInDays param.Field[int64]`

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

  - `Mode param.Field[AdminAPIKeyNewParamsMode]`

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

    - `const AdminAPIKeyNewParamsModeLive AdminAPIKeyNewParamsMode = "live"`

    - `const AdminAPIKeyNewParamsModeTest AdminAPIKeyNewParamsMode = "test"`

  - `WorkspaceID param.Field[string]`

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

### Returns

- `type AdminAPIKeyNewResponse struct{…}`

  - `Key string`

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

  - `KeyDetails AdminAPIKeyNewResponseKeyDetails`

    - `ID string`

      API key ID

    - `AllowedIPs []string`

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

    - `CreatedAt Time`

    - `ExpiresAt Time`

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

    - `IsActive bool`

    - `KeyPrefix string`

      First 12 characters of the key

    - `KeyType Workspace`

      - `const WorkspaceWorkspace Workspace = "workspace"`

    - `LastUsedAt Time`

    - `Livemode bool`

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

    - `Name string`

      API key name

    - `WorkspaceID string`

      Workspace this key is scoped to

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  apiKey, err := client.Admin.APIKeys.New(context.TODO(), boltzapi.AdminAPIKeyNewParams{
    Name: "x",
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", apiKey.Key)
}
```

## List

`client.Admin.APIKeys.List(ctx, query) (*CursorPage[AdminAPIKeyListResponse], error)`

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

List API keys

### Parameters

- `query AdminAPIKeyListParams`

  - `AfterID param.Field[string]`

    Return results after this ID

  - `BeforeID param.Field[string]`

    Return results before this ID

  - `Limit param.Field[int64]`

    Max items to return

  - `WorkspaceID param.Field[string]`

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

### Returns

- `type AdminAPIKeyListResponse struct{…}`

  - `ID string`

    API key ID

  - `AllowedIPs []string`

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

  - `CreatedAt Time`

  - `ExpiresAt Time`

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

  - `IsActive bool`

  - `KeyPrefix string`

    First 12 characters of the key

  - `KeyType AdminAPIKeyListResponseKeyType`

    - `const AdminAPIKeyListResponseKeyTypeAdmin AdminAPIKeyListResponseKeyType = "admin"`

    - `const AdminAPIKeyListResponseKeyTypeWorkspace AdminAPIKeyListResponseKeyType = "workspace"`

  - `LastUsedAt Time`

  - `Livemode bool`

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

  - `Name string`

    API key name

  - `WorkspaceID string`

    Workspace ID if workspace-scoped

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  page, err := client.Admin.APIKeys.List(context.TODO(), boltzapi.AdminAPIKeyListParams{

  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", page)
}
```

## Revoke

`client.Admin.APIKeys.Revoke(ctx, apiKeyID) (*AdminAPIKeyRevokeResponse, error)`

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

Revoke an API key

### Parameters

- `apiKeyID string`

### Returns

- `type AdminAPIKeyRevokeResponse struct{…}`

  - `ID string`

    API key ID

  - `AllowedIPs []string`

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

  - `CreatedAt Time`

  - `ExpiresAt Time`

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

  - `IsActive bool`

  - `KeyPrefix string`

    First 12 characters of the key

  - `KeyType AdminAPIKeyRevokeResponseKeyType`

    - `const AdminAPIKeyRevokeResponseKeyTypeAdmin AdminAPIKeyRevokeResponseKeyType = "admin"`

    - `const AdminAPIKeyRevokeResponseKeyTypeWorkspace AdminAPIKeyRevokeResponseKeyType = "workspace"`

  - `LastUsedAt Time`

  - `Livemode bool`

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

  - `Name string`

    API key name

  - `WorkspaceID string`

    Workspace ID if workspace-scoped

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  response, err := client.Admin.APIKeys.Revoke(context.TODO(), "api_key_id")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response.ID)
}
```

# Usage

## List

`client.Admin.Usage.List(ctx, query) (*OpaqueCursorPage[AdminUsageListResponse], error)`

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

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

### Parameters

- `query AdminUsageListParams`

  - `EndingAt param.Field[Time]`

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

  - `StartingAt param.Field[Time]`

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

  - `WindowSize param.Field[AdminUsageListParamsWindowSize]`

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

    - `const AdminUsageListParamsWindowSizeHour AdminUsageListParamsWindowSize = "HOUR"`

    - `const AdminUsageListParamsWindowSizeDay AdminUsageListParamsWindowSize = "DAY"`

  - `Applications param.Field[AdminUsageListParamsApplicationsUnion]`

    Filter to specific applications

    - `type AdminUsageListParamsApplicationsString string`

      - `const AdminUsageListParamsApplicationsStringStructureAndBinding AdminUsageListParamsApplicationsString = "structure_and_binding"`

      - `const AdminUsageListParamsApplicationsStringSmallMoleculeDesign AdminUsageListParamsApplicationsString = "small_molecule_design"`

      - `const AdminUsageListParamsApplicationsStringSmallMoleculeLibraryScreen AdminUsageListParamsApplicationsString = "small_molecule_library_screen"`

      - `const AdminUsageListParamsApplicationsStringProteinDesign AdminUsageListParamsApplicationsString = "protein_design"`

      - `const AdminUsageListParamsApplicationsStringProteinLibraryScreen AdminUsageListParamsApplicationsString = "protein_library_screen"`

      - `const AdminUsageListParamsApplicationsStringAdme AdminUsageListParamsApplicationsString = "adme"`

    - `type AdminUsageListParamsApplicationsArray []AdminUsageListParamsApplicationsArrayItem`

      - `const AdminUsageListParamsApplicationsArrayItemStructureAndBinding AdminUsageListParamsApplicationsArrayItem = "structure_and_binding"`

      - `const AdminUsageListParamsApplicationsArrayItemSmallMoleculeDesign AdminUsageListParamsApplicationsArrayItem = "small_molecule_design"`

      - `const AdminUsageListParamsApplicationsArrayItemSmallMoleculeLibraryScreen AdminUsageListParamsApplicationsArrayItem = "small_molecule_library_screen"`

      - `const AdminUsageListParamsApplicationsArrayItemProteinDesign AdminUsageListParamsApplicationsArrayItem = "protein_design"`

      - `const AdminUsageListParamsApplicationsArrayItemProteinLibraryScreen AdminUsageListParamsApplicationsArrayItem = "protein_library_screen"`

      - `const AdminUsageListParamsApplicationsArrayItemAdme AdminUsageListParamsApplicationsArrayItem = "adme"`

  - `GroupBy param.Field[AdminUsageListParamsGroupByUnion]`

    Group results by workspace_id and/or application

    - `type AdminUsageListParamsGroupByString string`

      - `const AdminUsageListParamsGroupByStringWorkspaceID AdminUsageListParamsGroupByString = "workspace_id"`

      - `const AdminUsageListParamsGroupByStringApplication AdminUsageListParamsGroupByString = "application"`

    - `type AdminUsageListParamsGroupByArray []AdminUsageListParamsGroupByArrayItem`

      - `const AdminUsageListParamsGroupByArrayItemWorkspaceID AdminUsageListParamsGroupByArrayItem = "workspace_id"`

      - `const AdminUsageListParamsGroupByArrayItemApplication AdminUsageListParamsGroupByArrayItem = "application"`

  - `Limit param.Field[int64]`

    Maximum number of buckets to return

  - `Page param.Field[string]`

    Cursor for pagination

  - `WorkspaceIDs param.Field[AdminUsageListParamsWorkspaceIDsUnion]`

    Filter to specific workspace IDs

    - `string`

    - `type AdminUsageListParamsWorkspaceIDsArray []string`

### Returns

- `type AdminUsageListResponse struct{…}`

  - `EndTime Time`

  - `Quantity int64`

    Aggregated billed quantity for this bucket

  - `StartTime Time`

  - `Application AdminUsageListResponseApplication`

    - `const AdminUsageListResponseApplicationStructureAndBinding AdminUsageListResponseApplication = "structure_and_binding"`

    - `const AdminUsageListResponseApplicationSmallMoleculeDesign AdminUsageListResponseApplication = "small_molecule_design"`

    - `const AdminUsageListResponseApplicationSmallMoleculeLibraryScreen AdminUsageListResponseApplication = "small_molecule_library_screen"`

    - `const AdminUsageListResponseApplicationProteinDesign AdminUsageListResponseApplication = "protein_design"`

    - `const AdminUsageListResponseApplicationProteinLibraryScreen AdminUsageListResponseApplication = "protein_library_screen"`

    - `const AdminUsageListResponseApplicationAdme AdminUsageListResponseApplication = "adme"`

  - `WorkspaceID string`

    Present when grouped by workspace_id

### Example

```go
package main

import (
  "context"
  "fmt"
  "time"

  "github.com/boltz-bio/boltz-api-go"
  "github.com/boltz-bio/boltz-api-go/option"
)

func main() {
  client := boltzapi.NewClient(
    option.WithAPIKey("My API Key"),
  )
  page, err := client.Admin.Usage.List(context.TODO(), boltzapi.AdminUsageListParams{
    EndingAt: time.Now(),
    StartingAt: time.Now(),
    WindowSize: boltzapi.AdminUsageListParamsWindowSizeHour,
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", page)
}
```
