# Adme

## Start an ADME prediction

`predictions.adme.start(AdmeStartParams**kwargs)  -> AdmeStartResponse`

**post** `/compute/v1/predictions/adme`

Submit a prediction job that returns Tier 1 ADME summary values for each requested molecule.

### Parameters

- `input: Input`

  - `molecules: Iterable[InputMolecule]`

    Molecules to score (1-128 per request). Results are returned in the same order as this list.

    - `smiles: str`

      SMILES string of the molecule to predict ADME properties for.

    - `id: Optional[str]`

      Optional client-provided identifier. Returned as `external_id` in the matching output item.

- `model: Literal["adme-v1"]`

  Model to use for prediction

  - `"adme-v1"`

- `idempotency_key: Optional[str]`

  Client-provided key to prevent duplicate submissions on retries

- `workspace_id: Optional[str]`

  Target workspace ID (admin keys only; ignored for workspace keys)

### Returns

- `class AdmeStartResponse: …`

  - `id: str`

    Unique prediction identifier

  - `completed_at: Optional[datetime]`

  - `created_at: datetime`

  - `data_deleted_at: Optional[datetime]`

    When the input/output data was deleted, or null if still available

  - `error: Optional[Error]`

    Error details when failed

    - `code: str`

      Machine-readable error code

    - `message: str`

      Human-readable error message

    - `details: Optional[object]`

      Additional field-level error details keyed by input path, when available.

  - `expires_at: Optional[datetime]`

    When this resource and its associated data will be permanently deleted. Null while still in progress.

  - `input: Optional[Input]`

    Prediction input (null if data deleted)

    - `molecules: List[InputMolecule]`

      Molecules to score (1-128 per request). Results are returned in the same order as this list.

      - `smiles: str`

        SMILES string of the molecule to predict ADME properties for.

      - `id: Optional[str]`

        Optional client-provided identifier. Returned as `external_id` in the matching output item.

  - `livemode: bool`

    Whether this resource was created with a live API key.

  - `model: Literal["adme-v1"]`

    Model used for prediction

    - `"adme-v1"`

  - `output: Optional[Output]`

    Prediction output when succeeded

    - `molecules: List[OutputMolecule]`

      Per-molecule results in the same order as the request. Successful molecules carry an `adme` summary. Failed molecules carry `status: "failed"` and a non-null `error`.

      - `class OutputMoleculeAdmeMoleculeSucceeded: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: OutputMoleculeAdmeMoleculeSucceededAdme`

          Tier 1 ADME summary values for this molecule.

          - `lipophilicity: float`

            Lipophilicity score from the internal LogD prediction.

          - `permeability: float`

            Permeability score for this molecule.

          - `solubility: Literal["high-confidence", "medium-confidence", "high-risk"]`

            Solubility judgement for this molecule.

            - `"high-confidence"`

            - `"medium-confidence"`

            - `"high-risk"`

        - `error: None`

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["succeeded"]`

          - `"succeeded"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

      - `class OutputMoleculeAdmeMoleculeFailed: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: None`

        - `error: OutputMoleculeAdmeMoleculeFailedError`

          - `code: str`

            Machine-readable error code

          - `message: str`

            Human-readable error message

          - `details: Optional[object]`

            Additional field-level error details keyed by input path, when available.

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["failed"]`

          - `"failed"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

  - `started_at: Optional[datetime]`

  - `status: Literal["pending", "running", "succeeded", "failed"]`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

  - `version: str`

    Model version used for prediction

  - `workspace_id: str`

    Workspace ID

  - `idempotency_key: Optional[str]`

    Client-provided idempotency key

### Example

```python
import os
from boltz_api import Boltz

client = Boltz(
    api_key=os.environ.get("BOLTZ_API_KEY"),  # This is the default and can be omitted
)
response = client.predictions.adme.start(
    input={
        "molecules": [{
            "smiles": "x"
        }]
    },
    model="adme-v1",
)
print(response.id)
```

#### Response

