1. Webhook's
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.
    • List a customer's payees.
    • Update a payee.
    • Retrieve a payee by id.
    • Look up an existing payee.
    • List the currencies a payee can be created in.
    • List the accepted payment purpose codes for a payee.
    • List the countries a payee can be created in.
    • List currency/country pairings for payees.
    • List the accepted beneficiary relationship codes.
  • 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. Webhook's

Banks Webhooks

Bank Webhook Events#

Overview#

This document describes all outgoing webhook event payloads sent by the platform for bank account lifecycle, deposits, and withdrawals. Webhooks are HTTP POST requests with a Content-Type: application/json header delivered to your configured endpoint URL.

Payload Conventions#

ConventionDetail
FormatJSON
HTTP MethodPOST
Content-Typeapplication/json
Null fieldsIncluded as null (not omitted)
TimestampsISO 8601 — YYYY-MM-DDTHH:mm:ss.fffffffZ (UTC)
AmountsDecimal string in the currency's major unit (e.g., "1500.00")
Currency codesISO 4217 (fiat) or ticker symbol (digital assets, e.g., USDT)
Event IDEvery event carries a globally unique id (evt_ prefix) for idempotency
SignatureEach request includes an X-Webhook-Signature header (HMAC-SHA256 of the raw body using your webhook secret)

Event Categories#

CategoryEvents
Bank Account Creationbanks.accountcreation.approved, banks.accountcreation.rejected
Depositdeposit.submitted, deposit.pending, deposit.approved
Withdrawalwithdrawal.completed, withdrawal.rejected

1. Bank Account Creation Events#

Applicable event types: banks.accountcreation.approved · banks.accountcreation.rejected
These events track the lifecycle of a customer's bank account creation request from submission through final decision.

Payload — Approved#

{
  "id": "evt_7f3a2c9d81b64f0e9a1d2c3b4e5f6a70",
  "type": "banks.accountcreation.approved",
  "createdAt": "2026-04-02T10:15:42.1234567Z",
  "data": {
    "account_id": "acct_9b1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e",
    "customer_id": "f51b8db9-0bbf-4a91-b5fe-bf9d7b16f070",
    "account_type": "Checking",
    "account_number": "1234567890",
    "routing_number": "021000021",
    "iban": null,
    "swift_code": "CHASUS33",
    "currency": "USD",
    "bank_name": "Example Partner Bank",
    "bank_country": "US",
    "application_status": "banks.accountcreation.approved",
    "application_reason": "Approved",
    "performed_at": "2026-04-02T10:15:42.1102938Z"
  }
}

Payload — Rejected#

{
  "id": "evt_1a2b3c4d5e6f70819a2b3c4d5e6f7081",
  "type": "banks.accountcreation.rejected",
  "createdAt": "2026-04-02T11:02:10.5567821Z",
  "data": {
    "account_id": null,
    "customer_id": "f51b8db9-0bbf-4a91-b5fe-bf9d7b16f070",
    "account_type": "Checking",
    "account_number": null,
    "routing_number": null,
    "iban": null,
    "swift_code": null,
    "currency": "USD",
    "bank_name": "Example Partner Bank",
    "bank_country": "US",
    "application_status": "banks.accountcreation.rejected",
    "application_reason": "KYC verification failed — document mismatch",
    "performed_at": "2026-04-02T11:02:10.5401237Z"
  }
}

Field Reference#

FieldTypeDescription
idstringGlobally unique event identifier (evt_ prefix). Use for idempotency
typestringEvent type. One of banks.accountcreation.approved, banks.accountcreation.rejected
createdAtstringISO 8601 timestamp when the event was created
account_idstring | nullUnique identifier of the created bank account. null when rejected
customer_idstringUnique identifier of the customer who requested the account
account_typestringAccount type — Checking, Savings, or Virtual
account_numberstring | nullAccount number issued by the partner bank. null when rejected
routing_numberstring | nullABA routing number (US accounts). null when not applicable
ibanstring | nullIBAN (international accounts). null when not applicable
swift_codestring | nullSWIFT/BIC of the issuing bank
currencystringISO 4217 currency code of the account
bank_namestringName of the partner/issuing bank
bank_countrystringISO 3166-1 alpha-2 country code of the bank
application_statusstringFinal status of the account creation request
application_reasonstringHuman-readable reason accompanying the decision
performed_atstringISO 8601 timestamp when the decision was made

