1. Payees
Artha All Module Api's
  • Introduction
  • Authentication
  • KYC/KYB Requirements
  • API Setup Guide
  • Products
    • List Products
      GET
    • Get Product
      GET
    • Get Customer Product Status
      GET
  • Customers
    • Create Customer
      POST
    • List Customers
      GET
    • Get Customer
      GET
    • Submit Applicant (KYC/KYB)
      POST
    • Create Onboarding Session
      POST
  • Wallets
    • Beneficiary
      • Create Crypto Beneficiary
      • Update Crypto Beneficiary
      • List Crypto Withdraw Beneficiaries
    • Create Wallet
      POST
    • Get Wallet Address
      GET
    • Get Customer Balances
      GET
    • List Wallets
      GET
    • List Withdrawals
      GET
    • List Withdrawal Networks
      GET
    • Preview Withdrawal Summary
      POST
    • Create Crypto Withdrawal
      POST
  • Cards
    • Issuance
      • Issue Card
      • List Cards
      • List Customer Cards
      • Get Card Details
      • Get Sensitive Card Details
    • Funding
      • Top Up Card
      • Get Card Balance
      • Get Top-Up Status
      • List Top-Up History
    • Operations
      • Resend Activation Code
      • Activate Card
      • Set Card PIN
      • Change Card PIN
      • Update Card Limits
      • Freeze Card
      • Unfreeze Card
      • Replace Card
      • Cancel Card
      • Get Card Limits
      • Show Card PIN Details
      • Get PIN View Iframe URL
      • Get PIN Change Iframe URL
      • Get PIN Set Iframe URL
      • Get Card View Iframe URL
      • Show Card PIN
  • Payees
    • Create a payee for a customer.
      POST
    • List a customer's payees.
      GET
    • Update a payee.
      PUT
    • Retrieve a payee by id.
      GET
    • Look up an existing payee.
      GET
    • List the currencies a payee can be created in.
      GET
    • List the accepted payment purpose codes for a payee.
      GET
    • List the countries a payee can be created in.
      GET
    • List currency/country pairings for payees.
      GET
    • List the accepted beneficiary relationship codes.
      GET
  • Payments
    • Onboarding
      • List the customer's payout-currency configuration sections.
      • Enable a payout-currency section for the customer.
      • Get the customer's terms-of-service acceptance status.
      • Enable or disable a payout-currency section.
    • Quote
      • List the currencies a beneficiary can be paid in under a product.
      • List the payout rails available for a product and beneficiary.
      • Create an FX quote giving the rate and fee for a cross-currency payout.
    • Order
      • Submit a payout order to send money to a beneficiary.
      • Retrieve the on-chain address to fund an order.
      • Retrieve the status and settlement detail of a payout order.
    • Lookups
      • List the accepted payment purpose codes for a payout.
      • List the accepted source-of-funds codes for a payout.
      • List the document types accepted on a payout order.
  • Banks
    • Accounts
      • Create Bank Account
      • Get Account Details
      • Get Account Issuance Status
    • Withdraw
      • Create Withdrawal Quote
      • List Withdrawal Purposes
      • Get Payment Schemes
      • Execute Withdrawal
  • Exchange
    • Quote
      • Get Exchange Rate
      • Create Price Quote
    • Order
      • Place Exchange Order
  • Transactions
    • List Transactions
    • Get Transaction Details
  • Utilities
    • List Currencies
    • List Countries
    • Get Fee Schedule
    • List Product Occupations
    • List Product Industry Codes
    • Upload File
  • Webhook's
    • Wallets Webhooks
    • Banks Webhooks
    • Payments Webhooks
    • Exchange Webhooks
    • Card Webhooks
  1. Payees

Create a payee for a customer.

POST
/api/v1/payments/payee
Prerequisites: customerId must exist on your platform; currency must be one returned by GET /api/v1/payments/payee/currencies for that customer.
Important: always send X-Idempotency-Key — retrying without it can create a duplicate payee. Which bankAccount sub-fields are required depends on the destination country/currency; see the bank-detail table in the Payee tag description.
Async vs sync: synchronous — the payee is created and returned in the same call (200 OK).
Related: discover currencies with GET /payee/currencies; populate purpose/relationship/country fields with GET /payee/purposes, GET /payee/relationships and GET /payee/countries.

⚠️ Required Fields#

