> ## Documentation Index
> Fetch the complete documentation index at: https://docs.capcells.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Adopt a policy version

> Name the Credit policy version the applications for one Configuration are decided under, and receive it back with the moment it was recorded.

This call records which policy version the applications naming one Configuration are decided under — a Platform pack, or one your Tenancy published and a second person confirmed. On a sandbox Tenancy the publisher's own confirmation is enough. Until you make it for a Configuration, nothing is adopted there and every application naming it is refused.

Adoption is per Configuration. You hold one adoption per product, and the same version may be adopted for several: a Tenancy selling payday at 300% and instalment at 60% judges the two books by two policies, because a policy whose approving bands fall inside one rate corridor falls outside the other.

Adopting is a statement, not a switch. The Platform records the moment; applications naming that Configuration submitted after it are decided under the version you named, and every Decision already recorded keeps the version it names.

<Info>
  Nothing is adopted by default or by silence. The policy you refuse your own clients under has to be one somebody at your company chose, and chose for that product.
</Info>

## Path parameters

<ParamField path="tenant_id" type="string" required>
  The Tenancy adopting. Another Tenancy's path answers `403`.
</ParamField>

<ParamField path="configuration_id" type="string" required>
  The Configuration this adoption governs. A Configuration your Tenancy does not have is refused naming it.
</ParamField>

## Body

<ParamField body="policy" type="string" required>
  A policy you may decide under, by name: a Platform pack such as `mx-base`, or one your Tenancy published. The list call answers both.
</ParamField>

<ParamField body="version" type="integer" required>
  One of that policy's versions, counting from 1. A version of your own that nobody has confirmed is refused.
</ParamField>

<ParamField body="enforce_bar" type="boolean" default="false">
  Whether the Platform holds the credit bar for this Configuration. With `true`, an application for a Client a recorded refusal bars on the day the application states is refused with `409 client_barred`, before any source is read. Nothing is recorded for it, so the bar does not restart. Omitted or `false`, the bar is answered and not enforced.
</ParamField>

## Response

<ResponseField name="configuration_id" type="string" required>
  The Configuration this adoption governs.
</ResponseField>

<ResponseField name="policy" type="string" required>
  The policy adopted.
</ResponseField>

<ResponseField name="version" type="integer" required>
  The version adopted.
</ResponseField>

<ResponseField name="enforce_bar" type="boolean" required>
  Whether the Platform holds the credit bar for this Configuration.
</ResponseField>

<ResponseField name="stated_at" type="string" required>
  RFC 3339 in UTC: the moment the Platform recorded the statement.
</ResponseField>

## Correcting an adoption

Adopt again for the same Configuration. The latest statement for that Configuration governs, and the one before it stays where it was — underneath, a correction is a further row rather than a rewritten one. An adoption for one Configuration never disturbs another's.

No call answers any adoption but the current one, per Configuration. What the earlier ones governed is readable through the Decisions that recorded them: each names the policy and version it was decided under, and that never moves.

## Refusals

This route reads no query parameter.

| Status | When |
| - | - |
| `400` | The body names a field this call does not read, or states one twice |
| `403` | The key authenticates for another Tenancy, or its scope is read-only |
| `422` | The body names a policy or a version you may not decide under: one nobody published, a number past the end, another Tenancy's policy, or a version of your own that nobody has confirmed |
| `422` | The path names a Configuration your Tenancy does not have |

A refused adoption changes nothing: the adoption you already hold for that Configuration still governs, so a mistyped version number does not stop you deciding.

<RequestExample>
  ```bash Adopt theme={null}
  BODY='{"policy":"mx-base","version":1,"enforce_bar":true}'

  curl -X PUT https://api.capcells.com/v1/tenants/capyplazo/credit-policy-adoption/1aa96dac-dd53-4462-9573-f2028dcab82d \
    -H "Authorization: $(capcells_sign "$CAPCELLS_API_KEY" PUT /v1/tenants/capyplazo/credit-policy-adoption/1aa96dac-dd53-4462-9573-f2028dcab82d "$BODY")" \
    -H "Content-Type: application/json" \
    -d "$BODY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "configuration_id": "1aa96dac-dd53-4462-9573-f2028dcab82d",
    "policy": "mx-base",
    "version": 1,
    "enforce_bar": true,
    "stated_at": "2026-08-29T11:30:21.363888Z"
  }
  ```

  ```json 422 Not published theme={null}
  {
    "error": "risk: unknown policy: \"eu-base\" is no policy this tenant may decide under; it may decide under [mx-base]",
    "code": "unknown_policy"
  }
  ```

  ```json 422 No such configuration theme={null}
  {
    "error": "risk: unknown product configuration: capyplazo has no configuration config-nobody-made, and an adoption for a product nobody configured would govern applications nothing can submit",
    "code": "no_configuration"
  }
  ```

  ```json 422 Not confirmed theme={null}
  {
    "error": "risk: the version is not confirmed: house-rules v1 was published by \"user_alice\" and no second person has confirmed it; one person alone does not put a policy into force over a tenant's own clients",
    "code": "unconfirmed"
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.