Alfred PSP — QA Documentation

Created by
Nazar Sabardin (vakotrade BE)
Document Status
Live
Last edited
Jun 3, 2026
Structure
By integration flow — Deposit · Withdrawal · KYC · KYC fallback · Dev playground
Audience
QA · Product · BE · FE (widget) · Support
QA Testing Guide

How to drive Alfred end-to-end without real bank transfers.

Alfred is the fiat-on/off-ramp PSP behind the ANDX deposit/withdrawal widget. The dev sandbox does not auto-progress KYC reviews or fire real bank webhooks, so we expose a small set of dev-only endpoints to drive the full lifecycle synthetically: provision a customer, approve KYC, simulate ONRAMP and OFFRAMP webhook chains. This hub is split by integration flow — pick the page for the flow you're testing, or jump straight to the dev playground to fire the runners.

10
Countries · supported by Alfred
5
Dev endpoints · for QA
12
Widget endpoints · user-facing
1
Alfred-side blocker · open
QA can fully drive
End-to-end deposit + withdrawal for MX (SPEI), BR (PIX), AR (COELSA), CO (ACH-PSE), and DO (ACH_DOM). Use the dev endpoints to skip real bank transfers.
Deposit · Withdrawal · Dev playground
Blocked on Alfred
US BANK_USA fiat-account registration returns 409/111485 (Path A) or 422/110003 (Path B). Cascade: no fiat account ⇒ no US offramp.
Withdrawal · Alfred bug report
Not testable in this release
CN / CL / BO / PE onramp (Alfred config onRampSupported: false). Production VAKOTRADE exchange (dev endpoints exchange-gated to VAKOTEST / *UAT only).
Deposit · Dev playground

What Alfred is LIVE

For the product team — what Alfred is and how the widget behaves in each KYC state. Plain language, no code.

What this is

Alfred is our fiat on/off-ramp payment provider — the rails that let a user move real money in and out of the exchange. After a user passes our own SumSub KYC, we provision them on Alfred, which then runs its own review on top of ours. This doc set is about one thing: how the deposit/withdrawal widget behaves in each Alfred KYC state, a new self-service correction flow when Alfred asks for fixes, and automatic cleanup of identity documents once a user is approved.

How to drive it without real bank transfers. The dev sandbox does not auto-progress KYC reviews or fire real bank webhooks. Instead, QA uses the exchange-gated /psp/alfred/__dev/* endpoints to: provision an Alfred customer, push synthetic KYC states (COMPLETED / FAILED / UPDATE_REQUIRED …), and simulate the full ONRAMP and OFFRAMP webhook chains. No real money ever moves against the Alfred sandbox. Fire them all from the Dev playground.

The four Alfred KYC states the user can be in

What the widget renders in each state, after the user has passed our internal SumSub KYC.

Approved
Alfred has cleared the user. The widget is fully open — they can deposit and withdraw with no extra steps. This is the normal, unblocked state.
User can transact
Pending / in review
Alfred is still reviewing. The widget shows a "verification under review" screen. The user simply waits — no action needed from them, and payments stay paused until a decision lands.
User waits
Rejected
Alfred has declined the user. The widget shows a "contact support" screen. This is a terminal state — the user can't self-recover and must reach out to support.
Terminal · support only
Update required LIVE
New. Alfred wants something corrected. Instead of a dead end, the widget shows a prefilled correction form so the user fixes the flagged data and re-uploads their documents themselves — without leaving the widget or contacting support. On re-approval they're unblocked.
Self-service recovery
Proactive document cleanup: the moment Alfred approves a user's KYC, their identity documents are deleted from our storage immediately — previously they lingered for around 7 days. A clear privacy and storage win, with no change to what the user sees.
ScopeNowLater
KYC (individual users) In scope — all four states above, including the new update-required flow.
KYB (business accounts) Not yet — out of scope for this release. Planned as a follow-up.

Country status at a glance

What works, what's blocked, what's off by Alfred config. Hover a card for the rail.

MX
SPEI · MXN
Deposit✓ OK
Withdrawal✓ OK
Full happy path. Run TC-D1 + TC-W1.
BR
PIX · BRL
Deposit✓ OK
Withdrawal✓ OK
Full happy path. Run TC-D2 + TC-W2.
AR
COELSA · ARS
Deposit✓ OK
Withdrawal✓ OK
Full happy path. Run TC-D3 + TC-W3.
CO
ACH-PSE · COP · needs bankId
Deposit✓ OK
Withdrawal✓ OK
PSE bank_id required on onramp (e.g. 1007).
DO
ACH_DOM · DOP
Deposit✓ OK
Withdrawal✓ OK
BANCO POPULAR works for both paths.
US
BANK_USA · USD
Deposit✗ cascades
Withdrawal✗ Bug #2
BANK_USA registration broken on both paths.
CN
BANK_CN · CNY
Deposit— off
Withdrawaluntested
Alfred config: onRampSupported: false.
CL
ACH_CHL · CLP
Deposit— off
Withdrawaluntested
Off-only by Alfred config.
BO
ACH_BOL · BOB
Deposit— off
Withdrawaluntested
Off-only.
PE
B89 · PEN
Deposit— off
Withdrawaluntested
Off-only.

Which test path should I run?

Pick the country your test user is registered in, then follow the branch.

Decision: test user country = ?
What is your test user's address_country?
MX or BR
Run full happy path: deposit + withdrawal end-to-end.
TC-D1 · TC-D2 · TC-W1 · TC-W2
AR · CO · DO
Full happy path now green (Bug #1 closed). Run deposit + withdrawal.
TC-D3 · TC-D5 · TC-D6 · TC-W3 · TC-W4 · TC-W5
US
No happy path. Verify the widget surfaces "BANK_USA unavailable" cleanly. Do not retry-loop.
TC-W6 only
CN · CL · BO · PE
No fresh customers possible. Onramp is off-by-config; offramp untested (no bridged customer).
Skip — not in scope for this release.

Explore by flow

Each flow has its own page: sequence diagram, user flow, per-country test cases, and a run-it pointer to the playground.

Open the dev playground
Config console + every interactive runner in one place.