2. Deposit Events#

Applicable event types: deposit.submitted · deposit.pending · deposit.approved
These events track the lifecycle of an incoming deposit into a customer's bank account, from initial submission through confirmation.
Typical lifecycle: deposit.submitted → deposit.pending → deposit.approved

Payload#

{
  "id": "evt_cdb5d44b89da4e2e84d0e981b3af5b18",
  "type": "deposit.approved",
  "createdAt": "2026-04-03T09:41:18.9921456Z",
  "data": {
    "deposit_id": "dep_41ac2f77-e2ad-4fac-b4c6-0d54a8bc3e2f",
    "account_id": "acct_9b1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e",
    "customer_id": "f51b8db9-0bbf-4a91-b5fe-bf9d7b16f070",
    "amount": "500.00",
    "currency": "USD",
    "fee": "1.50",
    "fee_currency": "USD",
    "net_amount": "498.50",
    "payment_method": "wire_transfer",
    "reference_number": "WIRE20260403A1B2",
    "sender_name": "Tarun Kumar",
    "sender_bank": "HDFC Bank",
    "sender_country": "IN",
    "status": "approved",
    "message": "Deposit credited successfully.",
    "transaction_id": "txn_8d7c6b5a-4e3f-2d1c-0b9a-8f7e6d5c4b3a",
    "submitted_at": "2026-04-03T08:12:04.2278182Z",
    "performed_at": "2026-04-03T09:41:18.9812345Z"
  }
}

Field Reference#

FieldTypeDescription
idstringGlobally unique event identifier (evt_ prefix). Use for idempotency
typestringEvent type. One of deposit.submitted, deposit.pending, deposit.approved
createdAtstringISO 8601 timestamp when the event was created
deposit_idstringUnique identifier of the deposit
account_idstringBank account receiving the deposit
customer_idstringCustomer who owns the account
amountstringGross deposit amount in the major currency unit
currencystringISO 4217 currency code (or asset ticker) of the deposit
feestringPlatform/processing fee applied
fee_currencystringCurrency of the fee
net_amountstringAmount credited after fees (amount − fee)
payment_methodstringMethod used — wire_transfer, ach, sepa, upi, crypto
reference_numberstringBank/network reference for reconciliation
sender_namestringName of the sending party
sender_bankstringName of the sending bank
sender_countrystringISO 3166-1 alpha-2 country code of the sender
statusstringCurrent status of the deposit (submitted, pending, approved)
messagestringHuman-readable status message
transaction_idstringLedger transaction identifier once posted; null before crediting
submitted_atstringISO 8601 timestamp when the deposit was first submitted
performed_atstringISO 8601 timestamp of the current status change

3. Withdrawal Events#

Applicable event types: withdrawal.completed · withdrawal.rejected
Fired when a customer's withdrawal request reaches a terminal state — either successfully paid out or rejected.

Payload — Completed#

{
  "id": "evt_3c990d0027974a269d69ecbbc6252934",
  "type": "withdrawal.completed",
  "createdAt": "2026-04-04T15:22:07.8274318Z",
  "data": {
    "withdrawal_id": "wdl_d9727b12-9de8-486e-acfc-3bf07c6bc391",
    "account_id": "acct_9b1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e",
    "customer_id": "f51b8db9-0bbf-4a91-b5fe-bf9d7b16f070",
    "amount": "250.00",
    "currency": "USD",
    "fee": "2.00",
    "fee_currency": "USD",
    "net_amount": "248.00",
    "payment_method": "wire_transfer",
    "destination_account_number": "9876543210",
    "destination_bank": "ICICI Bank",
    "destination_country": "IN",
    "reference_number": "WDL20260404X9Y8",
    "status": "completed",
    "message": "Withdrawal processed successfully.",
    "transaction_id": "txn_1f2e3d4c-5b6a-7980-1f2e-3d4c5b6a7980",
    "requested_at": "2026-04-04T14:05:31.1102938Z",
    "performed_at": "2026-04-04T15:22:07.8196246Z"
  }
}

