Payment Links

A streamlined guide to our no-code payment solution.

Payment Links enable you to accept payments from your customers by generating a unique URL for a specific transaction. We manage the secure checkout environment and handle all sensitive payment data, minimizing your technical overhead.

The Payment Journey

  1. Request Payment Link: Send a request to our API; Super will return a unique link.
  2. Share with Customer: Send the URL to your customer via email, SMS, or your preferred digital channel.
  3. Secure Checkout: The customer enters their payment details in our protected, hosted environment.
  4. Return to Site: Once the transaction is processed, we redirect the customer to your designated success or failure URL.

Creating a Payment Link

Payment links can be created in two ways depending on your use case.

Via the Business Portal

Best for sales teams, ad-hoc payments, and one-off invoices - no code required.

  1. Log in to the Business Portal and select Payment links in the sidebar.

  2. Select Create payment link in the top right.

  3. Set up payment link - enter the core details:

    • Brand (required) - the brand the payment link belongs to. Choose this before entering an amount.
    • Amount (required) - the amount to collect.
    • Your reference (optional) - an internal reference such as an invoice number. Your customer will not see it.
    • Expiry date (optional) - a date after which the link can no longer be used.
  4. Order details (optional) - describe what the payment is for. Select Car rental, Flight, Hotel or Product, complete the fields, then select Save details:

    • Car rental and Hotel - check-in date and check-out date.
    • Flight - flight number and flight date.
    • Product - product description, SKU, quantity, unit price and delivery date.

    Car rental, Flight and Hotel also take traveller details. Enter a first and last name, and select Add another traveller for each additional passenger. These three categories have an optional Total price, which does not need to match the payment link amount.

  5. Address (optional) - enter your customer's Shipping address. Start typing in Search for an address, or select Enter address manually. You can also add a first name, last name, phone number and email address.

    The Billing address defaults to Same as shipping address. Clear that checkbox to enter a different billing address.

  6. Additional options (optional):

    • Custom fields - select Add custom field to store additional information against the payment link as key-value pairs. Up to 10 fields are allowed.
    • Custom URLs - set a Success URL, Failed URL and Cancelled URL to control where customers are sent once they have finished with the link.
  7. Select Create payment link, then copy the generated link and share it with your customer.

Note: You can edit a payment link until it is paid, expired or deleted.


Via the API

Best for automated workflows where you need full control over redirect URLs and request parameters.

The diagram below illustrates the full API integration flow.

Step 1: Request a Payment Link

Make a POST request to the /payment-links endpoint with the amount, reference, and your redirect URLs.

Request Example

curl --location 'https://api.superpayments.com/2026-08-01/payment-links' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY' \
--data '{
  "brandId": "YOUR_BRAND_ID",
  "amountInMinorUnits": 5000,
  "externalReference": "Order-123",
  "purpose": "PURCHASE",
  "expiresAt": "2026-03-22T10:00:00.000Z",
  "successUrl": "https://www.example.com/success",
  "failureUrl": "https://www.example.com/failure",
  "cancelUrl": "https://www.example.com/cancel",
  "metadata": {
    "yourKey": "yourValue"
  },
  "billingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "shippingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "lineItems": [
    {
      "type": "PRODUCT",
      "data": {
        "productDescription": "Example product",
        "sku": "SKU-123",
        "quantity": 1,
        "unitPrice": 5000,
        "currency": "GBP",
        "expectedDeliveryDate": "2026-03-20"
      }
    }
  ]
}'
curl --location 'https://api.test.superpayments.com/2026-08-01/payment-links' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY' \
--data '{
  "brandId": "YOUR_BRAND_ID",
  "amountInMinorUnits": 5000,
  "externalReference": "Order-123",
  "purpose": "PURCHASE",
  "expiresAt": "2026-03-22T10:00:00.000Z",
  "successUrl": "https://www.example.com/success",
  "failureUrl": "https://www.example.com/failure",
  "cancelUrl": "https://www.example.com/cancel",
  "metadata": {
    "yourKey": "yourValue"
  },
  "billingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "shippingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "lineItems": [
    {
      "type": "PRODUCT",
      "data": {
        "productDescription": "Example product",
        "sku": "SKU-123",
        "quantity": 1,
        "unitPrice": 5000,
        "currency": "GBP",
        "expectedDeliveryDate": "2026-03-20"
      }
    }
  ]
}'
📘

Optional fields

Only brandId and amountInMinorUnits are required. Everything else above is optional - omit any field you do not need.

Line item types

lineItems describes what the payment is for. Each item has a type and a data object. Four types are available:

type
data fields
PRODUCT
productDescription, sku, quantity, unitPrice, currency, expectedDeliveryDate
AIRLINE
flightNumber, flightDate, travellers[].name, totalPrice, currency
CAR_RENTAL
travellers[].name, checkInDate, checkOutDate, totalPrice, currency
LODGING
travellers[].name, checkInDate, checkOutDate, totalPrice, currency