```json
{
  "id": "id",
  "completed_at": "2019-12-27T18:11:19.117Z",
  "created_at": "2019-12-27T18:11:19.117Z",
  "data_deleted_at": "2019-12-27T18:11:19.117Z",
  "error": {
    "code": "code",
    "message": "message",
    "details": {}
  },
  "expires_at": "2019-12-27T18:11:19.117Z",
  "input": {
    "molecules": [
      {
        "smiles": "x",
        "id": "x"
      }
    ]
  },
  "livemode": true,
  "model": "adme-v1",
  "output": {
    "molecules": [
      {
        "id": "id",
        "adme": {
          "lipophilicity": 0,
          "permeability": 0,
          "solubility": "high-confidence"
        },
        "error": null,
        "smiles": "smiles",
        "status": "succeeded",
        "external_id": "external_id"
      }
    ]
  },
  "started_at": "2019-12-27T18:11:19.117Z",
  "status": "pending",
  "version": "version",
  "workspace_id": "workspace_id",
  "idempotency_key": "idempotency_key"
}
```

## List ADME predictions

`predictions.adme.list(AdmeListParams**kwargs)  -> SyncCursorPage[AdmeListResponse]`

**get** `/compute/v1/predictions/adme`

List ADME predictions, optionally filtered by workspace

### Parameters

- `after_id: Optional[str]`

  Return results after this ID

- `before_id: Optional[str]`

  Return results before this ID

- `limit: Optional[int]`

  Max items to return. Defaults to 100.

- `workspace_id: Optional[str]`

  Filter by workspace ID. Only used with admin API keys. If not provided, defaults to the workspace associated with the API key, or the default workspace for admin keys.

### Returns

- `class AdmeListResponse: …`

  - `id: str`

    Unique prediction identifier

  - `completed_at: Optional[datetime]`

  - `created_at: datetime`

  - `data_deleted_at: Optional[datetime]`

    When the input/output data was deleted, or null if still available

  - `error: Optional[Error]`

    Error details when failed

    - `code: str`

      Machine-readable error code

    - `message: str`

      Human-readable error message

    - `details: Optional[object]`

      Additional field-level error details keyed by input path, when available.

  - `expires_at: Optional[datetime]`

    When this resource and its associated data will be permanently deleted. Null while still in progress.

  - `livemode: bool`

    Whether this resource was created with a live API key.

  - `model: Literal["adme-v1"]`

    Model used for prediction

    - `"adme-v1"`

  - `started_at: Optional[datetime]`

  - `status: Literal["pending", "running", "succeeded", "failed"]`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

  - `version: str`

    Model version used for prediction

  - `workspace_id: str`

    Workspace ID

  - `idempotency_key: Optional[str]`

    Client-provided idempotency key

### Example

```python
import os
from boltz_api import Boltz

client = Boltz(
    api_key=os.environ.get("BOLTZ_API_KEY"),  # This is the default and can be omitted
)
page = client.predictions.adme.list()
page = page.data[0]
print(page.id)
```

#### Response

```json
{
  "data": [
    {
      "id": "id",
      "completed_at": "2019-12-27T18:11:19.117Z",
      "created_at": "2019-12-27T18:11:19.117Z",
      "data_deleted_at": "2019-12-27T18:11:19.117Z",
      "error": {
        "code": "code",
        "message": "message",
        "details": {}
      },
      "expires_at": "2019-12-27T18:11:19.117Z",
      "livemode": true,
      "model": "adme-v1",
      "started_at": "2019-12-27T18:11:19.117Z",
      "status": "pending",
      "version": "version",
      "workspace_id": "workspace_id",
      "idempotency_key": "idempotency_key"
    }
  ],
  "first_id": "first_id",
  "has_more": true,
  "last_id": "last_id"
}
```

## Retrieve an ADME prediction

`predictions.adme.retrieve(strid, AdmeRetrieveParams**kwargs)  -> AdmeRetrieveResponse`

**get** `/compute/v1/predictions/adme/{id}`

Retrieve an ADME prediction by ID, including its status and results.

### Parameters

- `id: str`

