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

# RFI values

> Every value set an RFI field accepts or returns, and what each value means.

The values each enumerated field on a request for information takes.

## `status`

Where the request itself is. Only the last two are endings.

| Value          | Description                                                                                                                            |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `pending`      | Something is outstanding and the request is waiting on you.                                                                            |
| `answered`     | An answer has been given and is being assessed. It can return to `pending` if the answer is not accepted.                              |
| `resolved`     | Satisfied. Whatever it was blocking is unblocked. It is a decision on the whole request, never inferred from its items being answered. |
| `not_resolved` | Closed without being satisfied. `resolution_reason` says which.                                                                        |

## `resolution_reason`

Why a request closed unsatisfied. `null` on any request that has not.

| Value      | Description                                                    |
| ---------- | -------------------------------------------------------------- |
| `expired`  | The request was not answered before its `due_at`.              |
| `rejected` | The answer given was not accepted, and the request was closed. |

## item `status`

Where one item is. An item has no closed states of its own — the request carries those.

| Value      | Description                       |
| ---------- | --------------------------------- |
| `pending`  | This item is outstanding.         |
| `answered` | This item has an answer recorded. |

## `answer_type`

What an item is asking for, and therefore what a valid answer looks like. `answer_spec` on the item carries the rules for that type.

<Accordion title="View the 9 answer types">
  | Value        | Description                                                                             |
  | ------------ | --------------------------------------------------------------------------------------- |
  | `text_short` | A single line of text.                                                                  |
  | `text_long`  | A longer free-text answer.                                                              |
  | `number`     | A numeric answer.                                                                       |
  | `date`       | A date.                                                                                 |
  | `boolean`    | Yes or no.                                                                              |
  | `choice`     | One value from a fixed set the item names.                                              |
  | `identifier` | An identifying number, such as a registration or tax identifier.                        |
  | `document`   | One or more files, uploaded to the item rather than sent as an answer value.            |
  | `ubo_link`   | A person has to verify themselves. Mint a link for them rather than answering directly. |
</Accordion>

## `answer_spec` by answer type

The item carries an `answer_spec` holding the rules its answer is validated against. Which keys it holds is fixed by the `answer_type`.

| `answer_type`              | Keys                                       | What they mean                                                                                                 |
| -------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
| `text_short` / `text_long` | `max_length`, `format`                     | Without `max_length`, the ceiling is 255 characters for `text_short` and 10000 for `text_long`.                |
| `number`                   | `min`, `max`, `unit`                       | `unit` is a label such as `months`, not a validation rule.                                                     |
| `date`                     | `min_age`                                  | The answer must be that many full years ago or earlier, counted in UTC. A date of birth carries `min_age: 18`. |
| `boolean`                  | —                                          | No keys.                                                                                                       |
| `choice`                   | `options`                                  | Always present and never empty. The answer must be one of them exactly, so render it as a selector.            |
| `identifier`               | `format`                                   | One of the named formats below.                                                                                |
| `document`                 | `mime_types`, `max_files`, `document_type` | `document_type` is present only when a specific document is being asked for. Render it as what to send.        |
| `ubo_link`                 | `url`, or `applicant_id` and `person_id`   | Two shapes — see below.                                                                                        |

### The two `ubo_link` shapes

Tell them apart by which keys are present:

| Keys present                             | What to do                                                                                                                      |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `url`                                    | A ready-made link. Render it as it is; there is nothing else to do.                                                             |
| `applicant_id` and `person_id`, no `url` | Mint a link on demand with [Mint a beneficiary's verification link](/api-reference/rfis/mint-a-beneficiarys-verification-link). |

<Warning>
  A minted link is short-lived. Mint it when the person clicks rather than when the page renders, and never cache one.
</Warning>

### The named formats

Used by `format` on a text or identifier item.

| Format           | Accepts                                                                                                                         |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `ein`            | Nine digits, hyphenated or not.                                                                                                 |
| `ssn`            | Nine digits, hyphenated or not.                                                                                                 |
| `email`          | An address with a domain.                                                                                                       |
| `e164`           | A phone in E.164, country code first — `+14155551234`. The looser forms accepted when you create a sub-client are refused here. |
| `url`            | An `http` or `https` address with a domain.                                                                                     |
| `country_alpha3` | An ISO 3166-1 alpha-3 code in upper case — `USA`, `COL`. An alpha-2 code is refused.                                            |

A new named format is data on the item, not a change to this contract.

## `blocking` type

What the request is anchored to. `null` when it is about the sub-client itself rather than one movement.

| Value      | Description                        |
| ---------- | ---------------------------------- |
| `transfer` | A payout is held by this request.  |
| `deposit`  | A deposit is held by this request. |

There is no virtual-account anchor: a request never names which account is blocked.
