curl --request POST \
--url https://sg.sandbox.api.reap.global/users/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Reap-Version: <reap-version>' \
--data '
{
"email": "john.doe@partner.io",
"phoneNumber": "+14155552671",
"externalId": "cardholder_8f21a",
"firstName": "John",
"lastName": "Doe",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'const options = {
method: 'POST',
headers: {
'Reap-Version': '<reap-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: 'john.doe@partner.io',
phoneNumber: '+14155552671',
externalId: 'cardholder_8f21a',
firstName: 'John',
lastName: 'Doe',
companyId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://sg.sandbox.api.reap.global/users/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/users/"
payload = {
"email": "john.doe@partner.io",
"phoneNumber": "+14155552671",
"externalId": "cardholder_8f21a",
"firstName": "John",
"lastName": "Doe",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Reap-Version": "<reap-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "cardholder_8f21a",
"email": "john.doe@example.com",
"phoneNumber": "+14155552671",
"firstName": "John",
"lastName": "Doe",
"country": "US",
"dateOfBirth": "1990-05-15",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"application": {
"status": "NOT_STARTED",
"rejectionReason": "<string>",
"documents": [
{
"type": "IDENTITY",
"status": "PENDING"
}
]
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:35:00Z"
}{
"error": {
"code": "PHONE_NUMBER_ALREADY_EXISTS",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "USER_QUOTA_EXCEEDED",
"message": "<string>",
"detail": {}
}
}Create user
Creates a new user with the provided details. Phone number must be unique within the project, as is externalId when supplied. In CORPORATE mode, companyId is required.
curl --request POST \
--url https://sg.sandbox.api.reap.global/users/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Reap-Version: <reap-version>' \
--data '
{
"email": "john.doe@partner.io",
"phoneNumber": "+14155552671",
"externalId": "cardholder_8f21a",
"firstName": "John",
"lastName": "Doe",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'const options = {
method: 'POST',
headers: {
'Reap-Version': '<reap-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: 'john.doe@partner.io',
phoneNumber: '+14155552671',
externalId: 'cardholder_8f21a',
firstName: 'John',
lastName: 'Doe',
companyId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://sg.sandbox.api.reap.global/users/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/users/"
payload = {
"email": "john.doe@partner.io",
"phoneNumber": "+14155552671",
"externalId": "cardholder_8f21a",
"firstName": "John",
"lastName": "Doe",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Reap-Version": "<reap-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "cardholder_8f21a",
"email": "john.doe@example.com",
"phoneNumber": "+14155552671",
"firstName": "John",
"lastName": "Doe",
"country": "US",
"dateOfBirth": "1990-05-15",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"application": {
"status": "NOT_STARTED",
"rejectionReason": "<string>",
"documents": [
{
"type": "IDENTITY",
"status": "PENDING"
}
]
},
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:35:00Z"
}{
"error": {
"code": "PHONE_NUMBER_ALREADY_EXISTS",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "USER_QUOTA_EXCEEDED",
"message": "<string>",
"detail": {}
}
}Authorizations
API key as Bearer token
Headers
API version (YYYY-MM-DD)
2025-02-14 "2025-02-14"
Body
Request body for creating a new user
User email address (max 50 characters)
50^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$"john.doe@partner.io"
Phone number in E.164 format (e.g., +14155552671)
^\+[1-9]\d{6,14}$"+14155552671"
Your own identifier for this user (1-255 characters). Must be unique among your active users; a deleted user releases its value for reuse. Use it to look the user up later via the externalId filter on List users.
1 - 255"cardholder_8f21a"
User first name (1-100 characters). Optional - auto-populated from the verified KYC identity on application approval if omitted.
1 - 100"John"
User last name (1-100 characters). Optional - auto-populated from the verified KYC identity on application approval if omitted.
1 - 100"Doe"
Company ID (required in CORPORATE program mode)
Response
User resource
Unique user identifier
Your own identifier for this user, as supplied at creation. Null if none was provided.
"cardholder_8f21a"
User email address
^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$"john.doe@example.com"
Phone number in E.164 format
"+14155552671"
User first name. Null until provided by the client or backfilled from the verified KYC identity on approval.
"John"
User last name. Null until provided by the client or backfilled from the verified KYC identity on approval.
"Doe"
ISO 3166-1 alpha-2 country code
2"US"
Date of birth in YYYY-MM-DD format (populated from KYC)
"1990-05-15"
Company ID (set in CORPORATE program mode)
KYC application status
Show child attributes
Show child attributes
ISO 8601 timestamp of creation
"2024-01-15T10:30:00Z"
ISO 8601 timestamp of last update
"2024-01-15T10:35:00Z"