- `workspace_id: Optional[str]`

  Workspace ID. Only used with admin API keys. Ignored (or validated) for workspace-scoped keys.

### Returns

- `class AdmeRetrieveResponse: …`

  - `id: str`

    Unique prediction identifier

  - `completed_at: Optional[datetime]`

  - `created_at: datetime`

  - `data_deleted_at: Optional[datetime]`

    When the input/output data was deleted, or null if still available

  - `error: Optional[Error]`

    Error details when failed

    - `code: str`

      Machine-readable error code

    - `message: str`

      Human-readable error message

    - `details: Optional[object]`

      Additional field-level error details keyed by input path, when available.

  - `expires_at: Optional[datetime]`

    When this resource and its associated data will be permanently deleted. Null while still in progress.

  - `input: Optional[Input]`

    Prediction input (null if data deleted)

    - `molecules: List[InputMolecule]`

      Molecules to score (1-128 per request). Results are returned in the same order as this list.

      - `smiles: str`

        SMILES string of the molecule to predict ADME properties for.

      - `id: Optional[str]`

        Optional client-provided identifier. Returned as `external_id` in the matching output item.

  - `livemode: bool`

    Whether this resource was created with a live API key.

  - `model: Literal["adme-v1"]`

    Model used for prediction

    - `"adme-v1"`

  - `output: Optional[Output]`

    Prediction output when succeeded

    - `molecules: List[OutputMolecule]`

      Per-molecule results in the same order as the request. Successful molecules carry an `adme` summary. Failed molecules carry `status: "failed"` and a non-null `error`.

      - `class OutputMoleculeAdmeMoleculeSucceeded: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: OutputMoleculeAdmeMoleculeSucceededAdme`

          Tier 1 ADME summary values for this molecule.

          - `lipophilicity: float`

            Lipophilicity score from the internal LogD prediction.

          - `permeability: float`

            Permeability score for this molecule.

          - `solubility: Literal["high-confidence", "medium-confidence", "high-risk"]`

            Solubility judgement for this molecule.

            - `"high-confidence"`

            - `"medium-confidence"`

            - `"high-risk"`

        - `error: None`

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["succeeded"]`

          - `"succeeded"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

      - `class OutputMoleculeAdmeMoleculeFailed: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: None`

        - `error: OutputMoleculeAdmeMoleculeFailedError`

          - `code: str`

            Machine-readable error code

          - `message: str`

            Human-readable error message

          - `details: Optional[object]`

            Additional field-level error details keyed by input path, when available.

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["failed"]`

          - `"failed"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

  - `started_at: Optional[datetime]`

  - `status: Literal["pending", "running", "succeeded", "failed"]`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

  - `version: str`

    Model version used for prediction

  - `workspace_id: str`

    Workspace ID

  - `idempotency_key: Optional[str]`

    Client-provided idempotency key

### Example

```python
import os
from boltz_api import Boltz

client = Boltz(
    api_key=os.environ.get("BOLTZ_API_KEY"),  # This is the default and can be omitted
)
adme = client.predictions.adme.retrieve(
    id="id",
)
print(adme.id)
```

#### Response

```json
{
  "id": "id",
  "completed_at": "2019-12-27T18:11:19.117Z",
  "created_at": "2019-12-27T18:11:19.117Z",
  "data_deleted_at": "2019-12-27T18:11:19.117Z",
  "error": {
    "code": "code",
    "message": "message",
    "details": {}
  },
  "expires_at": "2019-12-27T18:11:19.117Z",
  "input": {
    "molecules": [
      {
        "smiles": "x",
        "id": "x"
      }
    ]
  },
  "livemode": true,
  "model": "adme-v1",
  "output": {
    "molecules": [
      {
        "id": "id",
        "adme": {
          "lipophilicity": 0,
          "permeability": 0,
          "solubility": "high-confidence"
        },
        "error": null,
        "smiles": "smiles",
        "status": "succeeded",
        "external_id": "external_id"
      }
    ]
  },
  "started_at": "2019-12-27T18:11:19.117Z",
  "status": "pending",
  "version": "version",
  "workspace_id": "workspace_id",
  "idempotency_key": "idempotency_key"
}
```

