Payment Request Links

This page is about creating Payment Requests via query parameters.

When you are using query parameters, you can only create links for a Payment Request with a single payment.

Want to create Payment Request links with more features?

For creating Payment Requests links with features like installments or subscriptions you need to use imageClient Dashboard or the imageFlywire API.

Want to manage Payment Requests after creating them?

For managing Payment Requests, for example changing or deleting them, you need to use imageClient Dashboard or the imageFlywire API .

Want to receive callbacks?

Make sure you read the Notes for Callbacks.

How it works

  1. You build a Payment Request by constructing them with these two parts:

    1. Base URL (depends on the environment you want to use, see Base URLs)

    2. Query String (depends on your individual settings and use case, see List of parameters)

    Example:

    https://app.flywire.com/#/payment-request/quick-pay?code=FWB&clientId=XYZ123&amount=2000&firstName=John&lastName=Doe

  2. You give this link to your payer, for example via email.

  3. The payer visits the link.

  4. Once the payer clicks on the "Make Payment" button, the query parameters are resolved into a Payment Request ID and a Payment Request is created in your system.

  5. Now that the Payment Request has been created, it will be visible to you in Dashboard and via the API.

Which type of Payment Request link do you want to create?

Unpaid:

Paid:

image

A stateful Payment Request link for single payment shows the amount to pay. Since the link is stateful, visiting the link again after the payment is made shows the information that the amount is already paid. This means you can use these types of links for unique links, for example links that you only want to use for a specific payer.

Good to know:

Stateful Payment Request links are ideal for highly customized links you want to send to a specific customer. For example, you can insert them into an invoice or an email template and they pre-fill the Checkout Experience form with all the payer info and the payment amount.

You can create stateful Payment Request links via Pay-By-Link or via an API request.

A stateless Payment Request link shows a form to enter payer details and then make a payment - even if a payment already has been made through this link. This means you can use these types of links to reuse them, for example using them on your website to always make a payment with a pre-set amount.

Good to know:

Stateless links need to be enabled for your portal before you can use them. Please reach out to your Flywire contactfor this.
Stateless links always create a Payment Request for a single payment.
Unlike stateful Payment Request links, stateless links don't require an amount to be provided, which means you can use them for completely "blank" links that don't pre-fill any fields.
Depending on your portal settings, it might be mandatory for the payer to store their used payment method for future payments. If this is the case for your portal, creating a Payment Request will create a new contact with the payer's details in Dashboard and the payment method will be saved for this contact.

Payment Request Link Generator

Important for stateful links

When building stateful Payment Request links via query parameters, you must include a unique value, like a booking reference. This ensures that the system generates a unique Payment Request ID. If you use identical query parameters and values, they will always be resolved to the same Payment Request ID.

Choose which parameters you want to see on this page:

Base URL

Choose the base URL for your link type and environment:

Anti-tampering
Portal identification and authentication

Providing the portal code and client ID is required. If you don't know them, please reach out to your Flywire contact.

Payment amount

Providing an amount it required for stateful Payment Request links.

Payer data

Some payer data fields might be required for creating the link.

It depends on your Dashboard settings whether and which sender (payer) fields are required.

Custom fields for the portal

Some custom fields might be required for creating the link.

Check your portal configuration to see which custom fields exist for your portal.

Language options

Enables you to set the language of the payment page.

If not provided, the payment page defaults to the browser's language (if supported). While browser-based adaptation is recommended, you can set a fixed language using this parameter.

Filtering payment options

By default, Flywire displays all payment options for a portal. In some cases, you might want to restrict the available payment options, for example if you want to accept only bank transfers for payments over a certain amount or only show card payments a certain time before a booking.

You can use two filters to restrict payment options:

  • Restrict to specific types of payments

  • Restrict to specific currencies

QR code settings
Your link and QR code

Payment Request Links Reference

Base URLs

For stateful links

Production
https://app.flywire.com/#/payment-request/quick-pay
Demo
https://app.demo.flywire.com/#/payment-request/quick-pay

For stateless links

Production
https://app.flywire.com/#/payment-request/send
Demo
https://app.demo.flywire.com/#/payment-request/send

List of parameters

All values must be URL encoded since they are used in query string parameters. To make reading the guide easier the example values have not been encoded. Omitting this step may generate broken links.

Important for stateful links

When building stateful Payment Request links via query parameters, you must include a unique value, like a booking reference. This ensures that the system generates a unique Payment Request ID. If you use identical query parameters and values, they will always be resolved to the same Payment Request ID.

Portal identification and authentication (required)

Providing the portal code and client ID is required. If you don't know them, please reach out to your Flywire contact.

Parameter Description Example
code

The portal code for this portal (also called recipient).

The portal code identifies the portal. The portal code has been assigned by Flywire when the portal has been set up.

Format:

Either: 3 letters (ABC)

Or: 5 alphanumeric characters, always starting with a letter (ABC1D)

code=FWB
clientId

Your client ID is identical to the public reference of your company.

clientId=ABC123

Payment amount (required for stateful links)

Providing an amount it required for stateful Payment Request links.

Parameter Description Example
amount

The payment amount in the billing currency.

The billing currency is the currency in which the recipient of the payment is billing their payer. The billing currency depends on the portal's configuration and is defined when the portal is set up by Flywire.

The amount is specified as a decimal (1000.25).

amount=1234.56

Payer data

Some payer data fields might be required for creating the link.

