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

# API - Sep 30, 2025

> <small>&#8249; [All release notes](/release-notes)</small>

## <div class="pill pill-green">Added</div>

### Verification of Payee (VOP) in Sandbox

In Sandbox, the API fields showing the result of [Verification of Payee (VOP)](/guides/vop/recipients-payouts) checks are now returned on the following endpoints:

* [GET View a Recipient](/api-reference/recipients/view-recipient)
* [POST Create a Recipient](/api-reference/recipients/create-recipient)
* [POST Create a Payout](/api-reference/payouts/create-payout) (if user holds User-Owned Virtual Account)

On these endpoints, the `RecipientVerificationOfPayee` object is returned if the Recipient uses local SEPA schemes (SCT and SCT Int), meaning if its `Currency` is `EUR`, its `PayoutMethod` is `LocalBankTransfer`, and its `Country` is a SEPA country.

Take advantage of the new testing data to simulate the results of the check in Sandbox:

<CardGroup cols={2}>
  <Card title="Guide" href="/guides/vop/recipients-payouts#testing">
    Testing data for VOP on Recipients
  </Card>
</CardGroup>

## <div class="pill pill-green">Added</div>

### Sandbox test data to simulate KYC Document processing

In Sandbox, platforms can now programmatically simulate the acceptance or refusal of a KYC Document, thanks to new test values.

To do so, when you call the [POST Create a KYC Document](/api-reference/kyc-documents/create-kyc-document) endpoint, set the `Tag` to the relevant value to produce the desired outcome after submission.

For more details, see [how to submit a KYC document](/guides/users/verification/documents/submission/how-to) **→**

<table>
  <thead>
    <tr>
      <th class="header">
        `Tag` value
      </th>

      <th class="header">
        Final `Status`
      </th>

      <th class="header">
        Final `RefusedReasonType`
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td class="table-content">
        `accept`
      </td>

      <td class="table-content">
        `VALIDATED`
      </td>

      <td class="table-content">
        `null`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_unreadable`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `UNREADABLE`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_not_accepted`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `DOCUMENT_NOT_ACCEPTED`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_expired`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `DOCUMENT_HAS_EXPIRED`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_incomplete`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `DOCUMENT_INCOMPLETE`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_missing`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `DOCUMENT_MISSING`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_no_user_data_match`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `DOCUMENT_DO_NOT_MATCH_USER_DATA`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_falsified`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `DOCUMENT_FALSIFIED`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_underage`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `UNDERAGE_PERSON`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `refuse_specific_case`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>

      <td class="table-content">
        `SPECIFIC_CASE`
      </td>
    </tr>
  </tbody>
</table>

## <div class="pill pill-green">Added</div>

### Sandbox test data to simulate UBO Declaration processing

In Sandbox, platforms can now programmatically simulate the acceptance, refusal, or marking as incomplete of a UBO Declaration, thanks to new test values.

To do so, when you call the [POST Create UBO](/api-reference/ubo-declarations/create-ubo) endpoint to register the first UBO, set the `FirstName` to the relevant value to produce the desired outcome after submission.

For more details, see [how to submit a UBO declaration](/guides/users/verification/beneficial-owners/how-to) **→**

<table>
  <thead>
    <tr>
      <th class="header">
        First UBO `FirstName` value
      </th>

      <th class="header">
        Final `Status`
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td class="table-content">
        `AcceptUBO`
      </td>

      <td class="table-content">
        `VALIDATED`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `RefuseUBO`
      </td>

      <td class="table-content">
        `REFUSED`
      </td>
    </tr>

    <tr>
      <td class="table-content">
        `IncompleteUBO`
      </td>

      <td class="table-content">
        `INCOMPLETE`
      </td>
    </tr>
  </tbody>
</table>
