Skip to content

Swish

APR Integration option

Payment

Payment Flow

  1. The customer initiates the payment on the merchant's website.
  2. The merchant sends a payment request to PaySage.io.
  3. PaySage.io responds with a link to a payment page with a QR code.
  4. The merchant redirects the customer to the payment page.
  5. The customer scans the QR code and confirms the payment in the Swish app.
  6. PaySage.io sends a webhook notification with the final payment status to the merchant.

Info

This integration option supports only SEK currency.

Request

Send a payment request with the following data:

object
amount
required
bigInteger
Transaction amount in minimal currency units, for example, 50000 (500 SEK).
currency
required
string
SEK.
description
required
string
Short description of the order.
return_url
required
string
URL to return the customer to when a transaction is completed.
ip
required
string
Customer's IP address.
object
Section of the payment method.
type
required
string
swish.
object
Section of information about the customer.
external_id
required
string (255)
Customer's identifier in the merchant's system.
email
required
string
Customer's email address.
phone
required
string (200)
Customer's phone number including the country code, without + or spaces.
first_name
required
string (60)
Customer's first name.
last_name
required
string (60)
Customer's last name.
birth_date
required
string
Customer's date of birth in the ISO 8601 format (YYYY-MM-DD).
city
required
string (120)
Customer's city.
address
required
string (510)
Customer's address.
zip
required
string (40)
Customer's postal code. For example, 211 41.
Request example
{
  "request": {
    "amount": 50000,
    "currency": "SEK",
    "description": "Beställning 1001",
    "return_url": "https://merchant.example.com/return",
    "ip": "192.0.2.10",
    "customer": {
      "external_id": "se-customer-1001",
      "email": "elsa.svensson@example.com",
      "phone": "46701234567",
      "first_name": "Elsa",
      "last_name": "Svensson",
      "birth_date": "1990-05-22",
      "city": "Malmö",
      "address": "Exempelgatan 12",
      "zip": "211 41"
    },
    "method": {
      "type": "swish"
    }
  }
}
Response

Redirect the customer to the URL received as the value of the form.action parameter. The customer scans the QR code on the payment page and confirms the payment in the Swish app. Use the webhook notification to get the final payment status.

Response example
{
    "transaction": {
        "uid": "0695636c-d246-47ef-a461-c8971ef05fef",
        "type": "payment",
        "status": "pending",
        "amount": 50000,
        "currency": "SEK",
        "description": "Beställning 1001",
        "created_at": "2026-10-02T10:03:57Z",
        "updated_at": "2026-10-02T10:03:57Z",
        "method_type": "swish",
        "receipt_url": "https://backoffice.paysage.io/customer/transactions/0695636c-d246-47ef-a461-c8971ef05fef/c8c697af054ec799290fa6d6b5d043b2f818d373b148f03d4174652b5cf1bcfd",
        "payment": {
            "status": "pending",
            "gateway_id": 7494,
            "ref_id": "511606409061",
            "message": "Transaction was initialized."
        },
        "swish": {
            "type": "swish"
        },
        "customer": {
            "zip": "211 41",
            "city": "Malmö",
            "email": "elsa.svensson@example.com",
            "phone": "46701234567",
            "address": "Exempelgatan 12",
            "last_name": "Svensson",
            "birth_date": "1990-05-22",
            "first_name": "Elsa",
            "external_id": "se-customer-1001",
            "ip": "192.0.2.10"
        },
        "manually_corrected_at": null,
        "version": 1,
        "message": "Transaction was initialized.",
        "test": false,
        "billing_address": {
            "zip": "211 41",
            "city": "Malmö",
            "email": "elsa.svensson@example.com",
            "phone": "46701234567",
            "address": "Exempelgatan 12",
            "last_name": "Svensson",
            "birth_date": "1990-05-22",
            "first_name": "Elsa"
        },
        "additional_data": {
            "payment_method": {
                "type": "alternative"
            }
        },
        "smart_routing_verification": {
            "status": "skipped"
        },
        "gateway": {
            "iframe": true
        },
        "form": {
            "action": "link-to-payment-page",
            "fields": [],
            "method": "GET"
        }
    }
}