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

# Read a market's rules

> Every rule a term or a grant is refused under in a market — the penalty cap, the base, capitalisation, the late fee beside a penalty, acceleration, the taxes, the disclosure, the calendar and the facility window — each with whose rule it is and whether it is provisional.

The rules a Loan issued in a jurisdiction is held to, before a refusal teaches them to you. Each is read from the table the Platform enforces it from, so what this answers is what a refusal enforces — and when a reading moves, both move in the same release.

Every rule carries two marks:

| Mark | Values | What it says |
| - | - | - |
| `source` | `market`, `platform` | `market` is the jurisdiction's rule as the Platform reads it. `platform` is the Platform's own, the same in every market — the facility window |
| `provisional` | `true`, `false` | `true` where the rule is the Platform's own conservative reading, to be replaced by counsel's. Build on it as on any rule, and read it again after a release: the [changelog](/changelog) names a reading that moved |

The answer is the same under every Tenancy and reads nothing yours. It is addressed under a Tenancy so that the console and the API serve it alike.

## Path parameters

<ParamField path="tenant_id" type="string" required>
  The Tenancy asking. The answer does not depend on it.
</ParamField>

<ParamField path="jurisdiction" type="string" required>
  A country, `MX`, or a subdivision of one, `MX-JAL`. A subdivision with nothing of its own answers its country's rules. One the Platform supplies nothing for is `404` `not_found`, naming it — never a default.
</ParamField>

## Response

<ResponseField name="jurisdiction" type="string" required>
  As asked.
</ResponseField>

<ResponseField name="rules_of" type="string" required>
  Whose rules answered: the country, for a subdivision.
</ResponseField>

<ResponseField name="lending_supplied" type="boolean" required>
  Whether the Platform lends in the country at all. A market read only in part — `ES` has its tax read and nothing else — answers what is read and `false` here.
</ResponseField>

<ResponseField name="penalty_cap" type="object">
  The ceiling on a penalty rate, as its form: at an ordinary rate of `r`, `r × multiple + spread`. `multiple` is an exact `{numerator, denominator}`; `spread` and `at_zero_rate` are percentages. In `MX` the multiple is two and the spread zero, so a Loan at 30% caps its penalty at 60%, and a Loan at 0% admits a penalty rate of 0% — an interest-free product charges for lateness with a late fee. A preview or issuance above the cap is refused `penalty_rate_above_cap`, with the cap at the Loan's own rate in `details.bound`.
</ResponseField>

<ResponseField name="penalty_base" type="object">
  `base`: what a penalty accrues on — `overdue_principal`, the overdue period's own unpaid principal, or `outstanding_principal`.
</ResponseField>

<ResponseField name="capitalisation" type="object">
  `admitted`: whether unpaid interest, fees, tax and penalties may enter the penalty base.
</ResponseField>

<ResponseField name="late_fee_beside_penalty" type="object">
  `admitted`: whether a Loan may carry a late fee beside a penalty rate above zero. In `MX` it may not — one delay is charged once — and issuance refuses the pair `late_fee_beside_penalty`: a version charges lateness with one or the other.
</ResponseField>

<ResponseField name="acceleration" type="object">
  When a balance may be called: `forbidden`, `missed_periods` that must stand overdue, and `notice_days` of notice before it.
</ResponseField>

<ResponseField name="tax_rules" type="object">
  `rules`: the tax rules a Loan may bear, in the shape an issuance states `tax` in, the general case first — the same list the console's country registry answers. Issuance refuses any other.
</ResponseField>

<ResponseField name="disclosure" type="object">
  The convention a Loan's disclosure figure is computed under — `convention`, `version`, `status` — as the figure on a Loan issued today names it. `provisional` follows `status`.
</ResponseField>

<ResponseField name="calendar" type="object">
  `horizon`: the last civil date the market's calendar covers. A schedule reaching past it is refused `beyond_horizon`, with this date in `details.bound`. It moves out with releases, and is data rather than a reading of law, so it is never provisional.
</ResponseField>

<ResponseField name="facility_window" type="object" required>
  The Platform's own bound, the same in every market: `days` from the granting decision's day a one-draw Facility may stay drawable, `line_days` for a line, each with its `basis`. A window past it is refused `outside_window_bound`, with the bound in `details.bound`.
</ResponseField>

A rule the Platform supplies nothing for in the market is absent rather than empty. Any query parameter on this route answers `400`: the route reads none.

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

<ResponseExample>
  ```json 200 (bases abridged) theme={null}
  {
    "jurisdiction": "MX",
    "rules_of": "MX",
    "lending_supplied": true,
    "penalty_cap": {
      "multiple": { "numerator": 2, "denominator": 1 },
      "spread": "0",
      "at_zero_rate": "0",
      "source": "market",
      "provisional": true
    },
    "penalty_base": { "base": "overdue_principal", "source": "market", "provisional": true },
    "capitalisation": { "admitted": false, "source": "market", "provisional": true },
    "late_fee_beside_penalty": { "admitted": false, "source": "market", "provisional": true },
    "acceleration": { "forbidden": false, "missed_periods": 3, "notice_days": 15, "source": "market", "provisional": true },
    "tax_rules": {
      "rules": [
        { "rate": "16", "on": ["interest", "fee", "penalty", "late_fee"] },
        { "rate": "8", "on": ["interest", "fee", "penalty", "late_fee"] },
        { "rate": "0", "on": ["interest", "fee", "penalty", "late_fee"] }
      ],
      "source": "market",
      "provisional": true
    },
    "disclosure": { "convention": "mx-cat", "version": 1, "status": "provisional", "source": "market", "provisional": true },
    "calendar": { "horizon": "2030-12-25", "source": "market", "provisional": false },
    "facility_window": {
      "days": 30,
      "basis": "thirty days is the precedent's length without the precedent's re-check: …",
      "line_days": 180,
      "line_basis": "a line is drawable for at most a hundred and eighty days because …",
      "source": "platform",
      "provisional": true
    }
  }
  ```

  ```json 404 theme={null}
  {
    "error": "the platform supplies no rule for \"FR\": no penalty rule, tax rule, disclosure convention or calendar is supplied for it or the country it sits in",
    "code": "not_found",
    "retry": "after_change",
    "request_id": "…"
  }
  ```
</ResponseExample>


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