---
title: "Pbo"
method: POST
path: "/v1/pbo"
---

# Pbo

`POST /v1/pbo`

## Request

- Base URL: `https://api.alphaassay.com`
- URL: `https://api.alphaassay.com/v1/pbo`
- Auth: HTTP bearer

## Headers

- `Idempotency-Key` string, nullable

## Request body

- PboRequest: T x N trial matrix: rows = time-ordered periods, columns = configs. The caps mirror ats_mcp.pbo_assay (MAX_ROWS/MAX_CONFIGS); the engine additionally fails closed on its compute budget, so an accepted body can still earn a blocked report -- that is a verdict, not an input error.
  - `returns_matrix` array[], required
    - number[]
  - `n_groups` integer
  - `purge` integer
  - `embargo` integer
  - `periods_per_year` number

## Response `200`

Successful Response

- PboOutput
  - `_meta` PublicMeta, required
    - `engine_version` string, required
    - `api_version` string, required
    - `as_of` string, date-time, required
    - `input_digest` string, required
    - `request_digest` string, required
    - `tenant_scope` string, required
    - `tenant_scope_version` string, required
    - `request_id` string, nullable, required
    - `source_identity_digest` string, required
    - `operation` string, required
    - `statefulness` 'pure' | 'public_read' | 'tenant_read' | 'tenant_write', required
    - `not_financial_advice` true, required
    - `disclaimer` string, required
  - `method` 'CSCV_combinatorial_pbo_purged_embargoed', required
  - `status` 'blocked' | 'computed', required
  - `verdict` 'pass' | 'fail' | 'insufficient_evidence', required
  - `pbo` union, required
    - integer
    - number
  - `pbo_high_threshold` union, required
    - integer
    - number
  - `n_groups` integer, required
  - `purge` integer, required
  - `embargo` integer, required
  - `periods_per_year` union, required
    - integer
    - number
  - `died_at` string, nullable, required
  - `died_at_plain` string, nullable, required
  - `failure_codes` string[], required
  - `degradation` PboDegradation, required
    - `slope` union, required
      - integer
      - number
    - `intercept` union, required
      - integer
      - number
    - `prob_oos_loss` union, required
      - integer
      - number
    - `n_pairs` integer, required
    - `interpretation` string, required
  - `stochastic_dominance` PboStochasticDominance, required
    - `first_order` 'selected_dominates' | 'pool_dominates' | 'none', required
    - `max_cdf_gap_pool_over_selected` union, required
      - integer
      - number
    - `max_cdf_gap_selected_over_pool` union, required
      - integer
      - number
    - `n_selected` integer, required
    - `n_pool` integer, required
    - `interpretation` string, required
  - `reason` string, nullable
  - `overfit_flag` boolean, nullable
  - `mean_logit` union
    - integer
    - number
  - `n_rows` integer, nullable
  - `n_configs` integer, nullable
  - `n_splits` integer, nullable
  - `n_evaluated_splits` integer, nullable
  - `n_blocked_splits` integer, nullable
  - `interpretation` string, nullable

## Other responses

- `401`: Request could not be completed
- `402`: Request could not be completed
- `403`: Request could not be completed
- `409`: Request could not be completed
- `413`: Request could not be completed
- `422`: Request could not be completed
- `429`: Request rate limit exceeded
- `500`: Internal execution failure
- `503`: Request could not be completed

---

[API](https://skmtc.dev/alphaassay/apis/alphaassay-api.md) · [All operations](https://skmtc.dev/alphaassay/apis/alphaassay-api/llms.txt) · [OpenAPI document](https://skmtc.dev/alphaassay/apis/alphaassay-api/revisions/cdbc99b01a7e?raw)
