---
title: "Quote an analysis batch"
method: POST
path: "/api/v1/analysis-batch-quotes"
tags: ["Batches"]
---

# Quote an analysis batch

`POST /api/v1/analysis-batch-quotes`

## Request

- Base URL: `https://app.probbai.com`
- URL: `https://app.probbai.com/api/v1/analysis-batch-quotes`
- Auth: HTTP bearer

Review per-item prices and fingerprints before creating an analysis batch. Use this to separate items ready for submission from items that need attention.

## Before you call

Send 1–20 quote inputs with unique itemKey values. Each item follows the same prerequisites as a single quote.

**Required scope:** `analyses:write`.

## What happens next

Only items with a non-null quote are ready to include in a submission. total is informational; admissionGuaranteed is always false. Quoting reserves neither capacity nor allowance.

## Recovery

Inspect each errorCode and correct that item before quoting again. Include the returned fingerprint in each admitted item; do not use the aggregate total as authorization for a batch.

[Follow the complete workflow](/integration-bulk/) · [Errors and retries](/api-errors/)

## Request body

- AnalysisBatchQuoteInput
  - `items` object[], required: Page or batch entries. An empty list is valid; use the cursor or individual item states to decide what happens next.
    - `itemKey` string, required: Your unique identifier within this batch, used to match each outcome to its input. It is not the HTTP idempotency key.
    - `input` object, required: The request for this individual batch item, using the corresponding single-operation fields.
      - `reportId` string, required: Report ID returned by upload preparation, admission, discovery, or an event. It must belong to the API key's workspace.

## Response `200`

Only items with a non-null quote are ready to include in a submission. total is informational; admissionGuaranteed is always false. Quoting reserves neither capacity nor allowance.

- object
  - `data` AnalysisBatchQuote, required
    - `total` object, required: Informational aggregate across successfully quoted items. Each submission is still checked independently.
      - `creditUnits` integer, required: Applicable price in integer units for the assigned configuration. This is a quote, not a reservation; example prices are illustrative.
      - `creditScale` integer, required: Number of integer units per displayed credit. Divide creditUnits by this value; use the scale returned by the API.
      - `quotedItems` integer, required: Number of items successfully quoted; excludes items with errors.
      - `failedItems` integer, required: Number of items that could not be quoted; their quote is null and errorCode explains why.
      - `admissionGuaranteed` false, required: Always false: a quote reserves neither capacity nor allowance.
    - `items` object[], required: Page or batch entries. An empty list is valid; use the cursor or individual item states to decide what happens next.
      - `itemKey` string, required: Your unique identifier within this batch, used to match each outcome to its input. It is not the HTTP idempotency key.
      - `quote` object, nullable, required: This item's quote, or null when quoting failed. Copy its fingerprint into the matching submission item.
        - `reportId` string, required: Report ID returned by upload preparation, admission, discovery, or an event. It must belong to the API key's workspace.
        - `reportSystemVersion` string, required: Assigned report version used by the quote or analysis. Can be null for a legacy report.
        - `creditUnits` integer, required: Applicable price in integer units for the assigned configuration. This is a quote, not a reservation; example prices are illustrative.
        - `creditScale` integer, required: Number of integer units per displayed credit. Divide creditUnits by this value; use the scale returned by the API.
        - `fingerprint` string, required: Opaque quote fingerprint. Copy it unchanged into quoteFingerprint on the corresponding submission.
      - `errorCode` string, nullable, required: Reason this item failed. Null when no item error is present; inspect item state too.

## Other responses

- `400`: Invalid input or cursor
- `401`: Invalid, expired, or revoked API key
- `403`: Disabled organisation or missing scope
- `405`: Method not allowed; consult Allow for supported methods
- `429`: Request limit exceeded
- `500`: Unexpected failure
- `503`: Service unavailable

---

[API](https://skmtc.dev/probbai/apis/probb-ai-customer-api.md) · [All operations](https://skmtc.dev/probbai/apis/probb-ai-customer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/probbai/apis/probb-ai-customer-api/revisions/33a3294530e4?raw)
