---
title: "Resolve many catalog prices"
method: POST
path: "/companies/{company}/price-lists/resolve-many"
tags: ["Price Lists"]
---

# Resolve many catalog prices

`POST /companies/{company}/price-lists/resolve-many`

## Request

- Base URL: `https://api.factuarea.com/v1`
- URL: `https://api.factuarea.com/v1/companies/{company}/price-lists/resolve-many`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Reprice a whole document in one request: resolve up to 100 catalog selections and compare each with the line's `current_unit_price`.
- A read that persists nothing; POST only because the selections do not fit in a query string.
- An unresolvable target is reported under its own index (`targets.<n>`) instead of failing the batch.

## Path parameters

- `company` string, uuid, required

## Headers

- `Factuarea-Version` string, date

## Request body

- ResolveManyCatalogPricesRequest
  - `price_list_id` string, uuid, nullable
  - `targets` object[], required
    - `product_id` string, uuid, required
    - `variant_id` string, uuid, nullable, required
    - `presentation_id` string, uuid, nullable, required
    - `current_unit_price` number, nullable, required
    - `configuration_id` string, uuid, nullable, required
    - `selection_signature` string, nullable, required
    - `option_value_ids` string[], nullable, required

## Response `200`

- object
  - `data` ResolvedCatalogPricePreview[], required: Prices resolved for the batch, one per selection sent. The order is not part of the contract: pair them by `index`.
    - `object` 'resolved_catalog_price_preview', required
    - `index` integer, required: Position of the selection in `targets`. It is what pairs each price with its line without depending on the order of the response.
    - `product_id` string, uuid, required
    - `variant_id` string, uuid, nullable, required
    - `presentation_id` string, uuid, nullable, required
    - `configuration_id` string, uuid, nullable, required
    - `selection_signature` string, nullable, required
    - `price_list_id` string, uuid, nullable, required
    - `price_list_name` string, nullable, required
    - `unit_price` string, required
    - `currency` string, required
    - `price_unit` string, required
    - `base_unit` string, required
    - `source` 'price_list' | 'variant' | 'product' | 'manual' | 'supplier_offer' | 'pack_snapshot', required
    - `unit_semantics` 'per_base_unit' | 'per_commercial_unit' | 'null', nullable, required: Semantics of the amount of the winning source. `per_base_unit` is converted once by the factor of the presentation; `per_commercial_unit` is never converted.
    - `source_amount` string, nullable, required: Amount of the winning source, already converted to `price_unit` and BEFORE the option adjustments: `source_amount + option_adjustment_total = unit_price`.
    - `option_adjustment_total` string, nullable, required: Sum of the adjustments of the chosen option values, per commercial unit.
    - `option_adjustments_absorbed` boolean, nullable, required: Whether the winning source already included the option adjustments. `null` means the resolver did not take a position, never `false`.
    - `current_unit_price` string, nullable, required: Unit price the line has frozen today, as it was sent.
    - `changed` boolean, nullable, required: `null` when `current_unit_price` was not sent: without it there is nothing to compare.
    - `difference` string, nullable, required: `unit_price - current_unit_price`. `null` when `current_unit_price` was not sent.

## Other responses

- `400`: `parameter_unknown` with `subcode` `retired_active_profile_header`: the retired `X-Active-Profile` header was sent; the company goes in the path. `parameter_invalid_format` on `Factuarea-Version`: the header is not a `YYYY-MM-DD` date. `unsupported_api_version`: the `Factuarea-Version` date is not a supported version.
- `401`: Missing or invalid API key.
- `403`: The request is authenticated but not allowed: the API key lacks the required scope (`insufficient_scope`), the plan does not include the public API or this feature (`addon_not_active`, `feature_not_available_in_plan`), or the module is not available with a test key (`module_not_available_in_sandbox`).
- `404`: The requested resource does not exist or belongs to another company. `profile_not_found`: the company in the path does not exist, is not in the API key scope or belongs to the other environment (live or test).
- `422`: Validation failed. The `error.param` field identifies which input is invalid.
- `429`: Rate limit exceeded. Retry after the duration in `Retry-After`.
- `500`: Unexpected server error.

---

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