KYC Review
KYC Review API provides endpoints to view, update and submit information related to KYC flow. Partners redirect their customers in order to go through KYC requirements collection in a dynamic manner with minimal configurable styling if Hosted KYC is the preferred solution to provide KYC requirements.
Alternatively KYC Requirement Submit endpoint can be used for the KYC requirements that are allowed to be submitted. For the requirements that can't be submitted through this endpoint, partner should redirect their customer to Hosted KYC flow.
Please refer to our Hosted KYC guide for more information on the general use of the endpoints included below.
Unique identifier for a KYC Review resource, generated by Wise.
Aggregated state of the underlying requirement set. Any of the states below could move into any other state. Can be one of "NEW", "PASSED", "PASSED_WITH_REQUIREMENTS", "WAITING_CUSTOMER_INPUT" or "PROCESSING".
Contains the URL and expiry of said URL the end customer needs to be directed to in order to go through Hosted KYC flow. link is returned only when status is WAITING_CUSTOMER_INPUT and Update redirect url is called.
The URL that the end customer needs to be directed to in order to go through the Hosted KYC flow.
Timestamp to when the One Time Token in the link will expire after which a new link needs to be generated.
Timestamp marking the creation of the KYC Review.
Timestamp marking the last update of the KYC Review.
Timestamp by which the underlying requirement set needs to be verified to not block the customer. Only relevant if the status is "PASSED_WITH_REQUIREMENTS".
List containing TriggerReference objects
An object refers to the action/process this KYC Review pertains to.
Type of the underlying action/process this KYC Review is for. Usually a reference to which product this KYC Review pertains to (like "QUOTE" or "TRANSFER") or a reference to a KYC process on the profile that isn’t related to a specific product (like "REFRESH_CYCLE" or "REPAPERING"). The supported types are "QUOTE", "TRANSFER", "PROACTIVE_SEND_MONEY", "CARD" and "BANK_ACCOUNT_DETAILS"
Key-value Object containing metadata of the underlying product object that triggered the KYC Review. For "QUOTE" and "TRANSFER" types, triggerData contains an"id" field that refers to their respective IDs. For "BANK_ACCOUNT_DETAILS", triggerData has a field called "currencies" which contains a list of currencies (i.e USD, SGD, EUR) that the bank details have been created for. Table below shows the fields and their data type for each triggerReference type:
| triggerReference.type | field | type |
|---|---|---|
| QUOTE | id | uuid |
| TRANSFER | id | long |
| BANK_ACCOUNT_DETAILS | currencies | list of string |
URL where the user will be redirected at the end of the flow. Can contain query params and path fragments. It has to be a valid URL as per RFC2396. Provided by the caller in the Update redirect url call.
Nested list of KYC Requirement objects. It will be in [List<KycRequirement>, List<KycRequirement>] format with each List<KYCRequirement> represents a combination of possible KycRequirements to be provided. To fulfil the whole KYC Review, at least one item from each List<KYCRequirement> should be provided.
For an example if the requirements are [ [a, b], [c, d] ] then it should be read as (a or b) and (c or d) to be provided. This field is only included in the response above v2 of KYC Review endpoints.
The list of requirements of the KYC Review.
The name of the KYC requirement. A single KYC Requirement should appear in requirements list at most once.
The state of the KYCRequirement. There are 2 state of a requirement "NOT_PROVIDED" or "IN_REVIEW". If the state is "NOT_PROVIDED" the information is pending some information to be provided. Either the Hosted KYC flow or KYC Requirement Submit endpoint should be used to fulfill the requirement. If the state is "IN_REVIEW" the required information are retrieved and the KYC requirement is being reviewed, no action is needed.
A boolean field that indicates if the requirement can be provided via KYC Requirement Submit endpoint. If this field is false the requirement should be provided via Hosted KYC flow.
{"type": "QUOTE","triggerData": {"id": "ba83s43a-f623-46f0-956d-196c13e2ab01"}}
{"id": "46e1a5c4-4a9b-4563-39d3-18174d3ac0f8","createdAt": "2024-09-03T16:22:02.257725","updatedAt": "2024-09-03T16:29:41.147522","requiredBy": "2024-09-03T16:22:02.257725","status": "WAITING_CUSTOMER_INPUT","link": {"value": "https://sandbox.transferwise.tech/embedded-flows/verification?token=d7332edb-25bf-41af-a4e9-09f5efe39ded&checkId=3120073","expiresAt": "2024-09-03T16:29:41.203225146"},"triggerReferences": [{"type": "QUOTE","triggerData": {"id": "ba83s43a-f623-46f0-956d-196c13e2ab01"}},{"type": "TRANSFER","triggerData": {"id": "471147"}}],"redirectUrl": "https://example.com","requirements": [[[{"key": "BUSINESS_USE_CASE","state": "NOT_PROVIDED","apiCollectionSupported": true}],[{"key": "BUSINESS_MONTHLY_VOLUME","state": "NOT_PROVIDED","apiCollectionSupported": false}],[{"key": "BUSINESS_REGISTRATION_DOCS","state": "IN_REVIEW","apiCollectionSupported": false}]]]}
POST /v1/profiles/{profileId}/kyc-reviews
Creates a KYC Review for a specific customer action
Type of the underlying action/process this KYC Review is for. Usually a reference to which product this KYC Review is for (like "QUOTE" or "TRANSFER") or a reference to a KYC process on the profile that isn’t related to a specific product (like "REFRESH_CYCLE" or "REPAPERING").
Supported types:
QUOTEPROACTIVE_SEND_MONEY
Object containing data of the underlying product object that triggered the KYC Review.
Field containing the ID of the underlying product object. e.g. if type is "QUOTE" then this would be quote ID. This ID might be null when referencing an ID isn’t meaningful. As an example, there’s only ever one active refresh cycle per profile so referencing by ID isn’t useful.
Possible HTTP status codes
KYC Review successfully created.
Invalid request. (e.g. unsupported type, null type)
User is not authorized to access the resource
Underlying action with provided ID is not found. (e.g. Quote not found)
curl -L 'https://api.sandbox.transferwise.tech/v1/profiles/{profileId}/kyc-reviews' \-H 'Content-Type: application/json' \-H 'Authorization: Bearer <user access token>' \-d '{"type": "QUOTE","triggerData": {"id": "{quoteId}"}}'
{"id": "46e1a5c4-4a9b-4563-39d3-18174d3ac0f8","createdAt": "2024-09-03T16:22:02.257725","updatedAt": "2024-09-03T16:22:02.257725","requiredBy": "2024-09-03T16:22:02.257725","status": "NEW","triggerReferences": [{"type": "QUOTE","triggerData": {"id": "ba83s43a-f623-46f0-956d-196c13e2ab01"}}],"redirectUrl": null}
GET /v1/profiles/{profileId}/kyc-reviews
Retrieves list of all active KYC Reviews for a given profile.
The following parameters are optional:
pageNumber- Page number. Default value is 1 if not specifiedpageSize- Desired number of items per page. Max 100, and default value is 100 if not specified
Possible HTTP status codes
Return list of KYC Review objects for the profile. Returns empty list if no KYC Review exists for a profile
User is not authorized to access the resource
curl -L 'https://api.sandbox.transferwise.tech/v1/profiles/{profileId}/kyc-reviews?pageNumber=10&pageSize=2' \-H 'Authorization: Bearer <user access token>'
[{"id": "46e1a5c4-4a9b-4563-39d3-18174d3ac0f8","createdAt": "2024-09-03T16:22:02.257725","updatedAt": "2024-09-03T16:24:21.065068","requiredBy": "2024-09-03T16:22:02.257725","status": "WAITING_CUSTOMER_INPUT","triggerReferences": [{"type": "QUOTE","triggerData": {"id": "ba83s43a-f623-46f0-956d-196c13e2ab01"}},{"type": "TRANSFER","triggerData": {"id": "471147"}}],"redirectUrl": null}]
GET /v2/profiles/{profileId}/kyc-reviews/{kycReviewId}
Retrieves a single KYC Review by ID for a profile.
Possible HTTP status codes
Returns KYC Review object
KYC Review not found
User is not authorized to access the resource
curl -L 'https://api.sandbox.transferwise.tech/v2/profiles/{profileId}/kyc-reviews/{kycReviewId}' \-H 'Authorization: Bearer <user access token>'
[{"id": "46e1a5c4-4a9b-4563-39d3-18174d3ac0f8","createdAt": "2024-09-03T16:22:02.257725","updatedAt": "2024-09-03T16:24:21.065068","requiredBy": "2024-09-03T16:22:02.257725","status": "WAITING_CUSTOMER_INPUT","triggerReferences": [{"type": "QUOTE","triggerData": {"id": "ba83s43a-f623-46f0-956d-196c13e2ab01"}},{"type": "TRANSFER","triggerData": {"id": "471147"}}],"redirectUrl": null,"requirements": [[[{"key": "BUSINESS_USE_CASE","state": "NOT_PROVIDED","apiCollectionSupported": true}],[{"key": "BUSINESS_MONTHLY_VOLUME","state": "NOT_PROVIDED","apiCollectionSupported": false}],[{"key": "BUSINESS_REGISTRATION_DOCS","state": "IN_REVIEW","apiCollectionSupported": false}]]]}]
PATCH /v1/profiles/{profileId}/kyc-reviews/{kycReviewId}
Updates the KYC review with a redirect url.
Returns KYC review object with a link field containing a url where the end customer needs to be directed in order to complete the Hosted KYC flow.
Once Hosted KYC flow is completed by the end customer, they will be redirected to the redirectUrl provided in this API call. During the redirection, the redirectUrl will be appended with query parameters: status=success or status=error, indicating whether Hosted KYC flow was completed successfully or not.
URL where the user will be redirected at the end of the flow. Can contain query params and path fragments. It has to be a valid URL as per RFC2396.
Possible HTTP status codes
Returns updated KYC Review object
Invalid request. (e.g. not valid URI)
User is not authorized to access the resource
KYC Review not found
curl -L -X PATCH 'https://api.sandbox.transferwise.tech/v1/profiles/{personalProfileId}/kyc-reviews/{kycReviewId}' \-H 'Content-Type: application/json' \-H 'Authorization: Bearer <user access token>' \-d '{"redirectUrl": "https://example.com"}'
{"id": "46e1a5c4-4a9b-4563-39d3-18174d3ac0f8","createdAt": "2024-09-03T16:22:02.257725","updatedAt": "2024-09-03T16:29:41.147522","requiredBy": "2024-09-03T16:22:02.257725","status": "WAITING_CUSTOMER_INPUT","link": {"value": "https://sandbox.transferwise.tech/embedded-flows/verification?token=d7332edb-25bf-41af-a4e9-09f5efe39ded&checkId=3120073","expiresAt": "2024-09-03T16:29:41.203225146"},"triggerReferences": [{"type": "QUOTE","triggerData": {"id": "ba83s43a-f623-46f0-956d-196c13e2ab01"}}],"redirectUrl": "https://example.com"}
POST /v2/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements/{requirementKey}
Submit a KYC requirement under a KYC review.
- Please note that a KYC requirement can be only submitted if the KYC Review status is
WAITING_CUSTOMER_INPUT. - KYC requirement should only be submitted if the status is
"NOT_PROVIDED"andapiCollectionSupportedfield istrue.
Possible HTTP status codes
No response
Invalid request. (e.g. not valid URI)
User is not authorized to access the resource
KYC Review or provided requirement key not found
curl -X POST 'https://api.sandbox.transferwise.tech/v2/profiles/{profileId}/{kycReviewId}/requirements/{requirementKey}' \-H 'Authorization: Bearer <your api token>' \-H 'Content-Type: multipart/form-data' \-F 'files=@"<your file>"' \-F 'submissionData="<payload for the key>";type=application/json'