currency is always GBP.

📘

Travel Industry (MCC 4722 / 4511)

If your business operates in the travel industry, you are required to include flight and passenger data in your request. Add the lineItems array to your request body, with one object in the travellers array per passenger.

Available on API version 2026-04-01 and above.

Response Example

200 Payment Link Created
{
  "amountInMinorUnits": 5000,
  "billingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "shippingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "lineItems": [
    {
      "type": "PRODUCT",
      "data": {
        "productDescription": "Example product",
        "sku": "SKU-123",
        "quantity": 1,
        "unitPrice": 5000,
        "currency": "GBP",
        "expectedDeliveryDate": "2026-03-20"
      }
    }
  ],
  "brandId": "YOUR_BRAND_ID",
  "cancelUrl": "https://www.example.com/cancel",
  "createdAt": "2026-01-01T01:01:01.000Z",
  "expiresAt": null,
  "externalReference": "Payment Link Example",
  "failureUrl": "https://www.example.com/failure",
  "id": "8f255c5f-fdfc-4fa6-8642-297a17209234",
  "metadata": null,
  "paymentReferences": [],
  "purpose": "PURCHASE",
  "status": "UNPAID",
  "successUrl": "https://www.example.com/success",
  "updatedAt": "2026-01-01T01:01:01.000Z",
  "url": "https://link.test.superpayments.com/id/8f255c5f-fdfc-4fa6-8642-297a17209234"
}

Step 2: Share the Link with Your Customer

Pass the url from the response to your customer via email, SMS, or any digital channel.

Step 3: Customer Completes Payment

The customer is directed to the hosted payment link page where they enter their payment details. Super securely processes the transaction.

Step 4: Customer is Redirected

Once the payment is processed, the customer is redirected to your successUrl or failureUrl depending on the outcome.


Saving a Card via Payment Link

You can save a customer's card during a Payment Link transaction by creating a customer record first and including their ID in the payment link request. Once the customer completes the payment, Super sends a customer.payment_method.enabled webhook containing the paymentMethodId for future charges.

📘 Pricing

Saved card payments are subject to additional charges. For full pricing details, visit our Pricing page.

Step 1: Create a Customer

Before creating the payment link, create a customer record in Super. Store the id returned in the response.

Request

curl --location 'https://api.superpayments.com/2026-08-01/customers' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY' \
--data '{
  "brandId": "YOUR_BRAND_ID",
  "emailAddress": "[email protected]",
  "externalReference": "customer_123",
  "firstName": "John",
  "lastName": "Smith",
  "phoneNumber": "07462123456"
}'
curl --location 'https://api.test.superpayments.com/2026-08-01/customers' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY' \
--data '{
  "brandId": "YOUR_BRAND_ID",
  "emailAddress": "[email protected]",
  "externalReference": "customer_123",
  "firstName": "John",
  "lastName": "Smith",
  "phoneNumber": "07462123456"
}'
200 Customer Created
{
  "id": "cus_123",
  "brandId": "YOUR_BRAND_ID",
  "emailAddress": "[email protected]",
  "externalReference": "customer_123",
  "firstName": "John",
  "lastName": "Smith",
  "paymentMethods": [],
  "createdAt": "2026-03-15T10:00:00.000Z",
  "updatedAt": "2026-03-15T10:00:00.000Z"
}

📘 Store the id (e.g. cus_...) against the customer in your system. You will need it in the next step.

Step 2: Create the Payment Link with Card Saving

Add the customer object to your payment link request with savePaymentMethod: true and the id from Step 1.

Request

curl --location 'https://api.superpayments.com/2026-08-01/payment-links' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY' \
--data '{
  "brandId": "YOUR_BRAND_ID",
  "externalReference": "Order-123",
  "amountInMinorUnits": 5000,
  "purpose": "PURCHASE",
  "customer": {
    "id": "cus_123",
    "savePaymentMethod": true
  },
  "successUrl": "https://www.example.com/success",
  "failureUrl": "https://www.example.com/failure",
  "cancelUrl": "https://www.example.com/cancel"
}'
curl --location 'https://api.test.superpayments.com/2026-08-01/payment-links' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY' \
--data '{
  "brandId": "YOUR_BRAND_ID",
  "externalReference": "Order-123",
  "amountInMinorUnits": 5000,
  "purpose": "PURCHASE",
  "customer": {
    "id": "cus_123",
    "savePaymentMethod": true
  },
  "successUrl": "https://www.example.com/success",
  "failureUrl": "https://www.example.com/failure",
  "cancelUrl": "https://www.example.com/cancel"
}'

Step 3: Receive the paymentMethodId via Webhook

Once the payment is authorised and the card saved, Super sends a customer.payment_method.enabled event to your webhook endpoint. Store the paymentMethodId from this event against the customer in your system.

