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

# Resolve a catalog price

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

## Request

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

Resolve the effective catalog price of a complete selection (product, variant, presentation, combination, `option_value_ids`) under an optional price list.
- No amount is ever accepted in the payload; prices come from the catalog.
- The response carries the breakdown (`source_amount`, `option_adjustment_total`) to detect double charges.

## Path parameters

- `company` string, uuid, required

## Headers

- `Factuarea-Version` string, date

## Request body

- ResolveCatalogPriceRequest
  - `price_list_id` string, uuid, nullable
  - `product_id` string, uuid, required
  - `variant_id` string, uuid, nullable
  - `presentation_id` string, uuid, nullable
  - `configuration_id` string, uuid, nullable
  - `selection_signature` string, nullable
  - `option_value_ids` string[], nullable

## Response `200`

- object
  - `data` ResolvedCatalogPrice, required
    - `object` 'resolved_catalog_price', required
    - `product_id` string, uuid, required
    - `variant_id` string, uuid, nullable, required
    - `presentation_id` string, uuid, nullable, required
    - `configuration_id` string, uuid, nullable, required: Commercial combination against which the price was resolved. It may be present even when the request sent only the signature: a signature that matches a materialized combination is normalized to its identity before pricing.
    - `selection_signature` string, nullable, required: Canonical signature (64 hexadecimal characters) of the resolved selection.
    - `price_list_id` string, uuid, nullable, required: Price list CONSULTED, not necessarily the source of the price: it is present even when `source` is `product`. To know where the amount came from, look at `source`.
    - `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`.

## 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)
