> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.mangopay.com/api-reference/kyc-documents/list-kyc-documents-user/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.mangopay.com/_mcp/server. # List KYC Documents for a User GET https://api.sandbox.mangopay.com/v2.01/{ClientId}/users/{UserId}/kyc/documents **Caution – Legacy endpoints being superseded by the hosted KYC/KYB solution** Mangopay's [hosted KYC/KYB solution](/guides/users/verification/hosted) is becoming mandatory for all platforms (relying on the [IDV Session](/api-reference/idv-sessions/idv-session-object) object). The legacy KYC Document endpoints remain available for the sole purposes of [sending additional documents](/guides/users/verification/hosted#sending-additional-documents), but this use case will also be handled by the hosted solution in future. Reference: https://docs.mangopay.com/api-reference/kyc-documents/list-kyc-documents-user ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. If your platform is using a [proxy](/guides/sca/proxy-management) to take SCA-triggering action on behalf of users, you also need to integrate [mTLS authentication](/guides/sca/platform) and use the `api-mtls` base URL. ## Servers - `https://api.sandbox.mangopay.com` (Sandbox, default) - `https://api.mangopay.com` (Production) - `https://api-mtls.sandbox.mangopay.com` (mTLS Sandbox) - `https://api-mtls.mangopay.com` (mTLS Production) ## Request ### Path parameters - `ClientId` (string, required) — Platform's API account identifier, associated with the API key. - `UserId` (string, required) — The unique identifier of the user. ### Query parameters - `Status` (string, optional) — **Allowed values:** `CREATED`, `VALIDATION_ASKED`, `VALIDATED`, `REFUSED`, `OUT_OF_DATE` The status of the KYC Document. You can filter on multiple values by separating them with a comma. - `Type` (string, optional) — **Allowed values:** `IDENTITY_PROOF`, `REGISTRATION_PROOF`, `ARTICLES_OF_ASSOCIATION`, `SHAREHOLDER_DECLARATION`, `ADDRESS_PROOF` The type of the KYC Document. You can filter on multiple values by separating them with a comma. - `BeforeDate` (integer, optional) — The date before which the object was created (based on the object's `CreationDate` parameter). You can filter on a specific time range by using both the `AfterDate` and `BeforeDate` query parameters. - `AfterDate` (integer, optional) — The date after which the object was created (based on the object's `CreationDate` parameter). You can filter on a specific time range by using both the `AfterDate` and `BeforeDate` query parameters. ## Response ### 200 Success - `Array (KYCDocument)` (list of ListAllKycDocumentsResponseArrayKycDocumentItems, optional) — The list of KYC documents created by the platform. ## Types ### ListAllKycDocumentsResponseArrayKycDocumentItems - `Object (KYCDocument)` (ListAllKycDocumentsResponseArrayKycDocumentItemsObjectKycDocument, optional) — KYC Document created by the platform. ### ListAllKycDocumentsResponseArrayKycDocumentItemsObjectKycDocument KYC Document created by the platform. - `Type` (string, optional) — **Returned values:** `IDENTITY_PROOF`, `REGISTRATION_PROOF`, `ARTICLES_OF_ASSOCIATION`, `SHAREHOLDER_DECLARATION`, `ADDRESS_PROOF` The type of the document for the user verification. - `UserId` (string, optional) — The unique identifier of the user. - `Flags` (list of string, optional) — **Returned values:** A code from the Flags list. The series of codes providing more precision regarding the reason why the identity proof document was refused. You can review the explanations for each code in the Flags list. - `Id` (string, optional) — Max length: 128 characters (see [data formats](/api-reference/overview/data-formats) for details) The unique identifier of the object. - `Tag` (string, optional) — Max. length: 255 characters Custom data that you can add to this object, such as unique identifiers in your system. To store multiple values, you can serialize them into a single string, for example a JSON object: `"{\"id_1\":AB123,\"id_2\":DE456}"`. - `Status` (string, optional) — **Returned values:** `CREATED`, `VALIDATION_ASKED`, `VALIDATED`, `REFUSED`, `OUT_OF_DATE` The status of the document: - `CREATED` – The document container is created and files can be uploaded using the [POST Create a KYC Document Page](/api-reference/kyc-documents/create-kyc-document-page) endpoint before submission. - `VALIDATION_ASKED` – The document is submitted to Mangopay for validation. - `VALIDATED` – The document is validated by Mangopay's teams. - `REFUSED` – The document is rejected by Mangopay's teams and a new KYC Document object needs to be created to resubmit it. You can learn more about the reason why it was refused in the `RefusedReasonType` parameter. - `OUT_OF_DATE` – The document is downgraded and a new KYC Document object needs to be created to resubmit it. - `RefusedReasonType` (string, optional) — **Returned values:** DOCUMENT\_DO\_NOT\_MATCH\_USER\_DATA, DOCUMENT\_FALSIFIED, DOCUMENT\_HAS\_EXPIRED, DOCUMENT\_INCOMPLETE, DOCUMENT\_MISSING, DOCUMENT\_NOT\_ACCEPTED, DOCUMENT\_UNREADABLE, SPECIFIC\_CASE, UNDERAGE\_PERSON Returned `null` unless `Status` is `REFUSED`. The reason for the document refusal. See the refused reason types for more information depending on the document type. - `RefusedReasonMessage` (string, optional) — **Default value:** null Additional information about why the KYC Document was refused, provided by Mangopay's team. ## Examples **Response** ```json [ { "CreationDate": 1728913151, "Flags": [], "Id": "kyc_01JA5M25P7D6V54J72ENGMPH9Y", "ProcessedDate": null, "RefusedReasonMessage": null, "RefusedReasonType": null, "Status": "VALIDATION_ASKED", "Tag": "Created using Mangopay API Postman Collection", "Type": "REGISTRATION_PROOF", "UserId": "user_m_01J8J0Y9DPNYRA9RB532CCND9Q" }, { "CreationDate": 1728913167, "Flags": [], "Id": "kyc_01JA5M2N33ENJHWVPQXVJ6Q51P", "ProcessedDate": 1728913173, "RefusedReasonMessage": null, "RefusedReasonType": null, "Status": "VALIDATED", "Tag": "Created using Mangopay API Postman Collection", "Type": "IDENTITY_PROOF", "UserId": "user_m_01J8J0Y9DPNYRA9RB532CCND9Q" } ] ``` **SDK Code** ```python from pprint import pprint import mangopay mangopay.client_id = 'your-client-id' mangopay.apikey = 'your-api-key' from mangopay.api import APIRequest handler = APIRequest(sandbox=True) from mangopay.resources import LegalUser legal_user = LegalUser( id = '210760575' ) documents = legal_user.documents.all() for document in documents: pprint(vars(document)) ``` ```javascript const mangopayInstance = require('mangopay4-nodejs-sdk') const mangopay = new mangopayInstance({ clientId: 'your-client-id', clientApiKey: 'your-api-key', }) let user = { Id: '146476890', } const listUserKycDocs = async (userId) => { return await mangopay.Users.getKycDocuments(userId) .then((response) => { console.info(response) return response }) .catch((err) => { console.log(err) return false }) } listUserKycDocs(user.Id) ``` ```java import com.mangopay.MangoPayApi; import com.mangopay.entities.KycDocument; import com.mangopay.core.Pagination; import java.lang.reflect.Field; import java.util.List; public class ListUserKycDocs { public static void main(String[] args) throws Exception { MangoPayApi mangopay = new MangoPayApi(); mangopay.getConfig().setClientId("your-client-id"); mangopay.getConfig().setClientPassword("your-api-key"); String userId = "user_m_01HR9SZTXDRY1PCFHSJFAPC0YJ"; Pagination pagination = new Pagination(1, 100); List kycDocs = mangopay.getUserApi().getKycDocuments(userId, pagination, null); for (KycDocument kycDoc : kycDocs) { kycDoc = mangopay.getUserApi().getKycDocument(userId, kycDoc.getId()); System.out.println(""); System.out.println(String.format("id: %s", kycDoc.getId())); printObjectFields(kycDoc); } } private static void printObjectFields(Object obj) { Class objClass = obj.getClass(); Field[] fields = objClass.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); try { Object value = field.get(obj); System.out.println(field.getName() + ": " + value); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } ``` ```csharp using MangoPay.SDK; using Newtonsoft.Json; class Program { static async Task Main(string[] args) { MangoPayApi api = new MangoPayApi(); api.Config.ClientId = "your-client-id"; api.Config.ClientPassword = "your-api-key"; var userId = "user_m_01J2TZ261WZNDM0ZDRWGDYA4GN"; var userKycDocs = await api.Users.GetKycDocumentsAsync(userId, null, null); string prettyPrint = JsonConvert.SerializeObject(userKycDocs, Formatting.Indented); Console.WriteLine(prettyPrint); } } ``` ```php Config->ClientId = 'your-client-id'; $api->Config->ClientPassword = 'your-api-key'; $api->Config->TemporaryFolder = 'tmp/'; try { $userId ='146476890'; $response = $api->KycDocuments->GetAll($userId); print_r($response); } catch(MGPResponseException $e) { print_r($e); } catch(MGPException $e) { print_r($e); } ``` ```ruby require 'mangopay' MangoPay.configure do |client| client.preproduction = true client.client_id = 'your-client-id' client.client_apiKey = 'your-api-key' client.log_file = File.join(Dir.pwd, 'mangopay.log') end def listKycDocumentsforUser(userId) begin response = MangoPay::KycDocument.fetch_all(userId) puts response return response rescue MangoPay::ResponseError => error puts "Failed to fetch KYC Documents #{error.message}" puts "Error details: #{error.details}" return false end end myUser = { Id: '146476890' } listKycDocumentsforUser(myUser[:Id]) ```