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

# List RFIs

> List the requests for information (RFIs) compliance has raised against your users. An RFI is raised either during onboarding, against the user's verification, or against a single transfer, which stays held until the request is resolved.

If you would rather collect the reply programmatically, submit it through the [Submit a response to an RFI](https://docs.hifi.com/v3/api-reference/compliance/submit-a-response-to-an-rfi) endpoint instead.




## OpenAPI

````yaml https://production.hifi.com/api/v3/openapi.json get /v3/rfis
openapi: 3.0.0
info:
  title: Hifi API
  version: 3.0.0
  description: API documentation for HIFI
servers:
  - url: https://production.hifi.com
    description: Production server
  - url: https://sandbox.hifi.com
    description: Sandbox server
security:
  - bearerAuth: []
tags:
  - name: Common
    description: Common endpoints
  - name: User
    description: User endpoints
  - name: Counter Party
    description: Counter party endpoints
  - name: Crypto Transfer
    description: Crypto transfer and batch transfer endpoints
  - name: Wallet
    description: Wallet and wallet offer endpoints
  - name: External Account
    description: External bank account endpoints, scoped to a counter party
  - name: External Wallet
    description: External wallet endpoints, scoped to a counter party
  - name: External Card
    description: External card endpoints, scoped to a counter party
  - name: Token Swap
    description: Token swap endpoints
  - name: Bridge
    description: Bridge endpoints
  - name: Virtual Account
    description: Virtual account endpoints
  - name: Compliance
    description: Compliance and compliance link endpoints
  - name: Webhook Endpoint
    description: Webhook endpoint endpoints
  - name: File
    description: File upload endpoints
  - name: Onramp
    description: Onramp (fiat to crypto) endpoints
  - name: Offramp
    description: Offramp (crypto to fiat) endpoints
  - name: Orchestration Address
    description: Orchestration (liquidation) address endpoints
  - name: KYC Link
    description: Hosted and custom KYC/KYB link endpoints
  - name: Transfer Approval
    description: Transfer approval endpoints
  - name: Corridor
    description: Supported fiat/crypto transfer corridor endpoints
  - name: Migration
    description: v2-to-v3 ID mapping endpoints
paths:
  /v3/rfis:
    get:
      tags:
        - Compliance
      summary: List RFIs
      description: >
        List the requests for information (RFIs) compliance has raised against
        your users. An RFI is raised either during onboarding, against the
        user's verification, or against a single transfer, which stays held
        until the request is resolved.


        If you would rather collect the reply programmatically, submit it
        through the [Submit a response to an
        RFI](https://docs.hifi.com/v3/api-reference/compliance/submit-a-response-to-an-rfi)
        endpoint instead.
      operationId: v3ListRfis
      parameters:
        - $ref: '#/components/parameters/RfiStatusQueryParameter'
        - $ref: '#/components/parameters/RfiKindQueryParameter'
        - $ref: '#/components/parameters/RfiUserIdQueryParameter'
        - $ref: '#/components/parameters/RfiLimitParameter'
        - $ref: '#/components/parameters/RfiOffsetParameter'
      responses:
        '200':
          $ref: '#/components/responses/ListRfisResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '500':
          $ref: '#/components/responses/InternalServerErrorResponse'
components:
  parameters:
    RfiStatusQueryParameter:
      name: status
      in: query
      required: false
      schema:
        type: string
        enum:
          - issued
          - submitted
          - resolved
          - expired
      description: Filter requests by status.
    RfiKindQueryParameter:
      name: kind
      in: query
      required: false
      schema:
        type: string
        enum:
          - onboarding
          - transaction
      description: Filter requests by what they are attached to.
    RfiUserIdQueryParameter:
      name: userId
      in: query
      required: false
      schema:
        type: string
      description: Public ID of the user whose requests are listed (prefixed with `usr_`)
      example: usr_3Kf9dQ2mNpXwZ7bV1aLcs
    RfiLimitParameter:
      name: limit
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
      description: Number of requests to return.
    RfiOffsetParameter:
      name: offset
      in: query
      required: false
      schema:
        type: integer
        minimum: 0
        default: 0
      description: Number of requests to skip.
  responses:
    ListRfisResponse:
      description: Success
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RfiListObject'
          example:
            data:
              - id: rfi_5Kf9dQ2mNpXwZ7bV1aLcs
                kind: onboarding
                status: issued
                subjectType: individual
                userId: usr_3Kf9dQ2mNpXwZ7bV1aLcs
                transferId: null
                flowType: null
                createdAt: '2026-07-01T10:30:00.000Z'
                currentRound: 1
                round:
                  id: rfir_2mNpXwZ7bV1aLcs3Kf9dQ
                  round: 1
                  issuedAt: '2026-07-01T10:30:00.000Z'
                  expiresAt: '2026-07-31T10:30:00.000Z'
                  submittedAt: null
                  items:
                    - id: 3f7c1e90-2a4b-4d61-9c0e-5b8f2d6a1e34
                      kind: document
                      label: Proof of address issued in the last 3 months
                      docType: proof_of_address
                      detail: >-
                        A utility bill or bank statement dated within the last
                        three months.
                      required: true
                    - id: 6b2d4a81-7c05-4e39-8f1a-2d9c3e7b5041
                      kind: question
                      label: What is the source of the funds being deposited?
                      docType: null
                      detail: null
                      required: true
                  link: >-
                    https://dashboard.hifi.com/production/rfi-link/rfir_2mNpXwZ7bV1aLcs3Kf9dQ#sessionToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
            pagination:
              limit: 20
              offset: 0
              total: 1
    BadRequestResponse:
      description: Bad Request — the request was malformed or failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
          example:
            type: VALIDATION_ERROR
            message: One or more fields are invalid or missing.
            fields:
              - code: invalid_value
                message: Must be a valid email address
                field: email
    UnauthorizedResponse:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
    InternalServerErrorResponse:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InternalServerError'
  schemas:
    RfiListObject:
      type: object
      description: Paginated list of requests for information, newest first.
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RfiObject'
        pagination:
          $ref: '#/components/schemas/RfiPagination'
    ApiError:
      type: object
      description: >-
        Standard v3 error shape, returned by validation failures and
        business-logic errors alike.
      properties:
        type:
          type: string
          description: >-
            Machine-readable error type, e.g. VALIDATION_ERROR,
            ACTION_NOT_ALLOWED, RESOURCE_CONFLICT.
          example: VALIDATION_ERROR
        message:
          type: string
          description: Human-readable error message.
          example: One or more fields are invalid or missing.
        fields:
          type: array
          description: >-
            Present on field-level validation errors. One entry per problem
            field.
          items:
            type: object
            properties:
              code:
                type: string
                description: Error code related to the field issue.
              message:
                type: string
                description: Error message for the specific issue.
              field:
                type: string
                description: The name of the field that has an issue.
    Unauthorized:
      type: object
      properties:
        type:
          type: string
          description: Unauthorized enum
          example: UNAUTHORIZED
        message:
          type: string
          description: Unauthorized message
          example: Authentication required
    InternalServerError:
      type: object
      properties:
        type:
          type: string
          example: INTERNAL_SERVER_ERROR
          description: Internal server error enum
        message:
          type: string
          example: An internal server error occurred
          description: Internal server error message
    RfiObject:
      type: object
      description: >-
        A request for information raised by compliance against a user or one of
        their transfers.
      properties:
        id:
          type: string
          description: Public ID of the request (prefixed with `rfi_`).
          example: rfi_5Kf9dQ2mNpXwZ7bV1aLcs
        kind:
          $ref: '#/components/schemas/RfiKind'
        status:
          $ref: '#/components/schemas/RfiStatus'
        subjectType:
          type: string
          description: >-
            Whether the user the request concerns is an individual or a
            business.
          enum:
            - individual
            - business
          example: individual
        userId:
          type: string
          nullable: true
          description: Public ID of the user the request concerns (prefixed with `usr_`).
          example: usr_3Kf9dQ2mNpXwZ7bV1aLcs
        transferId:
          type: string
          nullable: true
          description: >-
            Public ID of the held transfer, on a `transaction` request. Null on
            an `onboarding` request.
          example: offramp_9dQ2mNpXwZ7bV1aLcs3Kf
        flowType:
          type: string
          nullable: true
          description: >-
            Which transfer `transferId` refers to. Null on an `onboarding`
            request.
          enum:
            - onramp
            - offramp
          example: null
        createdAt:
          type: string
          format: date-time
          description: When the request was raised.
          example: '2026-07-01T10:30:00.000Z'
        currentRound:
          type: integer
          nullable: true
          description: Attempt number of the round in `round`.
          example: 1
        round:
          allOf:
            - $ref: '#/components/schemas/RfiRoundObject'
          nullable: true
          description: The current round. Null if the request has no round open.
    RfiPagination:
      type: object
      description: >-
        Offset-based pagination, rather than the cursor pagination used by most
        v3 list endpoints.
      properties:
        limit:
          type: integer
          description: Page size used for this response.
          example: 20
        offset:
          type: integer
          description: Number of records skipped.
          example: 0
        total:
          type: integer
          description: Total number of records matching the filters.
          example: 3
      required:
        - limit
        - offset
        - total
    RfiKind:
      type: string
      description: >-
        What the request is attached to. `onboarding` asks about the user's own
        verification; `transaction` asks about a single transfer, which stays
        held until the request is resolved.
      enum:
        - onboarding
        - transaction
      example: onboarding
    RfiStatus:
      type: string
      description: >-
        Where the request is in its lifecycle. `issued` is waiting on a reply,
        `submitted` has been answered and is under review, `resolved` has been
        decided, and `expired` passed its deadline unanswered.
      enum:
        - issued
        - submitted
        - resolved
        - expired
      example: issued
    RfiRoundObject:
      type: object
      description: >-
        The current attempt at the request. Each time compliance asks again a
        new round is opened with its own items and deadline, and earlier rounds
        are retained but not returned here.
      properties:
        id:
          type: string
          description: Public ID of the round (prefixed with `rfir_`).
          example: rfir_2mNpXwZ7bV1aLcs3Kf9dQ
        round:
          type: integer
          description: Attempt number, starting at 1.
          example: 1
        issuedAt:
          type: string
          format: date-time
          description: When this round was issued and emailed to your compliance contact.
          example: '2026-07-01T10:30:00.000Z'
        expiresAt:
          type: string
          format: date-time
          nullable: true
          description: Deadline for replying. A submission after this time is rejected.
          example: '2026-07-31T10:30:00.000Z'
        submittedAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            When this round was answered. Null while it is still awaiting a
            reply.
          example: null
        items:
          type: array
          description: What this round asks for, in the order it should be presented.
          items:
            $ref: '#/components/schemas/RfiRequestItemObject'
        link:
          type: string
          nullable: true
          description: >-
            Hosted page where you can answer the request without calling this
            API. The same link is emailed to your compliance contact when the
            request is issued. Null once the link can no longer be used, which
            is after a submission, after compliance asks again, or once the
            request is closed.
          example: >-
            https://dashboard.hifi.com/production/rfi-link/rfir_2mNpXwZ7bV1aLcs3Kf9dQ#sessionToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    RfiRequestItemObject:
      type: object
      description: >-
        A single thing being asked for. One item may be answered by several
        entries in a submission, which is how three bank statements answer one
        request.
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Identifier of the request item. Quote it as `requestItemId` when
            submitting a reply.
          example: 3f7c1e90-2a4b-4d61-9c0e-5b8f2d6a1e34
        kind:
          type: string
          description: >-
            `document` expects a file, or written text explaining why the file
            cannot be provided. `question` expects written text only.
          enum:
            - document
            - question
          example: document
        label:
          type: string
          description: What is being asked for, in the reviewer's own words.
          example: Proof of address issued in the last 3 months
        docType:
          type: string
          nullable: true
          description: >-
            Hint for the kind of document expected. Null when the request does
            not correspond to a standard document type. Not a closed set, so
            treat an unrecognised value as an untyped document request. Values
            currently in use are `proof_of_address`, `source_of_funds`,
            `bank_statement`, `government_id`, `selfie`, `incorporation_docs`,
            `ownership_structure`, `invoice` and `contract`.
          example: proof_of_address
        detail:
          type: string
          nullable: true
          description: Additional guidance for this item.
          example: A utility bill or bank statement dated within the last three months.
        required:
          type: boolean
          description: >-
            Whether this item must be answered for the submission to be
            accepted.
          example: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````