{
  "data": {
    "type": "CARD",
    "usage": "OFF_SESSION",
    "status": "ENABLED",
    "customerId": "cus_123",
    "merchantId": "123-123-123-123",
    "paymentMethodId": "pm_123"
  },
  "eventId": "evt_test_123",
  "eventType": "customer.payment_method.enabled",
  "eventDatetime": "2026-03-15T10:01:00.000Z"
}

📘 For full webhook setup guidance, see the Webhook Documentation.

Once you have the paymentMethodId, you can use it to charge the customer at any time - see Charge a Saved Card.



Confirm the Payment Status

You can confirm the outcome of a payment link either by receiving a webhook, or by polling the Get Payment Link endpoint.

Webhooks

Super sends a webhook when a payment made through a payment link completes. payment.success is sent when the payment succeeds and payment.failed when it does not, so handle both to capture every outcome. A payment.failed event includes declineCode and declineReason explaining why the payment did not go through - see Handling decline responses.

The data.source field is set to paymentLink, so you can tell payment link events apart from payments taken through your other integrations.

No enablement is required - webhooks fire for payment links as soon as you have a webhook endpoint configured. Set one up in the Business Portal under Developers → Webhooks. These webhooks follow the same format as every other Super webhook - see the Webhook Documentation for setup and signature verification.

{
  "data": {
    "amount": {
      "amount": 5000,
      "currency": "GBP",
      "amountMultiplier": 100
    },
    "source": "paymentLink",
    "status": "PaymentSuccess",
    "brandId": "123-123-123-123",
    "paymentId": "123-123-123-123",
    "fundingSummary": {
      "superFundedAmount": {
        "amount": 0,
        "currency": "GBP",
        "amountMultiplier": 100
      },
      "customerFundedAmount": {
        "amount": 5000,
        "currency": "GBP",
        "amountMultiplier": 100
      },
      "merchantFundedAmount": {
        "amount": 0,
        "currency": "GBP",
        "amountMultiplier": 100
      },
      "cashPayableToMerchant": {
        "amount": 5000,
        "currency": "GBP",
        "amountMultiplier": 100
      }
    },
    "surchargeAmount": {
      "amount": 600,
      "currency": "GBP",
      "amountMultiplier": 100
    },
    "paymentReference": "PAYMENT123",
    "externalReference": "Order-123",
    "paymentInitiatorId": "123-123-123-123"
  },
  "eventId": "evt_123",
  "eventType": "payment.success",
  "eventDatetime": "2026-03-15T10:20:28.000Z"
}

Polling the API

If you are not using webhooks, retrieve the final status by calling the Get Payment Link endpoint with the payment link ID.

Request Example

curl --location 'https://api.superpayments.com/2026-08-01/payment-links/2826959b-3319-4f43-b1bb-e5adc7efaecb' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY'
curl --location 'https://api.test.superpayments.com/2026-08-01/payment-links/2826959b-3319-4f43-b1bb-e5adc7efaecb' \
--header 'Accept: application/json' \
--header 'Authorization: YOUR_SUPER_SECRET_KEY'

Response Example

200 Payment Link Details
{
  "amountInMinorUnits": 5000,
  "billingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "shippingAddress": {
    "addressLine1": "1 Example Street",
    "addressLine2": null,
    "addressLine3": null,
    "city": "London",
    "country": "GB",
    "postCode": "XY1 2ZY",
    "firstName": "John",
    "lastName": "Smith",
    "phone": "07462123456",
    "email": "[email protected]"
  },
  "lineItems": [
    {
      "type": "PRODUCT",
      "data": {
        "productDescription": "Example product",
        "sku": "SKU-123",
        "quantity": 1,
        "unitPrice": 5000,
        "currency": "GBP",
        "expectedDeliveryDate": "2026-03-20"
      }
    }
  ],
  "brandId": "YOUR_BRAND_ID",
  "cancelUrl": "https://www.example.com/cancel",
  "createdAt": "2026-01-01T01:01:01.000Z",
  "expiresAt": "2026-01-01T01:01:01.000Z",
  "externalReference": "Order 123",
  "failureUrl": "https://www.example.com/failure",
  "id": "2826959b-3319-4f43-b1bb-e5adc7efaecb",
  "metadata": null,
  "paymentReferences": [],
  "purpose": "PURCHASE",
  "status": "UNPAID",
  "successUrl": "https://www.example.com/success",
  "updatedAt": "2026-01-01T01:01:01.001Z",
  "url": "https://link.test.superpayments.com/id/2826959b-3319-4f43-b1bb-123456643"
}

Payment Link Status Definitions

Status
Description
UNPAID
No successful payment has been processed against the link.
PAID
The transaction was successfully authorised and funds have been captured.

📘 Expired links return UNPAID

The API returns only PAID or UNPAID. A link that has passed its expiry date still returns UNPAID, so check the link's expiry date rather than relying on the status to tell you whether it can still be paid. The Business Portal shows Expired as a separate state for display purposes only.


Did this page help you?