Create user profile
curl --request POST \
--url https://api.example.com/api/v1/user/profileconst options = {method: 'POST'};
fetch('https://api.example.com/api/v1/user/profile', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.example.com/api/v1/user/profile"
response = requests.post(url)
print(response.text)User profile
Create user profile
Create the personal profile for an end-user — required before starting KYC.
POST
/
api
/
v1
/
user
/
profile
Create user profile
curl --request POST \
--url https://api.example.com/api/v1/user/profileconst options = {method: 'POST'};
fetch('https://api.example.com/api/v1/user/profile', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.example.com/api/v1/user/profile"
response = requests.post(url)
print(response.text)Requires
X-Api-Key and X-Api-Secret headers. Pass userId in the request body — no JWT required.After creating the profile, call
GET /api/v1/user/profile/check-completion to confirm all required fields are present before moving to KYC. Missing fields are listed in missingFields — use PATCH /api/v1/user/profile to fill them in.Request
POST /api/v1/user/profile
X-Api-Key: <your-api-key>
X-Api-Secret: <your-api-secret>
Content-Type: application/json
Body
| Field | Type | Required | Description |
|---|---|---|---|
userId | string (UUID) | Yes | Qash user ID from Register user |
firstName | string | Yes | User’s legal first name |
lastName | string | Yes | User’s legal last name |
middleName | string | No | Middle name |
dateOfBirth | string | No | YYYY-MM-DD format |
nationality | string | No | ISO 3166-1 alpha-2 country code — e.g. "MX" |
gender | string | No | "male", "female", "other", "prefer_not_to_say" |
governmentIdType | string | No | "passport", "national_id", "drivers_license", "other" |
governmentIdNumber | string | No | Document number |
governmentIdCountry | string | No | Issuing country — ISO 3166-1 alpha-2 |
governmentIdExpiry | string | No | YYYY-MM-DD format |
addressLine1 | string | No | Street address |
addressLine2 | string | No | Apartment, suite, etc. |
city | string | No | City |
stateProvince | string | No | State or province |
postalCode | string | No | Postal / ZIP code |
addressCountry | string | No | ISO 3166-1 alpha-2 — e.g. "MX" |
occupation | string | No | Occupation |
annualSalary | string | No | Annual salary range |
accountPurpose | string | No | Stated purpose for the Qash account |
expectedMonthlyVolume | string | No | Expected monthly transaction volume |
isPep | boolean | No | Politically Exposed Person flag — defaults to false |
isSanctioned | boolean | No | Sanctions flag — defaults to false |
usCitizen | boolean | No | US citizen flag — defaults to false |
acceptedTerms | boolean | No | User accepted Qash terms of service |
company | string | No | Employer or company name, if relevant to occupation/accountPurpose |
naicsCode | string | No | NAICS industry code, if relevant to accountPurpose |
{
"userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"firstName": "Juan",
"lastName": "García",
"dateOfBirth": "1990-05-15",
"nationality": "MX",
"gender": "male",
"governmentIdType": "passport",
"governmentIdNumber": "A1234567",
"governmentIdCountry": "MX",
"addressLine1": "Av. Insurgentes Sur 1234",
"city": "Ciudad de México",
"stateProvince": "CDMX",
"postalCode": "06600",
"addressCountry": "MX",
"occupation": "engineer",
"annualSalary": "50000-100000",
"accountPurpose": "personal_savings",
"expectedMonthlyVolume": "5000-10000",
"isPep": false,
"isSanctioned": false,
"usCitizen": false,
"acceptedTerms": true
}
Response
201 Created{
"success": true,
"data": {
"profile": {
"id": "bfc7083b-75a2-11f1-86bf-42010a400007",
"userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"firstName": "Juan",
"lastName": "García",
"fullName": "Juan García",
"dateOfBirth": "1990-05-15T00:00:00.000Z",
"nationality": "MX",
"gender": "male",
"governmentIdType": "passport",
"governmentIdNumber": "A1234567",
"governmentIdCountry": "MX",
"addressLine1": "Av. Insurgentes Sur 1234",
"city": "Ciudad de México",
"stateProvince": "CDMX",
"postalCode": "06600",
"addressCountry": "MX",
"occupation": "engineer",
"isPep": false,
"isSanctioned": false,
"usCitizen": false,
"acceptedTerms": "2026-06-01T00:00:00.000Z",
"createdAt": "2026-06-01T00:00:00.000Z",
"updatedAt": "2026-06-01T00:00:00.000Z"
}
}
}
Errors
| HTTP status | Error | Cause |
|---|---|---|
400 | Validation message | Missing required field or invalid format |
400 | Missing userId in request body or query params | userId not included in the body |
401 | Invalid partner credentials | Wrong or missing X-Api-Key / X-Api-Secret |
403 | User does not belong to this partner | userId belongs to a different partner |
404 | User not found | userId does not exist |
⌘I