It depends on your Dashboard settings whether and which sender (payer) fields are required.

Parameter Description Example
firstName

The payer's first name.

This parameter has a maximum length of 256 characters.

This parameter cannot contain Chinese (Han), Japanese (Katakana or Hiragana), or Korean (Hangul) characters.

firstName=John
lastName

The last name (family name) of the payer.

This parameter has a maximum length of 256 characters.

This parameter cannot contain Chinese (Han), Japanese (Katakana or Hiragana), or Korean (Hangul) characters.

lastName=Doe
email

The payer's email address.

This parameter has a maximum length of 32 characters.

[email protected]
address

The payer's address.

address=21 Jump St
city

The payer's city.

This parameter has a maximum length of 256 characters.

This parameter cannot contain Chinese (Han), Japanese (Katakana or Hiragana), or Korean (Hangul) characters.

city=Boston
state

The state of the payer.

Format:

Only the second part of the ISO 3166-2 code, for example for US-NY the value is NY.

This parameter has a maximum length of 256 characters.

This parameter cannot contain Chinese (Han), Japanese (Katakana or Hiragana), or Korean (Hangul) characters.

state=MA
zip

The payer's zip code.

zip=02111
country

The country of the payer.

Format:

Two-letter format (ISO 3166-1 alpha-2), for example US for USA or GB for the United Kingdom.

country=US
phone

The phone number of the payer (including the country code).

Use + in front of the country code, for example, "+44123456" for country code 44.

phone=+16173214567

Custom fields for the portal

Some custom fields might be required for creating the link.

Check your portal configuration to see which custom fields exist for your portal.

Example for common custom fields:

(Note that the custom fields for your portal might be different, these are just examples)

Parameter Description Example
booking_reference Unique booking identifier booking_reference=REF-1234
invoice_number Unique invoice identifier invoice_number=INV-1234

Language options

Parameter Description Example
locale

Enables you to set the language of the payment page.

If not provided, the payment page defaults to the browser's language (if supported). While browser-based adaptation is recommended, you can set a fixed language using this parameter.

locale=es

Filtering payment options

By default, Flywire displays all payment options for a portal. In some cases, you might want to restrict the available payment options, for example if you want to accept only bank transfers for payments over a certain amount or only show card payments a certain time before a booking.

You can use two filters to restrict payment options:

  • Restrict to specific types of payments

  • Restrict to specific currencies

 

Parameter Description Example
filterType

Payment method type filters.

Each filter you add means show this option. Each filter you leave out means hide this option.

For example, credit_card ,online means: Show card payment options and online alternative pay options, but no bank transfer options.

If you don't provide any filters, all payment method types will be displayed in the Checkout Experience.

bank_transfer Bank transfer option - payer receives instructions how to transfer the money to Flywire
credit_card Card payment options - credit or debit cards
online Alternative online payment options - e.g. PayPal
direct_debit Direct debit option - funds are automatically withdrawn from the payer’s bank account
moto_payment MOTO (Mail Order / Telephone Order) payment – payments entered manually by a Flywire agent
filterType=online,credit_card
filterCcy

Payment currency filters. The filters restrict payment options based on currencies:

local

Show only payment options in the payer's local currency (e.g., only GBP for a payer in the UK).

foreign

Show only payment options not in the payers local currency (e.g., everything but GBP options for a payer in the UK).

fx

Only show payment options that are a different currency to the billing currency (e.g., everything but GBP if your billing currency is GBP).

nonFX

Only show payment options that are in the same currency as the billing currency (e.g., only GBP if your billing currency is GBP).

Be careful with combining those filters. Your payer might end up not being able to pay if you restrict the options too much. As a best practice, use either local/ foreign (when you want the options to depend on the payer's country) or fx / nonFX (when you want the options to depend on your billing currency).

filterCcy=fx

Notes for Callbacks

Callbacks for the Payment Request

Callbacks for Payment Requests are set up via Dashboard, see Callbacks for Payment Request Notifications.

Callbacks for payments that are part of a Payment Request

You cannot provide a dynamic callback URL for payments that are part of a Payment Request. To receive callbacks about those payments, you have to use the static URL. Alternatively, you can use callback notifications for Payment Request status updates, but note that the content of those callbacks is different from payment status callbacks.

Anti-Tampering

When query parameters are used as plain text in URLs, they can be easily understood and potentially tampered with. To safeguard against this, you can encrypt the links with Base64 to enhance their security.

While this anti-tampering method does not fully prevent customers from decoding and editing the URL, it does effectively discourage casual users from viewing and altering the values within the URL.

1. Base URL

2. Query String Construction with URL Encoding

Note: Do not include the leading query string ?

3. Base64 Encoding

4. Final URL Construction

const baseUrl = 'https://app.flywire.com/#/payment-request/quick-pay';
// Note: Do not include the leading query string ?
let queryString = 'code=FWB';
queryString += '&clientId=ABC123';
queryString += '&amount=1234.56';
queryString += '&email=' + encodeURIComponent('[email protected]');
queryString += '&address=' + encodeURIComponent('123 Main St, Suite #100');

queryString = btoa(queryString);

const finalUrl = baseUrl + '?' + queryString;
console.log(finalUrl);

After the payment is created

After the payer followed the payment request link and filled out the form, a payment is created.

The payment will be visible to you in your imageClient Dashboard , where you can manage it (for example add installments) and track the payment's history (for example checking if the payer has opened the link).