## Delete ADME prediction data

`predictions.adme.delete_data(strid)  -> AdmeDeleteDataResponse`

**post** `/compute/v1/predictions/adme/{id}/delete-data`

Permanently delete the input, output, and result data associated with this prediction. The prediction record itself is retained with a `data_deleted_at` timestamp. This action is irreversible.

### Parameters

- `id: str`

### Returns

- `class AdmeDeleteDataResponse: …`

  - `id: str`

    ID of the resource whose data was deleted

  - `data_deleted: Literal[true]`

    - `true`

  - `data_deleted_at: datetime`

    When the data was deleted

### Example

```python
import os
from boltz_api import Boltz

client = Boltz(
    api_key=os.environ.get("BOLTZ_API_KEY"),  # This is the default and can be omitted
)
response = client.predictions.adme.delete_data(
    "id",
)
print(response.id)
```

#### Response

```json
{
  "id": "id",
  "data_deleted": true,
  "data_deleted_at": "2019-12-27T18:11:19.117Z"
}
```

## Estimate cost for an ADME prediction

`predictions.adme.estimate_cost(AdmeEstimateCostParams**kwargs)  -> AdmeEstimateCostResponse`

**post** `/compute/v1/predictions/adme/estimate-cost`

Estimate the cost of an ADME prediction without creating any resource or consuming GPU.

### Parameters

- `input: Input`

  - `molecules: Iterable[InputMolecule]`

    Molecules to score (1-128 per request). Results are returned in the same order as this list.

    - `smiles: str`

      SMILES string of the molecule to predict ADME properties for.

    - `id: Optional[str]`

      Optional client-provided identifier. Returned as `external_id` in the matching output item.

- `model: Literal["adme-v1"]`

  Model to use for prediction

  - `"adme-v1"`

- `idempotency_key: Optional[str]`

  Client-provided key to prevent duplicate submissions on retries

- `workspace_id: Optional[str]`

  Target workspace ID (admin keys only; ignored for workspace keys)

### Returns

- `class AdmeEstimateCostResponse: …`

  Estimate response with monetary values encoded as decimal strings to preserve precision.

  - `breakdown: Breakdown`

    Cost breakdown for the billed application.

    - `application: Literal["structure_and_binding", "small_molecule_design", "small_molecule_library_screen", 4 more]`

      - `"structure_and_binding"`

      - `"small_molecule_design"`

      - `"small_molecule_library_screen"`

      - `"protein_design"`

      - `"protein_redesign"`

      - `"protein_library_screen"`

      - `"adme"`

    - `cost_per_unit_usd: str`

      Estimated cost per displayed unit as a decimal string, rounded up to 4 decimal places. This may include token-size multipliers or generation overhead; estimated_cost_usd is the authoritative total.

    - `num_units: int`

      Number of billable units in the estimate. The unit depends on the endpoint: samples for structure-and-binding, molecules for ADME, and requested proteins or molecules for design/screen endpoints.

  - `disclaimer: str`

  - `estimated_cost_usd: str`

    Estimated total cost as a decimal string

### Example

```python
import os
from boltz_api import Boltz

client = Boltz(
    api_key=os.environ.get("BOLTZ_API_KEY"),  # This is the default and can be omitted
)
response = client.predictions.adme.estimate_cost(
    input={
        "molecules": [{
            "smiles": "x"
        }]
    },
    model="adme-v1",
)
print(response.breakdown)
```

#### Response

```json
{
  "breakdown": {
    "application": "structure_and_binding",
    "cost_per_unit_usd": "0.0500",
    "num_units": 1
  },
  "disclaimer": "This is an estimate only and may differ from your actual charges. Final billing is based on exact token counts computed at run time. For large library screens, the estimate is extrapolated from a sample and may be less accurate for highly variable inputs.",
  "estimated_cost_usd": "0.0500"
}
```

## Domain Types

### Adme Start Response

