# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/global-payout-batches \
--body '<request-json>'Create a global payout batch.
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/global-payout-batches"
payload = {
"onBehalfOf": "cus_abc123",
"source": {
"currency": "USDT",
"paymentRail": "ETHEREUM"
},
"paymentReason": "PAYMENT_FOR_GOODS_AND_SERVICES",
"items": [
{
"amount": {
"currency": "USDT",
"rawValue": "1000000"
},
"destination": {
"type": "EXTERNAL_WALLET",
"address": "0x1234567890abcdef1234567890abcdef12345678"
},
"counterpartyId": "cp_abc123",
"beneficiaryType": "INDIVIDUAL",
"beneficiaryName": "Jane Doe",
"clientReferenceId": "payroll_line_42",
"developerFeeFixed": 100,
"developerFeePercent": 0.015
}
],
"confirm": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
onBehalfOf: 'cus_abc123',
source: {currency: 'USDT', paymentRail: 'ETHEREUM'},
paymentReason: 'PAYMENT_FOR_GOODS_AND_SERVICES',
items: [
{
amount: {currency: 'USDT', rawValue: '1000000'},
destination: {type: 'EXTERNAL_WALLET', address: '0x1234567890abcdef1234567890abcdef12345678'},
counterpartyId: 'cp_abc123',
beneficiaryType: 'INDIVIDUAL',
beneficiaryName: 'Jane Doe',
clientReferenceId: 'payroll_line_42',
developerFeeFixed: 100,
developerFeePercent: 0.015
}
],
confirm: true
})
};
fetch('https://sandbox.api.infinite.dev/v1/global-payout-batches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.api.infinite.dev/v1/global-payout-batches",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'onBehalfOf' => 'cus_abc123',
'source' => [
'currency' => 'USDT',
'paymentRail' => 'ETHEREUM'
],
'paymentReason' => 'PAYMENT_FOR_GOODS_AND_SERVICES',
'items' => [
[
'amount' => [
'currency' => 'USDT',
'rawValue' => '1000000'
],
'destination' => [
'type' => 'EXTERNAL_WALLET',
'address' => '0x1234567890abcdef1234567890abcdef12345678'
],
'counterpartyId' => 'cp_abc123',
'beneficiaryType' => 'INDIVIDUAL',
'beneficiaryName' => 'Jane Doe',
'clientReferenceId' => 'payroll_line_42',
'developerFeeFixed' => 100,
'developerFeePercent' => 0.015
]
],
'confirm' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.infinite.dev/v1/global-payout-batches"
payload := strings.NewReader("{\n \"onBehalfOf\": \"cus_abc123\",\n \"source\": {\n \"currency\": \"USDT\",\n \"paymentRail\": \"ETHEREUM\"\n },\n \"paymentReason\": \"PAYMENT_FOR_GOODS_AND_SERVICES\",\n \"items\": [\n {\n \"amount\": {\n \"currency\": \"USDT\",\n \"rawValue\": \"1000000\"\n },\n \"destination\": {\n \"type\": \"EXTERNAL_WALLET\",\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\"\n },\n \"counterpartyId\": \"cp_abc123\",\n \"beneficiaryType\": \"INDIVIDUAL\",\n \"beneficiaryName\": \"Jane Doe\",\n \"clientReferenceId\": \"payroll_line_42\",\n \"developerFeeFixed\": 100,\n \"developerFeePercent\": 0.015\n }\n ],\n \"confirm\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.api.infinite.dev/v1/global-payout-batches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"onBehalfOf\": \"cus_abc123\",\n \"source\": {\n \"currency\": \"USDT\",\n \"paymentRail\": \"ETHEREUM\"\n },\n \"paymentReason\": \"PAYMENT_FOR_GOODS_AND_SERVICES\",\n \"items\": [\n {\n \"amount\": {\n \"currency\": \"USDT\",\n \"rawValue\": \"1000000\"\n },\n \"destination\": {\n \"type\": \"EXTERNAL_WALLET\",\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\"\n },\n \"counterpartyId\": \"cp_abc123\",\n \"beneficiaryType\": \"INDIVIDUAL\",\n \"beneficiaryName\": \"Jane Doe\",\n \"clientReferenceId\": \"payroll_line_42\",\n \"developerFeeFixed\": 100,\n \"developerFeePercent\": 0.015\n }\n ],\n \"confirm\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/global-payout-batches")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"onBehalfOf\": \"cus_abc123\",\n \"source\": {\n \"currency\": \"USDT\",\n \"paymentRail\": \"ETHEREUM\"\n },\n \"paymentReason\": \"PAYMENT_FOR_GOODS_AND_SERVICES\",\n \"items\": [\n {\n \"amount\": {\n \"currency\": \"USDT\",\n \"rawValue\": \"1000000\"\n },\n \"destination\": {\n \"type\": \"EXTERNAL_WALLET\",\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\"\n },\n \"counterpartyId\": \"cp_abc123\",\n \"beneficiaryType\": \"INDIVIDUAL\",\n \"beneficiaryName\": \"Jane Doe\",\n \"clientReferenceId\": \"payroll_line_42\",\n \"developerFeeFixed\": 100,\n \"developerFeePercent\": 0.015\n }\n ],\n \"confirm\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "pb_abc123",
"organizationId": "org_abc123",
"onBehalfOf": "cus_abc123",
"source": {
"currency": "USDT",
"paymentRail": "ETHEREUM"
},
"status": "DRAFT",
"paymentReason": "PAYMENT_FOR_GOODS_AND_SERVICES",
"items": [
{
"id": "pbi_abc123",
"position": 0,
"amount": {
"currency": "USD",
"exponent": 2,
"value": "12345",
"displayValue": "123.45"
},
"counterpartyId": "cp_abc123",
"destination": {
"type": "EXTERNAL_WALLET",
"currency": "USDT",
"paymentRail": "ETHEREUM",
"accountId": "ewa_abc123",
"address": "0x1234567890abcdef1234567890abcdef12345678"
},
"status": "PENDING",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"transferId": "tfr_abc123",
"clientReferenceId": "payroll_line_42",
"developerFeeFixed": 100,
"developerFeePercent": 0.015,
"errorMessage": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"rejectionReason": "<string>"
}Create a global payout batch
Create a global payout batch. Supports USDT and USDC across their available networks (USDT on Ethereum, Arbitrum, Polygon, Solana, Tron; USDC on Ethereum, Base, Arbitrum, Polygon, Solana). Defaults to DRAFT unless confirm is true (PENDING_APPROVAL). Use Idempotency-Key to prevent duplicates.
# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/global-payout-batches \
--body '<request-json>'Create a global payout batch.
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/global-payout-batches"
payload = {
"onBehalfOf": "cus_abc123",
"source": {
"currency": "USDT",
"paymentRail": "ETHEREUM"
},
"paymentReason": "PAYMENT_FOR_GOODS_AND_SERVICES",
"items": [
{
"amount": {
"currency": "USDT",
"rawValue": "1000000"
},
"destination": {
"type": "EXTERNAL_WALLET",
"address": "0x1234567890abcdef1234567890abcdef12345678"
},
"counterpartyId": "cp_abc123",
"beneficiaryType": "INDIVIDUAL",
"beneficiaryName": "Jane Doe",
"clientReferenceId": "payroll_line_42",
"developerFeeFixed": 100,
"developerFeePercent": 0.015
}
],
"confirm": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
onBehalfOf: 'cus_abc123',
source: {currency: 'USDT', paymentRail: 'ETHEREUM'},
paymentReason: 'PAYMENT_FOR_GOODS_AND_SERVICES',
items: [
{
amount: {currency: 'USDT', rawValue: '1000000'},
destination: {type: 'EXTERNAL_WALLET', address: '0x1234567890abcdef1234567890abcdef12345678'},
counterpartyId: 'cp_abc123',
beneficiaryType: 'INDIVIDUAL',
beneficiaryName: 'Jane Doe',
clientReferenceId: 'payroll_line_42',
developerFeeFixed: 100,
developerFeePercent: 0.015
}
],
confirm: true
})
};
fetch('https://sandbox.api.infinite.dev/v1/global-payout-batches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.api.infinite.dev/v1/global-payout-batches",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'onBehalfOf' => 'cus_abc123',
'source' => [
'currency' => 'USDT',
'paymentRail' => 'ETHEREUM'
],
'paymentReason' => 'PAYMENT_FOR_GOODS_AND_SERVICES',
'items' => [
[
'amount' => [
'currency' => 'USDT',
'rawValue' => '1000000'
],
'destination' => [
'type' => 'EXTERNAL_WALLET',
'address' => '0x1234567890abcdef1234567890abcdef12345678'
],
'counterpartyId' => 'cp_abc123',
'beneficiaryType' => 'INDIVIDUAL',
'beneficiaryName' => 'Jane Doe',
'clientReferenceId' => 'payroll_line_42',
'developerFeeFixed' => 100,
'developerFeePercent' => 0.015
]
],
'confirm' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.infinite.dev/v1/global-payout-batches"
payload := strings.NewReader("{\n \"onBehalfOf\": \"cus_abc123\",\n \"source\": {\n \"currency\": \"USDT\",\n \"paymentRail\": \"ETHEREUM\"\n },\n \"paymentReason\": \"PAYMENT_FOR_GOODS_AND_SERVICES\",\n \"items\": [\n {\n \"amount\": {\n \"currency\": \"USDT\",\n \"rawValue\": \"1000000\"\n },\n \"destination\": {\n \"type\": \"EXTERNAL_WALLET\",\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\"\n },\n \"counterpartyId\": \"cp_abc123\",\n \"beneficiaryType\": \"INDIVIDUAL\",\n \"beneficiaryName\": \"Jane Doe\",\n \"clientReferenceId\": \"payroll_line_42\",\n \"developerFeeFixed\": 100,\n \"developerFeePercent\": 0.015\n }\n ],\n \"confirm\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.api.infinite.dev/v1/global-payout-batches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"onBehalfOf\": \"cus_abc123\",\n \"source\": {\n \"currency\": \"USDT\",\n \"paymentRail\": \"ETHEREUM\"\n },\n \"paymentReason\": \"PAYMENT_FOR_GOODS_AND_SERVICES\",\n \"items\": [\n {\n \"amount\": {\n \"currency\": \"USDT\",\n \"rawValue\": \"1000000\"\n },\n \"destination\": {\n \"type\": \"EXTERNAL_WALLET\",\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\"\n },\n \"counterpartyId\": \"cp_abc123\",\n \"beneficiaryType\": \"INDIVIDUAL\",\n \"beneficiaryName\": \"Jane Doe\",\n \"clientReferenceId\": \"payroll_line_42\",\n \"developerFeeFixed\": 100,\n \"developerFeePercent\": 0.015\n }\n ],\n \"confirm\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/global-payout-batches")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"onBehalfOf\": \"cus_abc123\",\n \"source\": {\n \"currency\": \"USDT\",\n \"paymentRail\": \"ETHEREUM\"\n },\n \"paymentReason\": \"PAYMENT_FOR_GOODS_AND_SERVICES\",\n \"items\": [\n {\n \"amount\": {\n \"currency\": \"USDT\",\n \"rawValue\": \"1000000\"\n },\n \"destination\": {\n \"type\": \"EXTERNAL_WALLET\",\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\"\n },\n \"counterpartyId\": \"cp_abc123\",\n \"beneficiaryType\": \"INDIVIDUAL\",\n \"beneficiaryName\": \"Jane Doe\",\n \"clientReferenceId\": \"payroll_line_42\",\n \"developerFeeFixed\": 100,\n \"developerFeePercent\": 0.015\n }\n ],\n \"confirm\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "pb_abc123",
"organizationId": "org_abc123",
"onBehalfOf": "cus_abc123",
"source": {
"currency": "USDT",
"paymentRail": "ETHEREUM"
},
"status": "DRAFT",
"paymentReason": "PAYMENT_FOR_GOODS_AND_SERVICES",
"items": [
{
"id": "pbi_abc123",
"position": 0,
"amount": {
"currency": "USD",
"exponent": 2,
"value": "12345",
"displayValue": "123.45"
},
"counterpartyId": "cp_abc123",
"destination": {
"type": "EXTERNAL_WALLET",
"currency": "USDT",
"paymentRail": "ETHEREUM",
"accountId": "ewa_abc123",
"address": "0x1234567890abcdef1234567890abcdef12345678"
},
"status": "PENDING",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"transferId": "tfr_abc123",
"clientReferenceId": "payroll_line_42",
"developerFeeFixed": 100,
"developerFeePercent": 0.015,
"errorMessage": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"rejectionReason": "<string>"
}Authorizations
API Key in Bearer format (e.g., Bearer sk_test_...)
Headers
API key
Optional idempotency key (UUID) to prevent duplicate batch creation
Body
Customer ID on whose behalf the batch is created.
"cus_abc123"
Source funding details. Draws the chosen stablecoin from the customer's provider-held balance on the chosen network.
Show child attributes
Show child attributes
Reason for the payments (compliance/AML). Applied to every item.
CAPITAL_CONTRIBUTIONS, CHARITABLE_CONTRIBUTIONS, CONSULTING_FEES, CORPORATE_TAX_PAYMENTS, DOWN_PAYMENTS_FOR_REAL_ESTATE, EDUCATION_FEES, EMPLOYEE_SALARIES_OR_WAGES, EXPENSES_REIMBURSEMENT, GIFTS, GOVERNMENT_GRANTS, INCOME_TAX_PAYMENTS, INHERITANCE_PAYMENTS, INSURANCE_CLAIM_PAYOUTS, INSURANCE_PREMIUM_PAYMENTS, INVESTMENTS, LOAN_ADVANCES, MORTGAGE_PAYMENTS, OTHER, PAYMENT_FOR_GOODS_AND_SERVICES, PERSONAL_TRANSFERS, REAL_ESTATE_PURCHASES, REMITTANCES, RENT, REPAYMENT_OF_LOANS, ROYALTIES, SELF, TRADE_SETTLEMENT, TRUST_FUND_DISTRIBUTIONS, UTILITY_BILLS, WELFARE_OR_BENEFITS, WINNINGS_AND_PRIZES "PAYMENT_FOR_GOODS_AND_SERVICES"
Payout items (max 100). Each item pays the batch source stablecoin on the source network to an external wallet.
1 - 100 elementsShow child attributes
Show child attributes
If true, submit the batch for review immediately. If false or omitted, the batch is created in DRAFT and can be confirmed later.
Response
Global payout batch created
"pb_abc123"
"org_abc123"
"cus_abc123"
Show child attributes
Show child attributes
DRAFT, PENDING_APPROVAL, PROCESSING, COMPLETED, PARTIALLY_COMPLETED, FAILED, CANCELLED, REJECTED "DRAFT"
CAPITAL_CONTRIBUTIONS, CHARITABLE_CONTRIBUTIONS, CONSULTING_FEES, CORPORATE_TAX_PAYMENTS, DOWN_PAYMENTS_FOR_REAL_ESTATE, EDUCATION_FEES, EMPLOYEE_SALARIES_OR_WAGES, EXPENSES_REIMBURSEMENT, GIFTS, GOVERNMENT_GRANTS, INCOME_TAX_PAYMENTS, INHERITANCE_PAYMENTS, INSURANCE_CLAIM_PAYOUTS, INSURANCE_PREMIUM_PAYMENTS, INVESTMENTS, LOAN_ADVANCES, MORTGAGE_PAYMENTS, OTHER, PAYMENT_FOR_GOODS_AND_SERVICES, PERSONAL_TRANSFERS, REAL_ESTATE_PURCHASES, REMITTANCES, RENT, REPAYMENT_OF_LOANS, ROYALTIES, SELF, TRADE_SETTLEMENT, TRUST_FUND_DISTRIBUTIONS, UTILITY_BILLS, WELFARE_OR_BENEFITS, WINNINGS_AND_PRIZES "PAYMENT_FOR_GOODS_AND_SERVICES"
Show child attributes
Show child attributes
Reason when the batch was rejected during review.
Was this page helpful?