Payload — Rejected#

{
  "id": "evt_5377f5d53323457688ea939284e13406",
  "type": "withdrawal.rejected",
  "createdAt": "2026-04-04T16:10:45.2798593Z",
  "data": {
    "withdrawal_id": "wdl_aa11bb22-cc33-dd44-ee55-ff6677889900",
    "account_id": "acct_9b1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e",
    "customer_id": "f51b8db9-0bbf-4a91-b5fe-bf9d7b16f070",
    "amount": "10000.00",
    "currency": "USD",
    "fee": "0.00",
    "fee_currency": "USD",
    "net_amount": "0.00",
    "payment_method": "wire_transfer",
    "destination_account_number": "9876543210",
    "destination_bank": "ICICI Bank",
    "destination_country": "IN",
    "reference_number": null,
    "status": "rejected",
    "message": "Insufficient balance.",
    "transaction_id": null,
    "requested_at": "2026-04-04T16:09:12.3345671Z",
    "performed_at": "2026-04-04T16:10:45.2701234Z"
  }
}

Field Reference#

FieldTypeDescription
idstringGlobally unique event identifier (evt_ prefix). Use for idempotency
typestringEvent type. One of withdrawal.completed, withdrawal.rejected
createdAtstringISO 8601 timestamp when the event was created
withdrawal_idstringUnique identifier of the withdrawal request
account_idstringBank account debited for the withdrawal
customer_idstringCustomer who requested the withdrawal
amountstringGross withdrawal amount requested
currencystringISO 4217 currency code (or asset ticker)
feestringFee applied to the withdrawal. 0.00 when rejected
fee_currencystringCurrency of the fee
net_amountstringAmount paid out after fees. 0.00 when rejected
payment_methodstringPayout rail — wire_transfer, ach, sepa, upi, crypto
destination_account_numberstringBeneficiary account number (masked as needed)
destination_bankstringBeneficiary bank name
destination_countrystringISO 3166-1 alpha-2 country code of the destination
reference_numberstring | nullBank/network reference for reconciliation. null when rejected
statusstringFinal status (completed, rejected)
messagestringHuman-readable outcome message or rejection reason
transaction_idstring | nullLedger transaction identifier. null when rejected
requested_atstringISO 8601 timestamp when the withdrawal was requested
performed_atstringISO 8601 timestamp when the final decision was made

Status Values Quick Reference#

Bank Account Creation Status#

ValueDescription
approvedAccount creation request approved and account issued
rejectedAccount creation request rejected (see application_reason)

Deposit Status#

ValueDescription
submittedDeposit instruction received; awaiting funds
pendingFunds detected/in transit; awaiting confirmation or compliance review
approvedFunds confirmed and credited to the account

Withdrawal Status#

ValueDescription
completedWithdrawal successfully processed and paid out
rejectedWithdrawal rejected (e.g., insufficient balance, compliance hold, invalid beneficiary)

Security & Verification#

PracticeDetail
Signature verificationCompute HMAC-SHA256 of the raw request body using your webhook secret and compare (constant-time) against X-Webhook-Signature
Replay protectionReject events where createdAt is older than 5 minutes, and de-duplicate on id
TransportEndpoints must be HTTPS (TLS 1.2+)
Secret rotationRotate webhook secrets periodically; both old and new secrets are honored during a grace window

Error Handling & Retries#

Your endpoint should return an HTTP 2xx status code within 10 seconds to acknowledge receipt. If a non-2xx response is returned or the request times out, the platform retries delivery with exponential backoff (e.g., 1m, 5m, 30m, 2h, 6h, up to 24h).
ScenarioRecommendation
Duplicate eventsUse the event id (or deposit_id / withdrawal_id / account_id + type) for idempotency
Out-of-order deliveryUse performed_at to determine the latest state; ignore stale events
Unknown event typeAcknowledge (200 OK) and ignore gracefully
Processing failureReturn 500 to trigger retry
Slow processingAcknowledge immediately and process asynchronously (queue the payload)
Modified at 2026-08-10 12:32:20
Previous
Wallets Webhooks
Next
Payments Webhooks
Built with