Create a draft batch
curl --request POST \
--url https://api.mansa.xyz/api/v2/payouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"orders": [
{
"sender_profile_id": "...",
"beneficiary_profile_id": "...",
"beneficiary_amount": "10000.00",
"beneficiary_currency": "USD",
"fee_type": "SHA",
"purpose_code": "GDSP"
}
]
}
'import requests
url = "https://api.mansa.xyz/api/v2/payouts"
payload = { "orders": [
{
"sender_profile_id": "...",
"beneficiary_profile_id": "...",
"beneficiary_amount": "10000.00",
"beneficiary_currency": "USD",
"fee_type": "SHA",
"purpose_code": "GDSP"
}
] }
headers = {
"x-api-key": "<api-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<api-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
orders: [
{
sender_profile_id: '...',
beneficiary_profile_id: '...',
beneficiary_amount: '10000.00',
beneficiary_currency: 'USD',
fee_type: 'SHA',
purpose_code: 'GDSP'
}
]
})
};
fetch('https://api.mansa.xyz/api/v2/payouts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"batch": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "AWAITING_CONFIRMATION",
"total_count": 123,
"completed_count": 123,
"failed_count": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"client_reference": "<string>"
},
"orders": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"beneficiary_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fee_type": "OUR",
"purpose_code": "SNTR",
"beneficiary_amount": "<string>",
"beneficiary_currency": "<string>",
"source_currency": "USDT",
"status": "DRAFT",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"fee_amount": "<string>",
"source_amount": "<string>",
"failure_message": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"client_reference": "<string>"
}
]
}{
"statusCode": 400,
"message": "sender is not ready"
}{
"statusCode": 401,
"message": "Unauthorized"
}{
"statusCode": 422,
"message": [
"legal_name should not be empty",
"country_code must be a valid ISO 3166-1 alpha-2 code"
]
}{
"statusCode": 429,
"message": "Too many requests"
}{
"statusCode": 500,
"message": "Internal server error"
}Orders & Batches
Create a draft batch
Creates and auto-quotes one or more payout orders. A single payment is a batch of one — there’s no separate single-order endpoint. Nothing is charged and no funds move until Confirm a batch.
POST
/
api
/
v2
/
payouts
Create a draft batch
curl --request POST \
--url https://api.mansa.xyz/api/v2/payouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"orders": [
{
"sender_profile_id": "...",
"beneficiary_profile_id": "...",
"beneficiary_amount": "10000.00",
"beneficiary_currency": "USD",
"fee_type": "SHA",
"purpose_code": "GDSP"
}
]
}
'import requests
url = "https://api.mansa.xyz/api/v2/payouts"
payload = { "orders": [
{
"sender_profile_id": "...",
"beneficiary_profile_id": "...",
"beneficiary_amount": "10000.00",
"beneficiary_currency": "USD",
"fee_type": "SHA",
"purpose_code": "GDSP"
}
] }
headers = {
"x-api-key": "<api-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<api-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
orders: [
{
sender_profile_id: '...',
beneficiary_profile_id: '...',
beneficiary_amount: '10000.00',
beneficiary_currency: 'USD',
fee_type: 'SHA',
purpose_code: 'GDSP'
}
]
})
};
fetch('https://api.mansa.xyz/api/v2/payouts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"batch": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "AWAITING_CONFIRMATION",
"total_count": 123,
"completed_count": 123,
"failed_count": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"client_reference": "<string>"
},
"orders": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"beneficiary_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fee_type": "OUR",
"purpose_code": "SNTR",
"beneficiary_amount": "<string>",
"beneficiary_currency": "<string>",
"source_currency": "USDT",
"status": "DRAFT",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"fee_amount": "<string>",
"source_amount": "<string>",
"failure_message": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"client_reference": "<string>"
}
]
}{
"statusCode": 400,
"message": "sender is not ready"
}{
"statusCode": 401,
"message": "Unauthorized"
}{
"statusCode": 422,
"message": [
"legal_name should not be empty",
"country_code must be a valid ISO 3166-1 alpha-2 code"
]
}{
"statusCode": 429,
"message": "Too many requests"
}{
"statusCode": 500,
"message": "Internal server error"
}Authorizations
API key for authentication
ES256 JWT signed by the private key registered to the API key above. Claims: sub (=API key), uri, nbf, iat, exp, and bodyHash (HMAC-SHA512 of uri + rawBody + nbf using a shared secret, base64).
Body
application/json

