Skip to main content
PayVessel sends webhooks when virtual cards are created, used at merchants, funded, withdrawn, or terminated. Configure your webhook URL in the PayVessel Dashboard and verify every payload before updating balances or order status in your system. See Verifying Webhooks for signature checks, trusted IPs, and idempotent handling. These are example webhook responses for virtual card issuing.
Match cards using reference from create (lifecycle events) or card_id in the payload (transaction and termination events). Store PayVessel card_id from the API for your own lookups.

Transaction types

These are the possible transaction types on issuing.transaction:
  • AUTHORIZATION: When a card is successfully used at a merchant site.
  • SETTLEMENT: When a card is successfully used and settlement is completed at a merchant site.
  • FUNDING: When the card is funded via Fund a Card or create-time prefund.
  • WITHDRAWAL: When funds are withdrawn from the card via Withdraw from Card.
  • TERMINATION: When a card is terminated (also available from the PayVessel Dashboard).
  • DECLINE: When an attempt to use the card at a merchant site is rejected (for example insufficient balance).
  • REVERSAL: When a merchant charges a card but immediately returns that amount to the card.
  • REFUND: When a reversal does not complete as expected and funds erroneously debited are returned.
  • CROSS-BORDER: Cross-border use at merchants outside the US or when authorization currency is not USD.
mode can only be CREDIT or DEBIT.

Card transaction events (card.transaction)

PayVessel also sends card.transaction to the webhook URL on your business. Use event_type to decide what to do.

Contactless and cross-border fee recovery

Miden sometimes cannot collect contactless or cross-border fees from the card (the card is below the amount, or would drop under the $1 retain). They still bill PayVessel. PayVessel then:
  1. Debits the issuing merchant USD wallet for the same fee amount
  2. Sends you a card.transaction webhook so you can recover it from your customer
Treat reference as idempotent — the same event is not charged twice.
Cross-border recovery uses event_type cross_border_fee and fee_type cross_border. If your USD wallet cannot cover the fee, status is failed. Fund the wallet and expect a retry of the same reference, or recover the amount from your customer.

What to do on each event

List transactions

Query normalized transaction history from the API