# Set Up Zuora Payment Forms

Limio now supports **Zuora Payment Forms (ZPFs)** as a secure, PCI-compliant way for customers to enter payment details directly within your Limio checkout. This functionality builds on Zuora’s [Payment Forms and Payment Links](https://knowledgecenter.zuora.com/Zuora_Payments/Process_payments/Payment_Forms_and_Payment_Links) and allows you to configure country and currency–specific forms that map to the correct Zuora gateway.

{% hint style="info" %}
This feature was introduced in [Release 109](https://docs.limio.com/release-notes/limio-commerce-release-notes/readme/limio-release-notes-release-109)
{% endhint %}

### Pre-requisites

* You have a Zuora tenant with Payment Forms enabled.
* You have a Zuora **Payment Gateway** configured.
* You have admin access in Limio (to manage settings).
* *(Optional but recommended)* [reCAPTCHA enabled](https://docs.limio.com/product/settings/browser/security/recaptcha-bot-protection) to prevent bot abuse.

### 1. Set up in Zuora

1. In Zuora, go to **Payments → Setup Payment Forms and Payment Links → Payment Forms**.
2. Create a new **Payment Form** or copy the default one.
3. Configure regions, fields, and styling (button, layout, colours) as needed.
4. Copy the **Publishable Key** and **Payment Form Number (PF-xxxxx)**.
5. Make sure you have a **default Payment Gateway** (or specify one later when creating the session).

For more information please refer to the [Zuora Documentation](https://knowledgecenter.zuora.com/Zuora_Payments/Process_payments/Payment_Forms_and_Payment_Links).

### 2. Set up in Limio

Here’s how to configure Limio so the Payment Forms are used correctly.

#### Basic Configuration

<figure><img src="/files/XDo1jp86ZyGbroNwtSzK" alt=""><figcaption></figcaption></figure>

1. In Limio dashboard, go to **Settings → Zuora → Payment Form Pages**
2. Add a new form configuration. Fill out:

   | Field                             | What to set / example                                                                         |
   | --------------------------------- | --------------------------------------------------------------------------------------------- |
   | Page URL                          | The Zuora Payment Form URL (e.g. `https://apisandbox.zuora.com/apps/PublicHostedPageLite.do`) |
   | Zuora Page Height                 | e.g. `400px`, `500px` — height for the iframe on checkout                                     |
   | Country Codes                     | Which countries this payment form applies to                                                  |
   | Currency Codes                    | Which currencies this payment form applies to                                                 |
   | Form Number / Payment Form Number | The identifier you got from Zuora                                                             |
   | Publishable Key                   | From Zuora                                                                                    |
   | Payment Gateway ID                | From Zuora                                                                                    |
   | Payment Gateway Name              | Friendly name used in UI / reporting                                                          |
3. Save.
4. In your *Offer* definitions in Limio, ensure **Payment Type** includes “Zuora Payment Form” so customers see this option.

### 3. Customer checkout flow

#### Acquisition

Zuora Payment Form are supported in Limio's [https://docs.limio.com/product/checkout/overview-how-to-customise-the-limio-modular-checkout](https://docs.limio.com/product/checkout/overview-how-to-customise-the-limio-modular-checkout "mention").

<figure><img src="/files/Ffvm78DNLamEEw1WoDDu" alt=""><figcaption></figcaption></figure>

Once set up:

* Upon checkout, Limio will fetch the appropriate Form configuration based on the user’s basket (country & currency).
* Limio will request a **payment session token** from Zuora via an API (secure).
* The Zuora Form is rendered as configured in Zuora to collect payment details.
* On submission, the payment method is stored in Zuora.
* The order is processed according to your defined payment settings.

#### Self-service

Zuora Payment Form is supported in [https://docs.limio.com/components/component-library/self-service-components/component-self-service-form](https://docs.limio.com/components/component-library/self-service-components/component-self-service-form "mention").

{% hint style="warning" %}
Zuora Payment Form is not supported in legacy Self-Service components such as [https://docs.limio.com/components/component-library/legacy-configuration-components/component-payments-table](https://docs.limio.com/components/component-library/legacy-configuration-components/component-payments-table "mention"). You can still use [Zuora Hosted Payment Methods Pages](/integrations/zuora-integration/configuring-payment-gateways/how-to-set-up-zuora-hosted-payment-methods-for-limio.md) .
{% endhint %}

### 4. Common issues & troubleshooting

| Symptom                                 | Possible cause                                          | What to check                                                                                          |
| --------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| No form shows up for certain customers  | No matching country & currency configuration            | Verify your Limio configuration includes the country/currency of the user’s basket                     |
| Payment session generation fails        | Misconfigured API credentials or gateway in Zuora       | Check your Zuora credentials, gateway ID, that form is active                                          |
| Styling / layout looks off in checkout  | CSS in Zuora Form height misset                         | Adjust height or use CSS overrides in Zuora or Limio (or ensure correct page height in Limio settings) |
| Required fields missing or not enforced | Form misconfigured in Zuora; fields not marked required | In Zuora Payment Form settings, ensure field visibility/requirement correctly set                      |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.limio.com/integrations/zuora-integration/configuring-payment-gateways/how-to-set-up-zuora-payment-forms-for-limio.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
