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

# Leer solicitudes de información

> Lista las solicitudes de información abiertas de un cliente con openRfis, o lee una RFI con rfi: su estado, preguntas y respuestas guardadas.

## Descripción general

Dos queries leen las solicitudes de información (RFI):

* **`openRfis`** lista todas las RFI de la cuenta del token que están esperando las respuestas del cliente. Úsala para decidir si mostrar un aviso de RFI.
* **`rfi`** lee una RFI por ID, en cualquier estado. Úsala para mostrar un formulario que ya encontraste, o para verificar el resultado después de enviar.

Ambas devuelven el mismo tipo `Rfi`. Consulta la [descripción general de RFI](https://docs.fluz.app/rfi-overview) para conocer el flujo y los tipos de pregunta.

## Scopes requeridos

| Propiedad | Valor |
| - | - |
| Endpoint | GraphQL API |
| Autenticación | OAuth Bearer Token. No se acepta autenticación básica |
| Scopes requeridos | `MANAGE_RFI` |

El cliente se toma del token. El `accountId` del token debe ser la cuenta a la que pertenece la RFI, y su usuario debe ser el destinatario de la cuenta: el propietario de una cuenta de consumidor, o el **solicitante** de una cuenta empresarial. Consulta [Quién puede responder una RFI](https://docs.fluz.app/rfi-overview#who-can-answer-an-rfi).

## openRfis

```graphql theme={null}
query OpenRfis {
  openRfis {
    rfiId
    status
    introText
    expiresAt
    createdAt
    updatedAt
    questions {
      questionId
      questionType
      isOptional
      question
      helperText
      options
      visibilityCondition
      keepSamePage
      ordinal
      isSubmitted
      answer
    }
  }
}
```

Devuelve `[Rfi!]!`: las RFI de la cuenta del token con estado `PENDING_DOCUMENTS` que no han expirado, de la más reciente a la más antigua. Devuelve `[]` cuando no hay ninguna.

Las RFI que están `IN_REVIEW` o finalizadas no aparecen en esta lista. Léelas con `rfi`.

## rfi

```graphql theme={null}
query Rfi($rfiId: UUID!) {
  rfi(rfiId: $rfiId) {
    rfiId
    status
    introText
    expiresAt
    questions {
      questionId
      questionType
      isOptional
      question
      helperText
      options
      visibilityCondition
      ordinal
      isSubmitted
      answer
    }
  }
}
```

### Argumentos

| Argumento | Tipo | Requerido | Descripción |
| - | - | - | - |
| `rfiId` | `UUID!` | Sí | La RFI que se va a leer |

Devuelve la RFI en cualquier estado. Las preguntas se incluyen solo mientras está en `PENDING_DOCUMENTS`; de lo contrario, `questions` es `[]`.

## Detalles de la respuesta

### Rfi

| Campo | Tipo | Descripción |
| - | - | - |
| `rfiId` | `UUID!` | El ID de la RFI. Pásalo al endpoint de carga, a `submitRfi` y a `completeRfiPlaidLink` |
| `status` | `RfiStatus!` | Consulta [Ciclo de vida del estado de la RFI](https://docs.fluz.app/rfi-overview#rfi-status-lifecycle) |
| `introText` | `String` | Explicación escrita por Fluz para el cliente. Muéstrala encima de las preguntas |
| `expiresAt` | `DateTime` | Cuándo la RFI deja de aceptar respuestas. `null` cuando no tiene vencimiento |
| `createdAt` | `DateTime` | Cuándo se creó la RFI |
| `updatedAt` | `DateTime` | Cuándo cambió la RFI por última vez |
| `questions` | `[RfiQuestion!]!` | Las preguntas de la ronda actual. Vacío a menos que `status` sea `PENDING_DOCUMENTS` |

### RfiQuestion

| Campo | Tipo | Descripción |
| - | - | - |
| `questionId` | `String!` | ID estable. Úsalo como `questionId` al cargar archivos y responder |
| `questionType` | `RfiQuestionType!` | El tipo de entrada que espera la pregunta. Consulta [Tipos de pregunta](https://docs.fluz.app/rfi-overview#question-types) |
| `isOptional` | `Boolean!` | `false` cuando la pregunta debe responderse antes de poder finalizar la RFI |
| `question` | `String!` | El texto de la pregunta |
| `helperText` | `String` | Orientación adicional, como qué documentos se aceptan |
| `options` | `[String!]` | Valores permitidos para `DROPDOWN`, `SINGLE_CHECKBOX` y `MULTIPLE_CHECKBOX` |
| `visibilityCondition` | `JSON` | Cuando está definida, la pregunta aplica solo si se cumple la condición sobre respuestas anteriores. Consulta [Preguntas condicionales](https://docs.fluz.app/rfi-overview#conditional-questions) |
| `keepSamePage` | `Boolean` | Sugerencia de diseño: mantener esta pregunta en la misma página que la anterior |
| `ordinal` | `Int!` | Orden de visualización. Muestra las preguntas en orden ascendente de `ordinal` |
| `isSubmitted` | `Boolean!` | `true` una vez que la pregunta tiene una respuesta guardada. Una respuesta guardada no se puede cambiar |
| `answer` | `JSON` | La respuesta guardada, si existe (ver más abajo) |

### Respuestas guardadas

| Pregunta respondida con | `answer` |
| - | - |
| Texto, número, fecha o una sola opción | El valor tal como se envió, por ejemplo `"Acme Holdings LLC"` |
| Varias opciones | Una lista de cadenas |
| Archivos | Una lista de `{ "fileName": "...", "url": "..." }`. `fileName` es el nombre con el que se cargó el archivo. `url` es donde Fluz almacena el archivo y no es un enlace de descarga público: muestra `fileName` al cliente |
| Un enlace bancario de Plaid | `{ "type": "PLAID_BANK_LINK", "institutionName": "...", "accounts": [...], "linkedAt": "...", "identityMatchStatus": "..." }` |

Usa `isSubmitted` para mostrar las preguntas respondidas como de solo lectura y excluirlas de tu siguiente llamada a `submitRfi`.

## Ejemplo de cURL

```bash theme={null}
curl -X POST https://transactional-graph.staging.fluzapp.com/api/v1/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -d '{
    "query": "query OpenRfis { openRfis { rfiId status introText expiresAt questions { questionId questionType isOptional question helperText options visibilityCondition ordinal isSubmitted answer } } }"
  }'
```

## Ejemplo de respuesta

```json theme={null}
{
  "data": {
    "openRfis": [
      {
        "rfiId": "7c1e2a90-4b3d-4f6e-9a18-3d5b2c7e8f01",
        "status": "PENDING_DOCUMENTS",
        "introText": "We need a few more details to finish reviewing your business.",
        "expiresAt": "2026-12-01T05:00:00.000Z",
        "questions": [
          {
            "questionId": "q_formation",
            "questionType": "MULTI_UPLOAD",
            "isOptional": false,
            "question": "Upload your articles of incorporation or organization.",
            "helperText": "PDF or image. Include every page.",
            "options": null,
            "visibilityCondition": null,
            "ordinal": 1,
            "isSubmitted": false,
            "answer": null
          },
          {
            "questionId": "q_address",
            "questionType": "ADDRESS_VERIFICATION_OR_DOCUMENT",
            "isOptional": false,
            "question": "Verify your business address.",
            "helperText": "Link the business bank account, or upload a utility bill or bank statement from the last 90 days.",
            "options": null,
            "visibilityCondition": null,
            "ordinal": 2,
            "isSubmitted": false,
            "answer": null
          },
          {
            "questionId": "q_source_of_funds",
            "questionType": "DROPDOWN",
            "isOptional": false,
            "question": "What is the main source of funds for this account?",
            "helperText": null,
            "options": ["Business revenue", "Owner investment", "Loan or financing", "Other"],
            "visibilityCondition": null,
            "ordinal": 3,
            "isSubmitted": false,
            "answer": null
          },
          {
            "questionId": "q_source_of_funds_other",
            "questionType": "SINGLE_LINE_TEXT",
            "isOptional": false,
            "question": "Describe the source of funds.",
            "helperText": null,
            "options": null,
            "visibilityCondition": {
              "kind": "PREDICATE",
              "questionId": "q_source_of_funds",
              "operator": "EQ",
              "value": "Other"
            },
            "ordinal": 4,
            "isSubmitted": false,
            "answer": null
          }
        ]
      }
    ]
  }
}
```

La cuarta pregunta aplica solo cuando el cliente elige "Other" en la tercera.

## Códigos de error

Ambas queries devuelven los fallos en el arreglo `errors` de nivel superior.

| Código | Nombre | Descripción | Cómo resolverlo |
| - | - | - | - |
| `AUTH-0002` | InvalidCredentials | Se usó autenticación básica | Llama con un token de usuario Bearer |
| `AUTH-0008` | InvalidUserAccess | El token Bearer no tiene `userId` o `accountId` | Genera el token para un usuario y una cuenta |
| `AUTH-0031` | InvalidScope | Al token le falta `MANAGE_RFI` | Agrega el scope a tu app, haz que el cliente lo apruebe y vuelve a generar el token |
| `G-0003` | ResourceAccessDenied | `extensions.rfiErrorCode: "ACCESS_DENIED"`. Para `rfi`: la RFI no existe, pertenece a otra cuenta o el usuario del token no es su destinatario. Para `openRfis`: el usuario del token no es el destinatario de la cuenta del token | Genera el token para la cuenta a la que pertenece la RFI, para su propietario o el solicitante de la empresa |

> [!NOTE]
>
> `openRfis` devuelve una lista no nula, por lo que un error `ACCESS_DENIED` establece `data` en `null`. Revisa `errors` antes de leer `data`.

## Mejores prácticas

* **Consulta con moderación, o usa webhooks.** Llama a `openRfis` cuando el cliente abra tu app o la pantalla de su cuenta, no en cada carga de página. Para recibir una notificación cuando llegue una RFI, suscríbete a los [eventos de webhook de RFI](https://docs.fluz.app/fluz-dashboard/webhooks.md#rfi-events).
* **Muestra el contenido a partir de la respuesta.** Las preguntas, su orden y cuáles son obligatorias cambian de una RFI a otra.
* **Muestra la fecha de vencimiento.** Si `expiresAt` está definido, muéstrasela al cliente. Una RFI vencida no se puede responder.

## Páginas relacionadas

> [card] [Descripción general de RFI](https://docs.fluz.app/rfi-overview)
>
> Estados, tipos de pregunta y el flujo de principio a fin.

> [card] [Enviar una RFI](https://docs.fluz.app/submit-rfi)
>
> Envía las respuestas a las preguntas que mostraste.


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