Logo GH

Trustly: Direct Bank Payments

1) What is Trustly

Trustly is an A2A (account-to-account) payments and disbursement provider that connects merchants to payer banks via redirect/App2App. The buyer confirms the transfer at his bank (SCA via PSD2), the merchant instantly receives an online confirmation, and the crediting of funds comes through the provider's reports/calculations.

Key features:
  • Low cost relative to card MDRs.
  • Wide geography in Europe (Nordics, DACH, Benelux, UK, Southern EU, etc.) + local banks.
  • Pay-ins and Payouts (including instant payouts for supported banks).
  • Specialized solutions for iGaming (for example, Pay N Play: "deposit → account created/verified").

2) Product line and scenarios

Pay-in (payment from the bank): redirect/App2App to the payer's bank → SCA → online success/refusal → subsequent loan.
Payouts: transfer to the user's account; for a number of banks - instantly (otherwise T + 1/T + 2).
Pay N Play (iGaming): combines deposit with onboarding: KYC signals are extracted from bank data (name, IBAN/BIC, etc.), a game account is created without separate registration, Fast Within is possible back to the same account.
Account Info/Check (optional): Confirm account ownership, verify name/IBAN for anti-mule/ODR.

3) Payment flows: Redirect and App2App

3. 1 Classic redirect

1. Checkout merchant → bank selection (directory/search).
2. Redirect to bank page or hosted screen → SCA.
3. Return to the merchant's site with the status (success/pending/failed/canceled/expired).
4. Waiting for webhook/settlement report.

3. 2 App2App (mobile)

Opening a banking application via deeplink/intent → confirmation → return.
Higher conversion and fewer dropped payments; be sure to keep the fallback on the web redirect.

3. 3 Payouts

Initiate payment through the API with the order/win reference; receive an online status "accepted for processing" and the result for the webhook/registry.
Maintaining idempotency and payment status card is critical (up to repetitions/rollbacks).

4) Limits and risk policies

There is no single ceiling: there are limits on issuing banks and provider policies. Typically found:
  • Per-transaction and per-day/week limits at the payer's bank.
  • New recipients/merchants - reduced thresholds and/or exposure.
  • Channel/velocity rules, geo/device signals, anti-mules.
  • For payouts - individual quotas/threshold checks (especially instant).
💡 Practice: Don't hardcode numbers. Keep a directory of limits by bank/country/channel, show in UX the understandable reason for refusal ("bank/channel limit exceeded") and offer alternatives (split, other method).

5) Statuses and Settlements: Online Success vs Actual Credit

Online status: `success`, `pending`, `failed`, `canceled`, `expired`.
Settlement: actual crediting by Trustly reports/registers (often T + 1/T + 2 bank days; for some destinations/payouts - instant).
For critical services, use the conditional execution before credit model (for example, activation of a digital product after settlement confirmation).

6) Returns and disputes

Chargeback as in cards is absent. Return - a new credit transaction through the provider to the payer.
Partial refunds are supported.
Return dates are bank (usually T + 1/T + 2).
Disputes - through the provider's ODR processes and the payer's bank: prepare order logs, confirmation of delivery/service provision, communication payout↔pay -in.

7) Commissions and Economics

Usually fixed/low transaction interest + platform fees (hosted checkout, reporting, ODR, payouts/instant).
Plan spending on pending/expiries, ODR and recon support.

8) Reconciliation and reporting

Store the 'paymentId/transactionId' of the provider, 'orderId', issuing bank, timestamps, UTR/bank reference from the fin reports.
Connect webhooks to change status; Run daily auto-recon and periodic full-recon.
For payouts - separate registers and comparison with the original pay-ins/game balances.

9) UX practices

Directory of banks: quick search, sorting by popularity/last choice.
Mobile-first: offer App2App; on failure - fallback to the web.
Errors and repetitions: clear cause codes (limit, SCA failure, timeout), repeat button, alternative methods.
Idempotence: 'orderId' + idempotence key for safe-retry.
Receipt: amount, time, 'transactionId', bank, channel (App2App/Redirect), support link.
Payout UX: transparent ETA (instant/T + 1), tracking status, notifications.

10) Pay N Play (for iGaming)

Onboarding without a registration form: the user selects a bank, confirms the deposit, and the provider gives the verified bank data (name/account) to the merchant - a game account is created.
KYC signals from the bank reduce friction and speed up the first deposit.
Fast Within: Payouts to the same confirmed account, often instantly.
Strict responsible play policies, deposit limits, mandate log, and transparent ODR are required.

11) Compliance and safety

PSD2/SCA, device binding and anti-fraud of the issuing bank.
GDPR/PII minimization: store only necessary attributes, encrypt PII, restrict access.
Webhooks: HMAC signatures/nonce, replay protection, allowlist IP.
AML/sanctions: transaction monitoring, name match, anti-mule signals.

12) High Risk Verticals

Availability and limits for some categories (including iGaming, crypto, etc.) depend on the country and partner banks.
Expect: tightened limits, expanded KYC, possible holds and additional evidence.
Keep alternative rails (cards, SEPA, open banking PIS from other providers), routing along the customer profile.

13) Merchant Integration: Options

1. Hosted/Embedded by provider

Quick start, ready-made list of banks, statuses, errors, webhooks.

2. Server-to-Server + Redirect/App2App

More control: own bank selection page, deep error processing, own deeplink/QR.

3. Request-to-Pay

Sending a payment link by email/SMS/messenger; convenient for B2B/services.

Required backend components:
  • Эндпоинты: `createPayment`, `refund`, `createPayout`, `queryStatus`, `webhook`, `reconcile`.
  • Idempotence and dedupe by 'orderId'.
  • Retrai status exponentially, dead-letter on unstable responses.
  • Catalogs: banks/countries, limits/error codes, SLA metrics by issuers.

14) "Trustly Gateway" architecture

API layer (REST/GraphQL) for cash desk and cashier services.
Event queues: status events → billing/CRM/gaming backend/analytics.
Observability: bank/channel conversion, 'pending→success/expired', average latency to settlement, share of instant payouts.
Security: vault for secrets, IP-allowlist, strict redirect-URI validation, anti-replay tokens.

15) Output checklist

1. Select geographies/banks and connect the Trustly channel at the PSP.
2. Implement 'createPayment' + bank selection + redirect/App2App with fallback.
3. Connect webhooks, timeouts and status retrievals.
4. Set up recon (daily + full), UTR/fin references storage.
5. Enable partial/full refunds, ODR logs, support procedures.
6. For iGaming - run Pay N Play, deposit limits, Fast Within, tracking responsible play.
7. Build SLA monitoring by bank/channel and alerts by incident.
8. Test mobile banks (iOS/Android) and major issuers by country.

Landmark card

💡 Actual thresholds/ETAs vary by bank/country/channel.

Статусы: `success`, `pending`, `failed`, `canceled`, `expired`.
Settlement pay-in: more often T + 1/T + 2; payouts - instant where available, otherwise T + 1/T + 2.
Limits: per-txn/day/week at issuer'a; new recipients - reduced thresholds.
Recurrence: through e-mandate/SEPA DD/Open Banking (first A2A → mandate).

Summary

Bet on conversion App2App/Embedded and instant payouts to hold.
Separate online confirmation and actual credit in business logic.
Do not fix amounts: keep limit configs by bank/country/channel.
For iGaming, use Pay N Play with transparent KYC, limits and quick payouts.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.