Skip to main content

VA Payments

VA Payments generate a dedicated virtual account instruction that your integration can display directly within your own product. Instead of redirecting the payer to a hosted Basilic checkout, you immediately receive the CVU and alias to present the transfer instructions yourself.

What is a VA payment

  • A VA payment is an API-only bank transfer collection flow.
  • Basilic creates the payment record, reserves the receiving account, and returns the CVU / alias to show the payer.
  • Your server can query the lifecycle with GET /api/v1/va-payments and GET /api/v1/va-payments/{id} or react to callbacks when configured.
  • VA payments are currently only supported in Argentina and only for ARS transfer instructions.

VA payment flow

What you can control

  • Lock mode by time, amount, or both.
  • Expiry window via ttlSeconds.
  • Optional client identification with clientId, clientTaxId, and clientName.
  • Callback delivery to your backend via callbackUrl.
  • External references and metadata for reconciliation in your own systems.

Callback payload

When a transfer arrives and Basilic matches it to a VA payment, it delivers a POST to the callbackUrl you configured.

Webhook payload:

{
"eventId": "uuid",
"vaPaymentId": "uuid",
"eventType": "cash_in_received",
"status": "completed",
"payload": {
"vaPaymentId": "uuid",
"operationId": "internal-op-id",
"incomingAmount": 4970.00,
"total": 5000.00,
"totalWithoutTaxes": 4970.00,
"taxes": 30.00,
"receivedAmount": 4970.00,
"remainingAmount": 0
},
"createdAt": "2026-05-18T12:00:00Z"
}

Event types:

eventType carries one of these seven values, and no other.

eventTypeWhen Basilic sends it
createdYou created the VA payment
cash_in_receivedA transfer arrived and Basilic matched it
succeededThe VA payment is paid in full
underpaidThe transfer paid less than the amount
overpaidThe transfer paid more than the amount
failedThe VA payment expired before it was paid
cancelledYou cancelled the VA payment

The payload object differs per event. A created or cancelled event carries the same body as the response of the endpoint that raised it. The events that a transfer raises carry the amount fields below.

Which URL receives which event:

You configure either callbackUrl alone, or successUrl and failureUrl together. You cannot combine them.

ConfigurationDelivery
callbackUrlEvery one of the seven events goes to this URL
successUrl + failureUrlsucceeded goes to successUrl. failed and cancelled go to failureUrl. underpaid and overpaid go to successUrl when the VA payment names a client, and to failureUrl when it does not

created and cash_in_received are delivered only through callbackUrl. The split configuration has no URL for an event that is neither a success nor a failure, thus it drops them. Use callbackUrl if you need them.

Payload fields:

FieldDescription
payload.incomingAmountNet amount received after taxes (pre-existing field, same as totalWithoutTaxes)
payload.totalGross amount before taxes
payload.totalWithoutTaxesNet amount after taxes (same as incomingAmount)
payload.taxesTax amount retained by the provider. total - taxes = incomingAmount
payload.receivedAmountAmount credited toward the VA payment (may differ if partial or over-paid)
payload.remainingAmountAmount still pending. 0 when fully paid

In most transfers there are no taxes and total === incomingAmount while taxes === 0. For Argentine transfers with withholding, these fields carry the breakdown.