POST /payment-auth-requests) and the execution step (POST /payments). The object structure is consistent across countries and payment types. However, required fields vary by country, standard and individual institution.
If you are using Hosted Pages, you still provide payee details and payment parameters in the request that creates the Hosted session. Hosted then handles bank selection, payer authorisation, and SCA on the user’s side. The field details below apply to both integration approaches.
A UK domestic payment needs a sort code and account number. A German SEPA payment needs an IBAN. Some European banks require payer details, others do not.
PaymentRequest structure
Payment types
For detailed SEPA/domestic/international decision logic, see: European Payments Guide
Payee details by country
Country-specific examples
- UK Domestic
- SEPA (Europe)
- International
Payer details
Payer requirements vary by country and institution. UK: Payer details are usually not required. The bank knows the payer from the consent. Europe (Berlin Group banks): Payer IBAN is often required. The bank needs to know which account to debit. Some European banks also require: Payer name, payer address.Payer examples
- UK (payer typically optional)
- Germany (payer often required)
For institution-specific field requirements, log in to the Yapily Console to view detailed constraints.
Reference field
Thereference field is the payment description visible on bank statements. This is what your customer will see when they review their transaction history.
Character limits vary by institution, from as low as 18 characters to 140. Some banks silently truncate long references, others reject the payment outright.
Recommendation: Keep references under 18 characters for maximum compatibility, or check institution-specific constraints in the Yapily Console.
Idempotency
ThepaymentIdempotencyId prevents duplicate payments if your request is retried.
How it works:
- Must be unique per payment attempt
- If the same ID is sent twice, Yapily returns the existing payment instead of creating a new one
- Generate a UUID for each payment attempt
Complete examples
- UK Domestic Payment
- SEPA Payment (Germany)
- International Payment
Common pitfalls
The following issues are frequently encountered when building payment requests:- Payment rejected for missing payer details: Some European banks require payer IBAN or other details. Check institution requirements in the Yapily Console before building your payment form. Only collect what is needed to minimise friction.
- Reference too long: Keep under 18 characters for maximum compatibility across institutions.
- Wrong payment type for SEPA: If both accounts are in SEPA countries and currency is EUR, use
DOMESTIC_PAYMENT, notINTERNATIONAL_PAYMENT. Exception: NatWest Group requiresINTERNATIONAL_PAYMENTfor SEPA. See European Payments. - Feature not supported: Always check
GET /institutions/{id}features array before initiating. See Payment Features. - IBAN format rejected: IBAN formats are country-specific (different length and prefix per country). Validate format before sending.
- Duplicate payment created: Always include a unique
paymentIdempotencyId. If you retry without one, you may create duplicate payments.
Related documentation
- Introduction to Payment Execution (detailed account identification reference)
- European Payments (SEPA routing logic)
- Payment Features (feature checking)
- Payment Constraints (machine-readable bank requirements, beta)
- Single Payments (detailed single payment docs)
- Payment Consents (consent management for payments)
- Hosted Pages Payment Tutorial (if you prefer Hosted)