Payment Flow

Creating Payment Intents

Create a payment intent with a payment method, amount, customer info, and return URLs:

{
  "paymentMethod": {
    "id": "mbway-eupago",
    "phone": "+351912345678"
  },
  "reference": "ORDER-12345",
  "customer": {
    "id": "cust_abc123",
    "email": "customer@example.com"
  },
  "amount": "50.00",
  "currency": "EUR",
  "returnLinks": {
    "default": "https://yourproduct.com/return",
    "cancel": "https://yourproduct.com/cancel"
  }
}

The response includes the payment intent id (UUID), status, and an action object that tells you what to do next with the customer.

Some methods (notably Rillpay) require additional customer fields. See the individual payment method guides for the exact requirements.

Action Types

Redirect Action

Used by neteller-paysafe, paysafecard-trustpayments, card-rillpay, and openbanking-rillpay.

{
  "type": "redirect",
  "method": "GET",
  "url": "https://provider.com/pay/...",
  "expiresAt": "2025-11-18T15:30:00.000+00:00"
}

Redirect the customer to url; they complete the payment at the provider and are sent back to your returnLinks.

Requisites Action

Used by mbway-eupago (reference only) and multibanco-eupago (entity + reference).

{
  "type": "requisites",
  "requisites": {
    "entity": "12345",
    "reference": "123 456 789"
  },
  "expiresAt": "2025-11-20T23:59:59.000+00:00"
}

Display the requisites to the customer alongside the intent's amount and currency. The customer pays out-of-band (ATM, online banking, MBWay app) and the settlement arrives asynchronously.

The requisites object does not contain amount; use the amount from the payment intent itself.

Webhooks

Configure at portal-test.sweuze.com.

Fulfill orders on payment_intent.succeeded (or payment.succeeded) - never on return URLs, which can be manipulated by the customer.

Webhooks are cryptographically signed. See Webhook Validation.

Idempotency

  • The same reference matches existing non-canceled intents. If you POST /payment-intents with a reference that already has an active intent, the existing intent is returned instead of creating a duplicate.
  • Use unique reference values for new orders.
  • Deduplicate webhooks by id - each delivery may be retried.

Error Handling

Code Meaning Action
401 Invalid auth Check API key and signature header
409 Intent blocked Customer account issue
422 Validation failed Check fields array (includes per-method conditional requirements)
502 Provider error Retry or offer an alternative method