On this page
No Headings
Last updated: June 4, 2026
Troubleshoot, read our FAQs, follow best practices, and customize your integration.
The following are common issues and steps to take to resolve them:
This error indicates that your merchant account and client credentials may not be fully provisioned for Fastlane. Contact your account team for assistance.
Add a new card or address to the member's Fastlane profile and complete the order. The payment should be processed successfully with the new card.
If FastlaneCardComponent.getPaymentToken() doesn't return a token, ensure that all required parameters are passed in the correct format.
Fastlane has been disabled in the PayPal dashboard if identity.triggerAuthenticationFlow(), profile.showShippingAddressSelector(), or profile.showCardSelector() return undefined.
If Fastlane is disabled, the Fastlane client SDK falls back to the guest experience without the option to create a Fastlane profile, ensuring no interruption to buyers.
The following are common issues and steps to take to resolve them:
Yes, the paymentToken returned on the client can be saved to the vault. You can vault the paymentToken before transacting or transact before vaulting. PayPal only supports vaulting when using the store_in_vault attribute of the create order request.
Fastlane does not support a flow where a customer or payment method is created prior to a transaction.
A paymentToken is valid for 3 hours from the time of issuance.
When calling window.paypal.fastlane.create(), you can pass a list of allowed locations using the addressOptions object.
If the payer navigates away from the checkout page, call the triggerAuthenticationFlow() method when the page reloads. The SDK determines whether the payer must authenticate via OTP again or if the session should be restored. The method returns the authenticatedCustomerResult, which includes a new paymentToken.
Fastlane is only available to payers in the US. If you are outside the US, use a VPN to test the payer flows.
A Fastlane member who has authenticated on their device won't receive an OTP for additional transactions with the same merchant during the same session. After the session expires, re-authentication is required.
Fastlane does not support mail order/telephone order (MOTO) or manual entry transactions.
Optimize your buyer experience, Fastlane member experience, integration, and styling.
Ensure buyers have the best Fastlane experience by following these best practices.
Display the PayPal button on the cart page or alongside the Fastlane email field to provide buyers the option to use their PayPal account.
Fastlane accounts are looked up by email address, so the email field must be the first step of checkout. If a profile is found, Fastlane retrieves shipping and payment details. If email is requested later in the process, it can create a confusing experience.
Display the Fastlane watermark below merchant-rendered fields for transparency. The watermark includes a link to the Fastlane terms of service.
Once a Fastlane member is authenticated and their profile is retrieved, simplify the UI by hiding other payment methods under a single link.
When a buyer enters the OTP, they intend to use Fastlane. Provide access to other payment methods but maintain a minimalistic UI to keep the focus on completing the transaction.
After a Fastlane member authenticates, implement these best practices to reduce friction:
showAddressSelector() to allow buyers to update or add a new address.showCardSelector() to allow selection or addition of a new card.Optimize your integration with these best practices.
Always load the Fastlane SDK during the onload event of the checkout page. Delayed SDK loading may cause conversion issues.
Ensure shipping and billing address updates apply correctly by passing them via /v2/checkout/orders. This is especially important when users add new addresses or payment methods.
Invoke triggerAuthenticationFlow() each time the checkout page reloads. The SDK determines whether re-authentication via OTP is required or if the session can be restored. This method returns the authenticatedCustomerResult, including a new single-use token.
Ensure users can edit their profile details. Use a change button that calls profile.showShippingAddressSelector() or profile.showCardSelector() to launch modals for updating information.
Use the following configuration parameters, profile method reference types, and style options to customize your Fastlane integration.
To initialize Fastlane, use the following method:
window.paypal.Fastlane(options);
interfaceFastlaneOptions{
shippingAddressOptions:AddressOptions,
cardOptions:CardOptions,
styles:StyleOptions
}
/*
* To restrict the use of Fastlane to specific countries or regions, set
* allowedLocations to an array containing the countries or regions where Fastlane
* should be allowed.
*
* To allow all regions within a particular country, specify only the country's
* ISO 3166-1 alpha-2 country code.
*
* To allow only specific regions in a country, specify the country's
* ISO 3166-1 alpha-2 country code, followed by a colon (":"), followed by the
* name of the region.
*
* Examples:
*
- [ "US" ] = Allow all regions within the United States
*
- [ "US:CA", "US:AZ" ] = Allow in California in Arizona, but nowhere else
*
- [ "US:CA", "US:AZ", "FR" ] = Allow in California, Arizona, and France,
* but nowhere else
*/
interfaceAddressOptions{
// default: empty array = all locations allowed
allowedLocations:[AddressLocationEnum];
}
EnumAddressLocationEnum{
{
ISO- country - code
}{
ISO- country - code
}:{
ISO- region - code
}
}
interfaceCardOptions{
// default: empty array = all brands allowed
allowedBrands:[CardBrandEnum];
}
EnumCardBrandEnum{
CHINA_UNION_PAY
}type create=(options:FastlaneOptions)=>Fastlane;interface Fastlane {
identity {
lookupCustomerByEmail: (email: string) => LookupCustomerResult,
triggerAuthenticationFlow: (customerContextId: string, options: AuthenticationFlowOptions) => AuthenticatedCustomerResult
}
profile {
showShippingAddressSelector: () => ShowShippingAddressSelectorResult,
showCardSelector: () => ShowCardSelectorResult,
}
setLocale: (locale: string) => void, // options: en_us, es_us, fr_us, zh_us
FastlaneCardComponent: (options: FastlaneCardComponentOptions) => FastlaneCardComponent,
FastlanePaymentComponent: (options: FastlanePaymentComponentOptions) => FastlanePaymentComponent,
FastlaneWatermarkComponent: (options: FastlaneWatermarkOptions) => FastlaneWatermarkComponent
}The LookupCustomerResult object type is returned from the identity.lookupCustomerByEmail(email) method.
interface LookupCustomerResult {
customerContextId: string
}interface FastlaneWatermarkOptions {
includeAdditionalInfo: boolean
}
interface FastlaneWatermarkComponent {
render: (container) => null
}The AuthenticatedCustomerResult object type is returned from the
identity.triggerAuthenticationFlow() call.
interface AuthenticatedCustomerResult {
authenticationState: 'succeeded' | 'failed' | 'canceled' | 'not_found';
profileData: ProfileData;
}
interface ProfileData {
name: Name;
shippingAddress: Shipping;
card: PaymentToken;
}
interface Name = {
firstName: string;
lastName: string;
fullName: string;
};
interface Phone = {
nationalNumber: string;
countryCode: string;
};
interface Address = {
addressLine1: string,
addressLine2: string,
adminArea1: string,
adminArea2: string;
postalCode: string,
countryCode: string
phone: Phone;
};
interface Shipping = {
name: Name;
address: Address;
companyName: string;
}
interface BillingAddress = Address;
interface PaymentToken {
id: string; // This is the payment paymentToken
paymentSource: PaymentSource;
}
interface PaymentSource {
card: CardPaymentSource;
}
interface CardPaymentSource {
brand: string;
expiry: string; // "YYYY-MM"
lastDigits: string; // "1111"
name: string;
billingAddress: Address;
}interface ShowShippingAddressSelectorResult {
selectionChanged: boolean;
selectedAddress: Address;
}
interface ShowCardSelectorResult {
selectionChanged: boolean;
selectedCard: PaymentToken;
}The FastlaneCardComponent uses hosted card fields. The resulting interface is a subset of the card fields interface.
An instance of a FastlaneCardComponent can be created using:
const fastlaneCardComponent = await fastlane.FastlaneCardComponent({
...
})
fastlaneCardComponent.render("#card-container")FastlaneCardComponent reference types:
type FastlaneCardComponent = (options: FastlaneCardComponentOptions) => FastlaneCardComponent;
interface FastlaneCardComponent {
render: (container) => FastlaneCardComponent;
getPaymentToken: async (options: PaymentTokenOptions) => PaymentToken;
}
interface FastlaneCardComponentOptions {
styles: StyleOptions;
fields: {
Field
};
}
interface Field {
placeholder: string;
prefill: string;
enabled: boolean;
}
interface PaymentTokenOptions {
billingAddress: Address;
cardholderName: Name;
}You can configure the card fields in the FastlaneCardComponent or FastlanePaymentComponent when initializing the components.
const styles: {};
const fields: {
number: {
placeholder: "Number",
},
phoneNumber: {
prefill: "555-555-5555"
}
}
}
fastlane.FastlaneCardComponent({
styles,
fields
}).render(elem);
fastlane.FastlanePaymentComponent({
styles,
fields
}).render(elem);You can prefill both FastlaneCardComponent and FastlanePaymentComponent.
| Name | Type | Attributes | Description |
|---|---|---|---|
number | field | Optional | A field for the card number. |
expirationDate | field | Optional | A field for expiration date in MM/YYYY or MM/YY format. This should not be used with the expirationMonth and expirationYear properties. |
expirationMonth | field | Optional | A field for expiration month in MM format. This should be used with the expirationYear property. |
expirationYear | field | Optional | A field for expiration year in YYYY or YY format. This should be used with the expirationMonth property. |
cvv | field | Optional | A field for a 3 or 4-digit card verification code (like CVV or CID). If creating a CVV-only payment token to verify a card stored in your vault, omit all other fields. |
postalCode | field | Optional | A field for the postal or region code. |
cardholderName | field | Optional | A field for the cardholder name on the payer's credit card. |
phoneNumber | field | Optional | A field for the payer's phone number. |
Colors can be any value that CSS allows in hex values, RGB, RGBA, and color names.
interface StyleOptions {
root: {
backgroundColor: string,
errorColor: string,
fontFamily: string,
textColorBase: string,
fontSizeBase: string,
padding: string,
primaryColor: string,
},
input: {
backgroundColor: string,
borderRadius: string,
borderColor: string,
borderWidth: string,
textColorBase: string,
focusBorderColor: string,
},
}When styling the Fastlane components to match your checkout page, follow these guidelines to ensure an accessible and transparent experience for your payer:
backgroundColor and textColor to keep all text, especially legal text under the opt-in, clear and legible. If the contrast ratio is below 4.5:1, PayPal automatically sets the contrast to the default values shown in the table below.borderColor, which determines the consent toggle color, and backgroundColor.Note: All Fastlane integrations must conform to WCAG levels A and AA. If the color of the legal text and toggle button is not distinguishable from the text and background, the Fastlane component colors will revert to the default.
| Value | Description | Default | Guidance and Thresholds |
|---|---|---|---|
root.backgroundColor | The background color of the components. | #ffffff | May be any valid CSS color. No transparency allowed. |
root.errorColor | The color of errors in the components. | #D9360B | May be any valid CSS color. No transparency allowed. |
root.fontFamily | The font family used throughout the UI. | PayPal-Open | Must be one of: Arial, Verdana, Tahoma, Trebuchet MS, Times New Roman, Georgia, Garamond, Courier New, Brush Script MT. |
root.fontSizeBase | The base font size. Increasing this value changes text size in UI components. | 16px (Min: 13px, Max: 24px) | |
root.textColorBase | The text color used across all text outside of inputs. | #01080D | May be any valid CSS color. No transparency allowed. |
input.borderRadius | The border radius used for the email field. | 0.25em (Min: 0px, Max: 32px) | |
input.borderColor | The border color of the email field. | #DADDDD | May be any valid CSS color. No transparency allowed. |
input.focusBorderColor | The border color of the email field when focused. | #0057FF | May be any valid CSS color. No transparency allowed. |
input.borderWidth | The width of the input borders. | 1px (Max: 5px) | Default size is 1px. |
input.textColorBase | The text color used for text within input fields. | #01080D | May be any valid CSS color. No transparency allowed. |
Use the following image URLs to load card assets. These enable users to see the branded image of their card.
| Card Brand | Image URL |
|---|---|
| Amex | Amex Logo |
| Diners Club | Diners Club Logo |
| Discover | Discover Logo |
| JCB | JCB Logo |
| Mastercard | Mastercard Logo |
| Union Pay | Union Pay Logo |
| Visa | Visa Logo |
Related documentation:
Use our ready-made quickstart integration or customize form fields with our flexible integration.
Upgrade existing PayPal and card integrations to use Fastlane.
Set up your development environment to integrate Fastlane.