- `class AdmeStartResponse: …`

  - `id: str`

    Unique prediction identifier

  - `completed_at: Optional[datetime]`

  - `created_at: datetime`

  - `data_deleted_at: Optional[datetime]`

    When the input/output data was deleted, or null if still available

  - `error: Optional[Error]`

    Error details when failed

    - `code: str`

      Machine-readable error code

    - `message: str`

      Human-readable error message

    - `details: Optional[object]`

      Additional field-level error details keyed by input path, when available.

  - `expires_at: Optional[datetime]`

    When this resource and its associated data will be permanently deleted. Null while still in progress.

  - `input: Optional[Input]`

    Prediction input (null if data deleted)

    - `molecules: List[InputMolecule]`

      Molecules to score (1-128 per request). Results are returned in the same order as this list.

      - `smiles: str`

        SMILES string of the molecule to predict ADME properties for.

      - `id: Optional[str]`

        Optional client-provided identifier. Returned as `external_id` in the matching output item.

  - `livemode: bool`

    Whether this resource was created with a live API key.

  - `model: Literal["adme-v1"]`

    Model used for prediction

    - `"adme-v1"`

  - `output: Optional[Output]`

    Prediction output when succeeded

    - `molecules: List[OutputMolecule]`

      Per-molecule results in the same order as the request. Successful molecules carry an `adme` summary. Failed molecules carry `status: "failed"` and a non-null `error`.

      - `class OutputMoleculeAdmeMoleculeSucceeded: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: OutputMoleculeAdmeMoleculeSucceededAdme`

          Tier 1 ADME summary values for this molecule.

          - `lipophilicity: float`

            Lipophilicity score from the internal LogD prediction.

          - `permeability: float`

            Permeability score for this molecule.

          - `solubility: Literal["high-confidence", "medium-confidence", "high-risk"]`

            Solubility judgement for this molecule.

            - `"high-confidence"`

            - `"medium-confidence"`

            - `"high-risk"`

        - `error: None`

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["succeeded"]`

          - `"succeeded"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

      - `class OutputMoleculeAdmeMoleculeFailed: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: None`

        - `error: OutputMoleculeAdmeMoleculeFailedError`

          - `code: str`

            Machine-readable error code

          - `message: str`

            Human-readable error message

          - `details: Optional[object]`

            Additional field-level error details keyed by input path, when available.

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["failed"]`

          - `"failed"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

  - `started_at: Optional[datetime]`

  - `status: Literal["pending", "running", "succeeded", "failed"]`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

  - `version: str`

    Model version used for prediction

  - `workspace_id: str`

    Workspace ID

  - `idempotency_key: Optional[str]`

    Client-provided idempotency key

### Adme List Response

- `class AdmeListResponse: …`

  - `id: str`

    Unique prediction identifier

  - `completed_at: Optional[datetime]`

  - `created_at: datetime`

  - `data_deleted_at: Optional[datetime]`

    When the input/output data was deleted, or null if still available

  - `error: Optional[Error]`

    Error details when failed

    - `code: str`

      Machine-readable error code

    - `message: str`

      Human-readable error message

    - `details: Optional[object]`

      Additional field-level error details keyed by input path, when available.

  - `expires_at: Optional[datetime]`

    When this resource and its associated data will be permanently deleted. Null while still in progress.

  - `livemode: bool`

    Whether this resource was created with a live API key.

  - `model: Literal["adme-v1"]`

    Model used for prediction

    - `"adme-v1"`

  - `started_at: Optional[datetime]`

  - `status: Literal["pending", "running", "succeeded", "failed"]`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

  - `version: str`

    Model version used for prediction

  - `workspace_id: str`

    Workspace ID

  - `idempotency_key: Optional[str]`

    Client-provided idempotency key

### Adme Retrieve Response

