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

> Every credit source the platform can consult for the tenancy, each with its contract: what it needs, what it answers, what a failure does.

A **Source** is somewhere a credit decision's inputs can come from — the Platform's own book, or an external bureau consulted as your instrument. The listing is the catalogue with each Source's whole contract on it, so a caller learns what a consultation needs and costs before making one. [Credit sources](/lending/credit-sources) and [Círculo de Crédito](/lending/circulo) carry the model.

This route reads no query parameter.

## Path parameters

<ParamField path="tenant_id" type="string" required>
  The Tenancy asking.
</ParamField>

## Response

<ResponseField name="sources" type="array" required>
  The catalogue.

  <Expandable title="source">
    <ResponseField name="name" type="string" required>
      The Source's stable name — `platform_book`, `circulo_rcc`.
    </ResponseField>

    <ResponseField name="enabled" type="boolean" required>
      Whether the Tenancy can consult it now. An external Source is enabled by custody of your credentials, not by appearing here.
    </ResponseField>

    <ResponseField name="daily_bound" type="integer">
      How many consultations a day your enablement allows. Present on an enabled Source; the bound a spent one refuses under `source_quota_spent`.
    </ResponseField>

    <ResponseField name="stated_by" type="string">
      Who enabled or disabled it last. Present once anybody has.
    </ResponseField>

    <ResponseField name="stated_at" type="string">
      When. Present beside `stated_by`.
    </ResponseField>

    <ResponseField name="discharges_a_prohibition" type="boolean" required>
      Whether reading this Source is what discharges a legal prohibition on lending without it. Such a Source cannot be declared `proceed_and_record` or `retry` on failure.
    </ResponseField>

    <ResponseField name="transport" type="string" required>
      `in_process` — the Platform's own data — or `network`, a call out under your standing.
    </ResponseField>

    <ResponseField name="needs_credential" type="boolean" required>
      Whether consultations run under credentials you place in custody.
    </ResponseField>

    <ResponseField name="needs_consent" type="boolean" required>
      Whether the borrower's authorisation must be held before a consultation.
    </ResponseField>

    <ResponseField name="identity_any_of" type="array">
      Alternatives among the identity fields: each inner list is one set that suffices, where the Source accepts more than one way of naming a person. Absent where `identity_required` is the whole rule.
    </ResponseField>

    <ResponseField name="identity_required" type="array" required>
      The identity fields a consultation must carry — the Platform stores none of them, so each consultation states them.
    </ResponseField>

    <ResponseField name="returns" type="array" required>
      The attributes the Source answers, by name — what a credit policy can read from it.
    </ResponseField>

    <ResponseField name="failure_posture" type="string" required>
      What a failed consultation does to the decision that needed it.
    </ResponseField>

    <ResponseField name="failure_vocabulary" type="array">
      The failures the Source distinguishes, each with `retryable` and `answered` — `subject_not_found` is an answer, not an outage.
    </ResponseField>

    <ResponseField name="cost_unit" type="string" required>
      What one consultation spends — `consulta` at the bureau, `none` on the Platform's own book.
    </ResponseField>
  </Expandable>
</ResponseField>

## Refusals

This route reads no query parameter.

| Status | Code | When |
| - | - | - |
| `400` | `invalid_query` | The query carries any parameter at all — this route answers one question and takes none |
| `403` | `not_permitted_tenant` | The credential authenticates for another Tenancy |
| `429` | `rate_limited` | Your request bounds are exhausted. `Retry-After` says when to return |

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

<ResponseExample>
  ```json 200 theme={null}
  {
    "sources": [
      {
        "name": "platform_book",
        "failure_posture": "proceed_and_record",
        "discharges_a_prohibition": false,
        "transport": "in_process",
        "needs_credential": false,
        "needs_consent": false,
        "identity_required": [],
        "returns": ["loans_repaid", "loans_defaulted"],
        "cost_unit": "none",
        "enabled": false
      },
      {
        "name": "circulo_rcc",
        "failure_posture": "retry",
        "discharges_a_prohibition": false,
        "transport": "network",
        "needs_credential": true,
        "needs_consent": true,
        "identity_required": [
          "given_name", "first_surname", "second_surname", "birth_date", "rfc",
          "address", "address_colonia", "address_municipio", "address_city",
          "address_state", "address_postal_code"
        ],
        "failure_vocabulary": [
          { "name": "unreachable", "retryable": true, "answered": false },
          { "name": "source_refused_lookup", "retryable": false, "answered": false },
          { "name": "credentials_rejected", "retryable": false, "answered": false },
          { "name": "subject_not_found", "retryable": false, "answered": true }
        ],
        "returns": ["open_account_delays", "months_of_history", "inquiries_last_12m"],
        "cost_unit": "consulta",
        "enabled": false
      }
    ]
  }
  ```
</ResponseExample>


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