Unblock Documentation
Api Verestro | User flow documentation
Implemented endpoints
All active endpoints are exposed under the user controller:
GET /userGET /user/documents-required/:externalUserIdGET /user/get-verification-status/:externalUserIdGET /user/validate-user/:externalUserIdPOST /user/createPOST /user/upload-documentPOST /user/general-documentPOST /user/upload-video
POST /usr-document/upload-video is not an active endpoint in the current codebase.
User flow (step-by-step)
-
Create the user
POST /user/create -
Check required documents
GET /user/documents-required/:externalUserId -
Upload required documents
POST /user/upload-document -
Optionally upload complementary files
POST /user/general-documentPOST /user/upload-video -
Submit user for verification
GET /user/validate-user/:externalUserId -
Check verification status
GET /user/get-verification-status/:externalUserId
Create user
POST /user/create
Purpose: Create and register a user associated with the merchant identified by the API key.
Request body (application/json)
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Yes |
| phone | User phone number including country code | String | Yes |
| isoCodePhone | ISO 3166-1 alpha-2 country code for phone |
String | Yes |
| name | User first name | String | Yes |
| lastName | User last name | String | Yes |
| User email | String | Yes | |
| isoCodeCountryResidence | ISO 3166-1 alpha-2 residence country code | String | Yes |
| address | User residential address | String | Yes |
| isoCodeCountryNationality | ISO 3166-1 alpha-2 nationality country code | String | Yes |
| state | State or region | String | Yes |
| city | City | String | Yes |
| dateOfBirth | Date of birth in YYYY-MM-DD format |
String | Yes |
| zipCode | Postal code | String | Yes |
Notes:
dateOfBirthmust be a valid date inYYYY-MM-DDformat.- The user must be at least
18years old.
Example request body
{
"externalUserId": "1337",
"phone": "+573221112233",
"isoCodePhone": "CO",
"name": "Jhon",
"lastName": "Doe",
"email": "jhondoe@test.com",
"isoCodeCountryResidence": "US",
"address": "123 Main St",
"isoCodeCountryNationality": "US",
"state": "Florida",
"city": "Miami",
"dateOfBirth": "1990-02-15",
"zipCode": "12345"
}
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "",
"serverTime": "2026-01-16T14:38:34.638Z",
"data": {
"idUser": 507,
"externalUserId": "1337",
"uniqueCode": "USR-000507"
},
"success": true,
"codeError": 0
}
Get user
GET /user
Purpose:
Retrieve a user by externalUserId or by idUser.
Query parameters
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Conditionally |
| idUser | Internal Verestro user identifier | Number | Conditionally |
Rules:
- Send exactly one filter.
- Valid combinations:
GET /user?externalUserId=1337GET /user?idUser=507
- Invalid:
- sending both
- sending neither
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "Operation successful",
"serverTime": "2026-01-16T17:20:00.000Z",
"data": {
"idUser": 507,
"externalUserId": "1337",
"firstName": "Jhon",
"lastName": "Doe",
"email": "jhondoe@test.com",
"phone": "+573221112233",
"isoCodePhone": "CO",
"address": "123 Main St",
"zipCode": "12345",
"dateOfBirth": "1990-02-15T00:00:00.000Z",
"verified": false,
"verifiedStatus": 1,
"status": true,
"isBlocked": false,
"uniqueCode": "USR-000507"
},
"success": true,
"codeError": 0
}
Retrieve user required documents
GET /user/documents-required/:externalUserId
Purpose: Retrieve the list of required documents for a specific user, including whether each document is already loaded.
Path parameters
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Yes |
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "Operation successful",
"serverTime": "2026-01-16T17:33:49.049Z",
"data": [
{
"docType": "IDENTITY_CARD_FRONT",
"isLoaded": false
},
{
"docType": "IDENTITY_CARD_BACK",
"isLoaded": false
},
{
"docType": "PASSPORT",
"isLoaded": false
},
{
"docType": "DRIVERS_LICENCE_FRONT",
"isLoaded": false
},
{
"docType": "DRIVERS_LICENCE_BACK",
"isLoaded": false
},
{
"docType": "UTILITY_BILL",
"isLoaded": false
},
{
"docType": "FRONTAL_PHOTO",
"isLoaded": true
},
{
"docType": "WORK_PERMIT_FRONT",
"isLoaded": false
},
{
"docType": "WORK_PERMIT_BACK",
"isLoaded": false
}
],
"success": true,
"codeError": 0
}
Upload user required document
POST /user/upload-document
Purpose: Upload one of the required verification documents for a user.
Request body (multipart/form-data)
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Yes |
| nameDocument | Display name for the file | String | No |
| docType | Required document type | Enum | Yes |
| file | File to upload | File (Binary) | Yes |
Allowed docType values
IDENTITY_CARD_FRONTIDENTITY_CARD_BACKPASSPORTDRIVERS_LICENCE_FRONTDRIVERS_LICENCE_BACKUTILITY_BILLFRONTAL_PHOTOWORK_PERMIT_FRONTWORK_PERMIT_BACK
Allowed mimetypes for file
image/jpegimage/pngapplication/pdf
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "Operation successful",
"serverTime": "2026-01-16T16:41:29.289Z",
"data": {},
"success": true,
"codeError": 0
}
Request user verification
GET /user/validate-user/:externalUserId
Purpose: Validate that a user has uploaded the required documents and mark the account as ready for verification.
Current validation rules in code:
FRONTAL_PHOTOis part of the required-document set when configured as required for the merchant.- One valid identity set can satisfy the identity-document requirement:
PASSPORTIDENTITY_CARD_FRONTandIDENTITY_CARD_BACKDRIVERS_LICENCE_FRONTandDRIVERS_LICENCE_BACKWORK_PERMIT_FRONTandWORK_PERMIT_BACK
- Video is not currently required by this endpoint.
Path parameters
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Yes |
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "Operation successful",
"serverTime": "2026-01-16T17:58:43.303Z",
"data": {},
"success": true,
"codeError": 0
}
Example error response
{
"headerStatus": {
"code": 400,
"description": "Error"
},
"messages": "Missing documents: IDENTITY_CARD_FRONT, IDENTITY_CARD_BACK, PASSPORT",
"serverTime": "2026-01-16T17:51:18.570Z",
"data": {},
"success": false,
"codeError": 134
}
Upload user general document
POST /user/general-document
Purpose: Upload a general-purpose user document that is not part of the required verification-document catalog.
Request body (multipart/form-data)
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Yes |
| nameDocument | Display name for the file | String | No |
| file | File to upload | File (Binary) | Yes |
Allowed mimetypes for file
video/mp4video/webmvideo/mpegapplication/pdfimage/jpegimage/pngimage/webpapplication/mswordapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentapplication/vnd.ms-excelapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheettext/plain
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "Operation successful",
"serverTime": "2026-01-16T16:34:05.519Z",
"data": {},
"success": true,
"codeError": 0
}
Upload user video
POST /user/upload-video
Purpose: Upload or replace the user video used for verification flows that require video evidence.
Request body (multipart/form-data)
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Yes |
| fileName | Display name for the file | String | No |
| video | Video file to upload | File (Binary) | Yes |
Allowed mimetypes for video
video/mp4video/webmvideo/mpeg
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "Operation successful",
"serverTime": "2026-01-16T16:34:05.519Z",
"data": {},
"success": true,
"codeError": 0
}
Retrieve user verification status
GET /user/get-verification-status/:externalUserId
Purpose: Retrieve the current verification status of a specific user.
Path parameters
| Name | Description | Type | Required |
|---|---|---|---|
| externalUserId | Merchant-side unique user identifier | String | Yes |
Possible status values
VERIFIEDNOT_VERIFIED
Example success response
{
"headerStatus": {
"code": 200,
"description": ""
},
"messages": "Operation successful",
"serverTime": "2026-01-16T17:43:27.079Z",
"data": {
"status": "NOT_VERIFIED"
},
"success": true,
"codeError": 0
}