FieldTypeDescriptionConstraints
customerIdstring (uuid)The customer this payee is being saved for. Must already exist on your platform.—
favouriteNamestringA partner-chosen display label for this payee (e.g. "Acme Supplier — EUR"). Shown back to you on GET/list; not shown to the beneficiary.minLength 1; maxLength 100; pattern ^[\p{L}\p{N} .,'&\-]{1,100}$
currencystringThe currency this payee will be paid in. Check GET /payee/currencies for the currencies enabled for this customer.minLength 1; pattern ^[A-Z]{3}$

Optional Fields#

FieldTypeDescriptionConstraints
beneficiaryobjectWho the payee is — an individual's name, or a business name, plus contact details.—
beneficiary.individualobjectPopulate this when the beneficiary is a natural person. Mutually exclusive in practice with business — supply one or the other.—
beneficiary.individual.firstNamestringGiven name, when the beneficiary is an individual.pattern ^[\p{L} '\-]{1,50}$; nullable
beneficiary.individual.middleNamestringMiddle name, if applicable.pattern ^[\p{L} '\-]{1,50}$; nullable
beneficiary.individual.lastNamestringFamily name, when the beneficiary is an individual.pattern ^[\p{L} '\-]{1,50}$; nullable
beneficiary.businessobjectPopulate this when the beneficiary is a company. Mutually exclusive in practice with individual.—
beneficiary.business.namestringRegistered business name, when the beneficiary is a business rather than an individual.pattern ^[\p{L}\p{N} &.,'\-()]{1,150}$; nullable
beneficiary.contactobjectContact details for the beneficiary, individual or business.—
beneficiary.contact.emailstring (email)The beneficiary's email address, used for payout notifications where the corridor supports them.minLength 0; maxLength 254; nullable
beneficiary.contact.phoneobjectThe beneficiary's phone number.—
beneficiary.contact.phone.countryCodestringPhone country calling code, e.g. "+1".pattern ^\+?[0-9]{1,4}$; nullable
beneficiary.contact.phone.numberstringLocal phone number, digits only.pattern ^[0-9]{4,15}$; nullable
addressobjectThe beneficiary's address. Required by some corridors before a payout can be sent.—
address.line1stringStreet address line.pattern ^[\p{L}\p{N} .,'\-#/]{1,150}$; nullable
address.citystringCity or town.pattern ^[\p{L} .\-]{1,50}$; nullable
address.statestringState, province or region, where applicable.pattern ^[\p{L} .\-]{1,50}$; nullable
address.postalCodestringPostal or ZIP code.pattern ^[A-Za-z0-9 \-]{2,12}$; nullable
address.countrystringCountry name. Check GET /payee/countries for the accepted values for a given currency.pattern ^[\p{L} .,'()\-]{2,100}$; nullable
kycDetailsobjectBusiness-type and registration details, required for business beneficiaries in some corridors.—
kycDetails.businessTypestringLegal business type, e.g. "llc" or "corporation" — required for business beneficiaries in some corridors.pattern ^[A-Za-z _\-]{1,50}$; nullable
kycDetails.businessRegistrationNumberstringGovernment-issued business registration number.pattern ^[A-Za-z0-9 \-/.]{1,50}$; nullable
bankAccountobjectWhere the payout lands. Which sub-fields are required depends on currency and bankCountry — see the Payee tag description for the common shapes (IBAN countries vs. account+routing vs. SWIFT-only).—
bankAccount.accountTypestringAccount type at the bank, e.g. "checking" or "savings" — required for some corridors (notably US ACH), ignored for others.pattern ^[A-Za-z]{2,30}$; nullable
bankAccount.bankNamestringName of the beneficiary bank.pattern ^[\p{L}\p{N} &.,'\-()]{1,150}$; nullable
bankAccount.bankCountrystringCountry the beneficiary bank is domiciled in.pattern ^[\p{L} .,'()\-]{2,100}$; nullable
bankAccount.bankCodestringLocal bank identifier where the corridor uses one instead of (or alongside) a SWIFT/BIC code, e.g. a sort-code-style bank code.pattern ^[A-Za-z0-9\-]{1,20}$; nullable
bankAccount.accountNumberstringThe local account number. Not required where iban is supplied instead.pattern ^[A-Za-z0-9]{4,34}$; nullable
bankAccount.ibanstringIBAN, for corridors that use it in place of a local account number.pattern ^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{10,30}$; nullable
bankAccount.swiftBicstringSWIFT/BIC code identifying the beneficiary bank for international wires.pattern ^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$; nullable
bankAccount.routingNumberstringUS ABA routing number, for US domestic transfers.pattern ^[0-9]{5,12}$; nullable
bankAccount.sortCodestringUK sort code, for GBP domestic transfers.pattern ^[0-9\-]{4,10}$; nullable
bankAccount.branchCodestringBank branch identifier, where the corridor distinguishes branches separately from the bank code.pattern ^[A-Za-z0-9\-]{1,20}$; nullable
paymentobjectPayment method/purpose metadata for payouts to this payee.—
payment.typestringPayment method for payouts to this payee, e.g. "bank_transfer".pattern ^[\p{L}\p{N} \-]{1,50}$; nullable
payment.purposestringDefault payment purpose for payouts to this payee. Check GET /payee/purposes for accepted values.pattern ^[\p{L}\p{N} \-]{1,100}$; nullable
payment.providerFieldsobjectFree-form key/value bag for provider-specific fields a particular corridor needs beyond the modeled ones above. Keys and value shapes vary by provider and corridor — confirm with your integration contact before relying on a specific key.nullable

📤 Response Fields#

200 response:
FieldTypeNullableDescription
dataobjectNoA saved payee (beneficiary) record.
data.idstring (uuid)NoThe payee id — pass this as {payeeId} on GET/PUT calls and, elsewhere in the platform, as the beneficiary reference on a payout order.
data.customerIdstring (uuid)NoThe customer this payee belongs to.
data.favouriteNamestringNoThe partner-supplied display label for this payee, as given on create/update.
data.currencystringNoThe payout currency this payee is set up to receive.
data.statusstringYesPayee lifecycle status. See the status table above.
data.beneficiaryobjectNo—
data.beneficiary.individualobjectNoPopulate this when the beneficiary is a natural person. Mutually exclusive in practice with business — supply one or the other.
data.beneficiary.individual.firstNamestringYesGiven name, when the beneficiary is an individual.
data.beneficiary.individual.middleNamestringYesMiddle name, if applicable.
data.beneficiary.individual.lastNamestringYesFamily name, when the beneficiary is an individual.
data.beneficiary.businessobjectNoPopulate this when the beneficiary is a company. Mutually exclusive in practice with individual.
data.beneficiary.business.namestringYesRegistered business name, when the beneficiary is a business rather than an individual.
data.beneficiary.contactobjectNoContact details for the beneficiary, individual or business.
data.beneficiary.contact.emailstring (email)YesThe beneficiary's email address, used for payout notifications where the corridor supports them.
data.beneficiary.contact.phoneobjectNoThe beneficiary's phone number.
data.beneficiary.contact.phone.countryCodestringYesPhone country calling code, e.g. "+1".
data.beneficiary.contact.phone.numberstringYesLocal phone number, digits only.
data.addressobjectNo—
data.address.line1stringYesStreet address line.
data.address.citystringYesCity or town.
data.address.statestringYesState, province or region, where applicable.
data.address.postalCodestringYesPostal or ZIP code.
data.address.countrystringYesCountry name. Check GET /payee/countries for the accepted values for a given currency.
data.kycDetailsobjectNo—
data.kycDetails.businessTypestringYesLegal business type, e.g. "llc" or "corporation" — required for business beneficiaries in some corridors.
data.kycDetails.businessRegistrationNumberstringYesGovernment-issued business registration number.
data.bankAccountobjectNo—
data.bankAccount.accountTypestringYesAccount type at the bank, e.g. "checking" or "savings" — required for some corridors (notably US ACH), ignored for others.
data.bankAccount.bankNamestringYesName of the beneficiary bank.
data.bankAccount.bankCountrystringYesCountry the beneficiary bank is domiciled in.
data.bankAccount.bankCodestringYesLocal bank identifier where the corridor uses one instead of (or alongside) a SWIFT/BIC code, e.g. a sort-code-style bank code.
data.bankAccount.accountNumberstringYesThe local account number. Not required where iban is supplied instead.
data.bankAccount.ibanstringYesIBAN, for corridors that use it in place of a local account number.
data.bankAccount.swiftBicstringYesSWIFT/BIC code identifying the beneficiary bank for international wires.
data.bankAccount.routingNumberstringYesUS ABA routing number, for US domestic transfers.
data.bankAccount.sortCodestringYesUK sort code, for GBP domestic transfers.
data.bankAccount.branchCodestringYesBank branch identifier, where the corridor distinguishes branches separately from the bank code.
data.paymentobjectNo—
data.payment.typestringYesPayment method for payouts to this payee, e.g. "bank_transfer".
data.payment.purposestringYesDefault payment purpose for payouts to this payee. Check GET /payee/purposes for accepted values.
data.payment.providerFieldsobjectYesFree-form key/value bag for provider-specific fields a particular corridor needs beyond the modeled ones above. Keys and value shapes vary by provider and corridor — confirm with your integration contact before relying on a specific key.
data.createdAtstring (date-time)NoWhen the payee was created.
data.updatedAtstring (date-time)YesWhen the payee was last updated.
requestIdstringYes—
timestampstring (date-time)No—

Request

Header Params

Body Params
application/json-patch+json

Examples

Responses

🟢200
application/json
OK
Bodyapplication/json

🟠401
🟠403
🟠422
🟠429
Request Request Example
Shell
JavaScript
Java
Swift
cURL
curl --location '/api/v1/payments/payee' \
--header 'X-Idempotency-Key: 6f1a9c0e-2b7d-4c31-9f8a-1d5e7c3b0a42' \
--header 'X-API-Key: ak_live_8f3a9b2c7e1d4f6a9b0c2d5e8f1a3b6c' \
--header 'X-Signature: kZ3fQeT2m7xVvC9pR1sLdY8bN0hU4jK6oW5aE2gI7cQ=' \
--header 'X-Timestamp: 1758556800' \
--header 'X-Nonce: 3fa85f64-5717-4562-b3fc-2c963f66afa6' \
--header 'X-Body-Hash: 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' \
--header 'Content-Type: application/json-patch+json' \
--data-raw '{
    "customerId": "c1f4a9d2-6b3e-4a7c-9f1d-2e8b5c0a7d31",
    "favouriteName": "Acme Supplier — EUR",
    "currency": "EUR",
    "beneficiary": {
        "business": {
            "name": "Acme Trading GmbH"
        },
        "contact": {
            "email": "payments@acmetrading.example",
            "phone": {
                "countryCode": "+49",
                "number": "3012345678"
            }
        }
    },
    "address": {
        "line1": "Friedrichstrasse 123",
        "city": "Berlin",
        "postalCode": "10117",
        "country": "Germany"
    },
    "kycDetails": {
        "businessType": "gmbh",
        "businessRegistrationNumber": "HRB123456B"
    },
    "bankAccount": {
        "bankName": "Deutsche Bank",
        "bankCountry": "Germany",
        "iban": "DE89370400440532013000",
        "swiftBic": "DEUTDEFF"
    },
    "payment": {
        "type": "bank_transfer",
        "purpose": "payment_for_services"
    }
}'
Response Response Example
200 - Success
{
    "data": {
        "id": "4d8f2a7c-9b1e-4c6d-8a3f-7e2b0c9d1a56",
        "customerId": "c1f4a9d2-6b3e-4a7c-9f1d-2e8b5c0a7d31",
        "favouriteName": "Acme Supplier — EUR",
        "currency": "EUR",
        "status": "active",
        "beneficiary": {
            "business": {
                "name": "Acme Trading GmbH"
            },
            "contact": {
                "email": "payments@acmetrading.example",
                "phone": {
                    "countryCode": "+49",
                    "number": "3012345678"
                }
            }
        },
        "address": {
            "line1": "Friedrichstrasse 123",
            "city": "Berlin",
            "state": null,
            "postalCode": "10117",
            "country": "Germany"
        },
        "kycDetails": {
            "businessType": "gmbh",
            "businessRegistrationNumber": "HRB123456B"
        },
        "bankAccount": {
            "accountType": null,
            "bankName": "Deutsche Bank",
            "bankCountry": "Germany",
            "bankCode": null,
            "accountNumber": null,
            "iban": "DE89370400440532013000",
            "swiftBic": "DEUTDEFF",
            "routingNumber": null,
            "sortCode": null,
            "branchCode": null
        },
        "payment": {
            "type": "bank_transfer",
            "purpose": "payment_for_services",
            "providerFields": null
        },
        "createdAt": "2026-09-20T09:12:00Z",
        "updatedAt": "2026-09-22T14:02:00Z"
    },
    "requestId": "req_4f9a2c7e1b8d3f6a9c2e0b7d1f8a3c6e",
    "timestamp": "2026-09-22T14:03:11Z"
}
Modified at 2026-09-23 04:45:25
Previous
Show Card PIN
Next
List a customer's payees.
Built with