Inyo

Push Transaction

Push (payout) transactions transfer funds to a recipient. The Inyo Gateway supports multiple destination methods:

  • Cards β€” Visa Direct / Mastercard Send (domestic and cross-border)
  • Bank Accounts β€” Cross-border account payouts
  • PIX β€” Brazilian instant payments
  • Wallets β€” Digital wallet payouts

Endpoint

POST https://{FQDN}/v2/payment

Headers:

HeaderValue
AuthorizationBearer {accessToken}
Content-Typeapplication/json

Request Structure

The sender and recipient objects use the same flat structure as a pull transaction β€” firstName, lastName, and address. The recipient additionally carries a paymentMethod describing the payout destination.

Root Object

FieldTypeRequiredDescription
externalPaymentIdstringYesYour unique payment identifier (idempotency key)
fxIdstringYesFX quote identifier from the Foreign Exchange endpoint
ipAddressstringYesOriginator's IPv4 or IPv6 address
paymentTypestringYes"PUSH"
amountobjectYesSource amount (what you're sending)
recipientAmountobjectYesDestination amount (what recipient receives)
senderobjectYesSender details and address
recipientobjectYesRecipient details, address, and payout method
capturebooleanNoCards only β€” false for pre-auth, true to capture immediately
additionalDataobjectNoOptional key/value metadata attached to the payment

amount Object (Source)

FieldTypeRequiredDescription
totalnumberYesAmount to send (must be β‰₯ 1)
currencystringYesSource currency (ISO 4217, e.g., "USD")

recipientAmount Object (Destination)

FieldTypeRequiredDescription
totalnumberYesAmount recipient receives
currencystringYesDestination currency (ISO 4217, e.g., "BDT")

sender Object

FieldTypeRequiredDescription
firstNamestringYesSender's first name
lastNamestringYesSender's last name
addressobjectYesSender's address

sender.address Object

FieldTypeRequiredDescription
countryCodestringYesISO Alpha-3 country code (e.g., "USA")
stateCodestringYesState abbreviation (e.g., "MA")
citystringYesCity name
line1stringYesStreet address line 1
line2stringNoStreet address line 2
zipCodestringYesPostal/ZIP code

recipient Object

FieldTypeRequiredDescription
firstNamestringYesRecipient's first name
lastNamestringYesRecipient's last name
addressobjectYesRecipient's address
paymentMethodobjectYesPayout method and details

recipient.address Object

Same fields as sender.address.

The recipient identity and address fields vary by destination country. Which fields are required and their validation rules are not fixed β€” they change per corridor. For example, the Philippines requires a stateCode from a fixed enum of province codes, Brazil requires a CPF via a documents array (11 digits, check-digit validated), and most EU corridors make the address optional. Always query the Person Schema (GET /schema/person?countryCode=<ISO3>) for the destination country and build the recipient from the returned schema rather than hardcoding the fields above.

recipient.paymentMethod β€” Card

FieldTypeRequiredDescription
typestringYes"CARD"
cardTokenIdstringYesTokenized card identifier

recipient.paymentMethod β€” Bank Account

FieldTypeRequiredDescription
typestringYes"BANK_DEPOSIT"
countryCodestringYesISO Alpha-3 country code of the destination bank (e.g., "BGD")
bankCodestringYesDestination bank/branch code
accountNumberstringYesRecipient's bank account number
walletTypestringNoAccount identifier type (e.g., "PHONENUMBER")

The bank-account fields vary by destination country. The set of fields, which are required, and their validation rules are not fixed β€” they change per corridor. For example, Brazil requires a branch code (routingNumber / agΓͺncia) and a CPF document, while Mexico omits routingNumber entirely because the CLABE (accountNumber) already encodes the bank. Always query the Account Schema (GET /schema/account?countryCode=<ISO3>) for the destination country and build paymentMethod from the returned schema rather than hardcoding the fields above. The table above is one concrete example (Bangladesh), not the canonical shape for every country.

recipient.paymentMethod β€” PIX

FieldTypeRequiredDescription
typestringYes"PIX"
pix.keyTypestringYes"EMAIL", "PHONE", "DOCUMENT" (CPF/CNPJ), or "EVP" (random key)
pix.keystringYesThe PIX key value

recipient.paymentMethod β€” Wallet

FieldTypeRequiredDescription
typestringYes"WALLET"
wallet.walletIdstringYesWallet identifier (email or ID)

Example β€” Push to Card

curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "push-card-001",
    "fxId": "65a4d3b6-eb33-4614-a3f6-d2d6cc9fb047",
    "ipAddress": "203.0.113.42",
    "paymentType": "PUSH",
    "capture": false,
    "amount": {
      "total": 123,
      "currency": "USD"
    },
    "recipientAmount": {
      "total": 103.930818,
      "currency": "EUR"
    },
    "sender": {
      "firstName": "John",
      "lastName": "Smith",
      "address": {
        "countryCode": "USA",
        "stateCode": "NY",
        "city": "New York",
        "line1": "123 Main Street",
        "line2": "Apt 4B",
        "zipCode": "10001"
      }
    },
    "recipient": {
      "firstName": "Carlos",
      "lastName": "GarcΓ­a",
      "address": {
        "countryCode": "ESP",
        "stateCode": "MD",
        "city": "Madrid",
        "line1": "Calle Gran VΓ­a, 42",
        "line2": "Piso 3B",
        "zipCode": "28013"
      },
      "paymentMethod": {
        "type": "CARD",
        "cardTokenId": "778303bb-1441-4378-b923-77ecf414cffd"
      }
    }
  }'

