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

# List the policies

> Read every Credit policy you may decide under — the Platform's packs and your own — with each version's number, digest and provenance.

This call answers what there is to adopt: the Credit policies the Platform publishes and the ones this Tenancy has published for itself, each version carrying the digest of its content and who published it.

It is not narrowed to what you have adopted — choosing what to adopt needs the whole set in front of you. It is narrowed to you absolutely: another Tenancy's policies appear nowhere in it.

An unconfirmed version of your own is listed as what it is. The person who has to confirm it must be able to find it.

<Info>
  You author your own versions at the Console, not here. This door reads; publishing and confirming are signed by named people and are served at the Console door alone.
</Info>

## Path parameters

<ParamField path="tenant_id" type="string" required>
  The Tenancy asking. 1–64 characters of `a–z A–Z 0–9 - _`. A key authenticates for one Tenancy and the path names it; another Tenancy's path answers `403`.
</ParamField>

## Response

<ResponseField name="policies" type="array" required>
  Every published policy.

  <Expandable title="policy">
    <ResponseField name="name" type="string" required>
      The policy's name. `mx-base` is the pack the Platform ships for the Mexican market; a policy you published carries the name you gave it, which may never be a pack's.
    </ResponseField>

    <ResponseField name="versions" type="array" required>
      Its versions, numbered consecutively from 1. A version is never dropped: a Decision references the version it was decided under, and that reference resolves for the life of the Decision.

      <Expandable title="version">
        <ResponseField name="version" type="integer" required>
          The version number, counting from 1.
        </ResponseField>

        <ResponseField name="digest" type="string" required>
          A 64-character hexadecimal digest of everything that decides under this version: the attributes it reads with their bounds, every knockout with its bound, every scorecard entry with its bands and points, and every cutoff band with its outcome, rate and ceiling.

          A version number is a label; a digest is a fact about content, and only the second can be checked. Every Decision records the digest beside the number.
        </ResponseField>

        <ResponseField name="author" type="string" required>
          `platform` for a pack, `tenant` for a version you published.
        </ResponseField>

        <ResponseField name="confirmed" type="boolean" required>
          Whether the version may be adopted. A pack is always `true` — it is published by release, which is its own second pair of eyes. One of yours is `true` once a second person has confirmed it, or on a sandbox Tenancy once its publisher has.
        </ResponseField>

        <ResponseField name="self_confirmed" type="boolean" required>
          `true` when the person who published the version also confirmed it, which only a sandbox Tenancy permits. `false` on a pack and on a version a second person confirmed.
        </ResponseField>

        <ResponseField name="published_by" type="string">
          The person who published it, as your identity provider names them. Absent on a pack.
        </ResponseField>

        <ResponseField name="published_at" type="string">
          When, as an RFC 3339 moment. Absent on a pack.
        </ResponseField>

        <ResponseField name="confirmed_by" type="string">
          Who confirmed: the second person, or on a sandbox possibly the publisher. Absent until there is one, and on a pack.
        </ResponseField>

        <ResponseField name="confirmed_at" type="string">
          When they confirmed. Absent until there is one, and on a pack.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

## Refusals

This route reads no query parameter and takes no body.

| Status | When |
| - | - |
| `400` | The URL carries a query parameter, which this route does not read |
| `403` | The key authenticates for another Tenancy |

A read-scoped key is enough.

<RequestExample>
  ```bash List theme={null}
  curl https://api.capcells.com/v1/tenants/capyplazo/credit-policies \
    -H "Authorization: $(capcells_sign "$CAPCELLS_API_KEY" GET /v1/tenants/capyplazo/credit-policies)"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "policies": [
      {
        "name": "house-rules",
        "versions": [
          {
            "version": 1,
            "digest": "0c3924dce565bc58a4f4e45ce2e049f6a0906ddf2fd16c49d996a338baba5598",
            "author": "tenant",
            "confirmed": true,
            "self_confirmed": false,
            "published_by": "user_alice",
            "published_at": "2026-08-24T12:00:01Z",
            "confirmed_by": "user_bob",
            "confirmed_at": "2026-08-24T12:00:02Z"
          }
        ]
      },
      {
        "name": "mx-base",
        "versions": [
          {
            "version": 1,
            "digest": "498e17408e74013e84c500e261fa7bc3f22a51a721c7c1540e1b5b755ad85cab",
            "author": "platform",
            "confirmed": true,
            "self_confirmed": false
          }
        ]
      }
    ]
  }
  ```

  ```json 400 Query parameter theme={null}
  {
    "error": "reading the request: this route does not read the parameter \"policy\"",
    "code": "invalid_query"
  }
  ```
</ResponseExample>


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