curl --request POST \
--url https://sg.sandbox.api.reap.global/accounts/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'Reap-Version: <reap-version>' \
--data '
{
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ownerType": "USER",
"signers": {}
}
'const options = {
method: 'POST',
headers: {
'Reap-Version': '<reap-version>',
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ownerId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
ownerType: 'USER',
signers: {}
})
};
fetch('https://sg.sandbox.api.reap.global/accounts/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/accounts/"
payload = {
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ownerType": "USER",
"signers": {}
}
headers = {
"Reap-Version": "<reap-version>",
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "ACTIVE",
"ownerType": "USER",
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"chainAddresses": [
{
"chainId": "ETHEREUM_MAINNET",
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fA21"
}
],
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:35:00Z"
}{
"error": {
"code": "INVALID_ACCOUNT_OWNER",
"message": "<string>",
"detail": {}
}
}Create account
Creates a new account for the given owner. Set ownerType to USER (default) or COMPANY (corporate programs only) to choose the owner type. The owner must have an approved application (KYC for users, KYB for companies). For projects that provision user wallets (USER_FUNDED funding model), deposit addresses are created on all enabled chains and signer data is required (address + signed auth message from GET /accounts/auth-message). For projects without user wallets (PROGRAM_FUNDED funding model), no deposit addresses are provisioned and signers are not required.
curl --request POST \
--url https://sg.sandbox.api.reap.global/accounts/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'Reap-Version: <reap-version>' \
--data '
{
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ownerType": "USER",
"signers": {}
}
'const options = {
method: 'POST',
headers: {
'Reap-Version': '<reap-version>',
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ownerId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
ownerType: 'USER',
signers: {}
})
};
fetch('https://sg.sandbox.api.reap.global/accounts/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/accounts/"
payload = {
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ownerType": "USER",
"signers": {}
}
headers = {
"Reap-Version": "<reap-version>",
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "ACTIVE",
"ownerType": "USER",
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"chainAddresses": [
{
"chainId": "ETHEREUM_MAINNET",
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fA21"
}
],
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:35:00Z"
}{
"error": {
"code": "INVALID_ACCOUNT_OWNER",
"message": "<string>",
"detail": {}
}
}Authorizations
API key as Bearer token
Headers
API version (YYYY-MM-DD)
2025-02-14 "2025-02-14"
Unique key for safely retrying this request. Up to 255 characters; we recommend a UUIDv4. The first request executes and its response is cached; subsequent requests with the same key replay the cached response (24h retention).
1 - 255Body
Owner entity ID. A user ID when ownerType is USER, or a company ID when ownerType is COMPANY.
Owner type for the account. USER creates a user-owned account; COMPANY creates a company-owned account, available in corporate programs only. Defaults to USER when omitted.
USER, COMPANY "USER"
Signer configurations per protocol. Required for projects that provision user wallets (USER_FUNDED funding model); omitted for projects without user wallets (PROGRAM_FUNDED). The signer authorizes withdrawals from the account. Use GET /accounts/auth-message to get the message to sign.
Show child attributes
Show child attributes
Response
Response for status 200
Unique account identifier
Current account status
ACTIVE, RESTRICTED "ACTIVE"
Type of entity that owns this account
USER, COMPANY, PROJECT "USER"
Owner entity ID (user or company). Null for PROJECT-owned master accounts.
Deposit addresses by chain. Empty for accounts without provisioned wallets (user accounts on PROGRAM_FUNDED projects).
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"