Example β€” Push to Bank Account

curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "push-bank-001",
    "fxId": "65a4d3b6-eb33-4614-a3f6-d2d6cc9fb047",
    "ipAddress": "203.0.113.42",
    "paymentType": "PUSH",
    "amount": {
      "total": 5,
      "currency": "USD"
    },
    "recipientAmount": {
      "total": 610.25,
      "currency": "BDT"
    },
    "sender": {
      "firstName": "Samir",
      "lastName": "Filho",
      "address": {
        "countryCode": "USA",
        "stateCode": "MA",
        "city": "Somerville",
        "line1": "45 prospect st",
        "zipCode": "02143"
      }
    },
    "recipient": {
      "firstName": "Rana",
      "lastName": "Hossain",
      "address": {
        "countryCode": "BGD",
        "city": "Joypurhat",
        "line1": "Ansar Ali Complex, 110/1 Sadar Road",
        "zipCode": "5900"
      },
      "paymentMethod": {
        "type": "BANK_DEPOSIT",
        "countryCode": "BGD",
        "bankCode": "090120107",
        "accountNumber": "00002481510154436",
        "walletType": "PHONENUMBER"
      }
    },
    "additionalData": {}
  }'

Example β€” Push to PIX

curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "push-pix-001",
    "fxId": "a1b2c3d4-eb33-4614-a3f6-d2d6cc9fb047",
    "ipAddress": "203.0.113.42",
    "paymentType": "PUSH",
    "amount": {
      "total": 55,
      "currency": "USD"
    },
    "recipientAmount": {
      "total": 273.63,
      "currency": "BRL"
    },
    "sender": {
      "firstName": "John",
      "lastName": "Smith",
      "address": {
        "countryCode": "USA",
        "stateCode": "CA",
        "city": "Los Angeles",
        "line1": "4429 Candlewood St",
        "zipCode": "90712"
      }
    },
    "recipient": {
      "firstName": "Carlos",
      "lastName": "Silva",
      "address": {
        "countryCode": "BRA",
        "stateCode": "RJ",
        "city": "Rio de Janeiro",
        "line1": "Rua das Laranjeiras 321",
        "zipCode": "22240-005"
      },
      "paymentMethod": {
        "type": "PIX",
        "pix": {
          "keyType": "DOCUMENT",
          "key": "01034861788"
        }
      }
    }
  }'

Example β€” Push to Wallet

curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "push-wallet-001",
    "fxId": "a1b2c3d4-eb33-4614-a3f6-d2d6cc9fb047",
    "ipAddress": "203.0.113.42",
    "paymentType": "PUSH",
    "amount": {
      "total": 100,
      "currency": "USD"
    },
    "recipientAmount": {
      "total": 497.50,
      "currency": "BRL"
    },
    "sender": {
      "firstName": "Jane",
      "lastName": "Doe",
      "address": {
        "countryCode": "USA",
        "stateCode": "NY",
        "city": "New York",
        "line1": "456 Park Avenue",
        "zipCode": "10022"
      }
    },
    "recipient": {
      "firstName": "Ana",
      "lastName": "Souza",
      "address": {
        "countryCode": "BRA",
        "stateCode": "RJ",
        "city": "Rio de Janeiro",
        "line1": "Rua da AlfΓ’ndega 45",
        "zipCode": "20010-030"
      },
      "paymentMethod": {
        "type": "WALLET",
        "wallet": {
          "walletId": "[email protected]"
        }
      }
    }
  }'

Foreign Exchange

For cross-currency push payments, fetch an FX rate before submitting. Pass the returned fxId in your payment request β€” the gateway applies the quoted rate associated with that fxId.

See the full Foreign Exchange documentation for detailed request/response schemas, including the v2 endpoint with payment-method-specific rates.

Quick example (v1):

curl -X POST https://{FQDN}/foreign-exchange \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "sourceCurrencyCode": "USD",
    "destinationCurrencyCode": "BRL"
  }'
{
  "fxId": "a1b2c3d4-...",
  "conversionRate": 4.975,
  "quoteIdExpiryDateTime": "2025-03-31T15:30:00Z"
}

Note: FX quotes have a limited validity period. Check quoteIdExpiryDateTime and refresh if expired.