- `class AdmeRetrieveResponse: …`

  - `id: str`

    Unique prediction identifier

  - `completed_at: Optional[datetime]`

  - `created_at: datetime`

  - `data_deleted_at: Optional[datetime]`

    When the input/output data was deleted, or null if still available

  - `error: Optional[Error]`

    Error details when failed

    - `code: str`

      Machine-readable error code

    - `message: str`

      Human-readable error message

    - `details: Optional[object]`

      Additional field-level error details keyed by input path, when available.

  - `expires_at: Optional[datetime]`

    When this resource and its associated data will be permanently deleted. Null while still in progress.

  - `input: Optional[Input]`

    Prediction input (null if data deleted)

    - `molecules: List[InputMolecule]`

      Molecules to score (1-128 per request). Results are returned in the same order as this list.

      - `smiles: str`

        SMILES string of the molecule to predict ADME properties for.

      - `id: Optional[str]`

        Optional client-provided identifier. Returned as `external_id` in the matching output item.

  - `livemode: bool`

    Whether this resource was created with a live API key.

  - `model: Literal["adme-v1"]`

    Model used for prediction

    - `"adme-v1"`

  - `output: Optional[Output]`

    Prediction output when succeeded

    - `molecules: List[OutputMolecule]`

      Per-molecule results in the same order as the request. Successful molecules carry an `adme` summary. Failed molecules carry `status: "failed"` and a non-null `error`.

      - `class OutputMoleculeAdmeMoleculeSucceeded: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: OutputMoleculeAdmeMoleculeSucceededAdme`

          Tier 1 ADME summary values for this molecule.

          - `lipophilicity: float`

            Lipophilicity score from the internal LogD prediction.

          - `permeability: float`

            Permeability score for this molecule.

          - `solubility: Literal["high-confidence", "medium-confidence", "high-risk"]`

            Solubility judgement for this molecule.

            - `"high-confidence"`

            - `"medium-confidence"`

            - `"high-risk"`

        - `error: None`

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["succeeded"]`

          - `"succeeded"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

      - `class OutputMoleculeAdmeMoleculeFailed: …`

        - `id: str`

          Internally generated molecule identifier.

        - `adme: None`

        - `error: OutputMoleculeAdmeMoleculeFailedError`

          - `code: str`

            Machine-readable error code

          - `message: str`

            Human-readable error message

          - `details: Optional[object]`

            Additional field-level error details keyed by input path, when available.

        - `smiles: str`

          Echoed SMILES from the request.

        - `status: Literal["failed"]`

          - `"failed"`

        - `external_id: Optional[str]`

          Client-provided molecule identifier, if one was supplied.

  - `started_at: Optional[datetime]`

  - `status: Literal["pending", "running", "succeeded", "failed"]`

    - `"pending"`

    - `"running"`

    - `"succeeded"`

    - `"failed"`

  - `version: str`

    Model version used for prediction

  - `workspace_id: str`

    Workspace ID

  - `idempotency_key: Optional[str]`

    Client-provided idempotency key

### Adme Delete Data Response

- `class AdmeDeleteDataResponse: …`

  - `id: str`

    ID of the resource whose data was deleted

  - `data_deleted: Literal[true]`

    - `true`

  - `data_deleted_at: datetime`

    When the data was deleted

### Adme Estimate Cost Response

- `class AdmeEstimateCostResponse: …`

  Estimate response with monetary values encoded as decimal strings to preserve precision.

  - `breakdown: Breakdown`

    Cost breakdown for the billed application.

    - `application: Literal["structure_and_binding", "small_molecule_design", "small_molecule_library_screen", 4 more]`

      - `"structure_and_binding"`

      - `"small_molecule_design"`

      - `"small_molecule_library_screen"`

      - `"protein_design"`

      - `"protein_redesign"`

      - `"protein_library_screen"`

      - `"adme"`

    - `cost_per_unit_usd: str`

      Estimated cost per displayed unit as a decimal string, rounded up to 4 decimal places. This may include token-size multipliers or generation overhead; estimated_cost_usd is the authoritative total.

    - `num_units: int`

      Number of billable units in the estimate. The unit depends on the endpoint: samples for structure-and-binding, molecules for ADME, and requested proteins or molecules for design/screen endpoints.

  - `disclaimer: str`

  - `estimated_cost_usd: str`

    Estimated total cost as a decimal string
