GoCardlessDeveloper Docs
Create a sandbox account

Prefilling customer details with existing customer record#

View as Markdown

If you already hold information about your customer (the payer), you can provide this information before sending your customer through a Billing Request Flow. As a result of prefilling customer data, the customer will need to perform fewer steps to complete their payment flow. This leads to a more seamless experience with less friction for the customer and will result in higher conversion.

There are three ways that prefilling can be done.

  1. Collect Customer Details endpoint — Creates a fully pre-populated customer record so the customer skips the details page. Requires GoCardless Pro or GoCardless Enterprise with the custom payment pages upgrade.
  2. Existing customer record — Link an existing customer ID to the Billing Request. The customer's details are already known and they skip the customer details page entirely.
  3. Billing Request Flows API — Pass prefilled values into the Billing Request Flow. The customer sees their details pre-populated in the form and only needs to confirm them.

This flowchart explains which of the above methods you would use for various situations:

Billing Request Prefilling workflow choices

This doc explains how to prefill customer details using each of these approaches before sending someone into a Billing Request Flow.

Create a Billing Request#

Create a Billing Request for whatever resources you want to create - our example will ask for a payment of £5. Supply the ID of an existing customer record via the links[customer] field in o apply it to the Billing Request.

Use the Create a Billing Request endpoint:

POST /billing_requests
{
  "billing_requests": {
    "payment_request": {
      "currency": "GBP",
      "amount": "500",
      "description": "Large pot of Marmalade"
    }
  },
  "links": {
      "customer": "CU00016YYBRCJD"
  }
}

You will receive a full Billing Request, and the existing customer and customer billing details will be linked against it.

It will look like this:

{
  "billing_requests": {
    "id": "BRQ123",
    "status": "pending",
    "mandate_request": null,
    "payment_request": {
      "description": "Large pot of Marmalade",
      "currency": "GBP",
      "amount": 500,
      "scheme": "faster_payments",
    },
    "actions": [
      {
        "type": "collect_customer_details",
        "required": true,
        "completes_actions": [],
        "requires_actions": [
          "choose_currency"
        ],
        "status": "pending",
        "collect_customer_details": {
          "incomplete_fields": {
            "customer": [
              "email"
            ],
            "customer_billing_detail": []
          }
        }
      },
      ...
    ],
    "resources": {
      "customer": {
        "id": "CU00016YYBRCJD",
        "created_at": "2021-05-07T15:34:38.627Z",
        "email": null,
        "given_name": "Paddington",
        "family_name": "Bear",
        "company_name": null,
        "language": "en",
        "phone_number": null,
        "metadata": {}
      }
    }
  }
}

Create a Billing Request Flow#

You can now proceed to create a Billing Request Flow to retrieve a link that can be provided to your customer to complete the request:

POST /billing_request_flows
{
  "billing_request_flows": {
    "links": {
      "billing_request": "BRQ123"
    }
  }
}

This returns the Billing Request Flow:

{
  "billing_request_flows": {
    "id": "BRF000012CV7SZN9ZJC3S27AAZ1JFWCW",
    "auto_fulfil": true,
    "redirect_uri": null,
    "authorisation_url": "https://pay.gocardless.com/billing/static/flow?id=BRF000012CV7SZN9ZJC3S27AAZ1JFWCW",
    "lock_customer_details": false,
    "lock_bank_account": false,
    "expires_at": "2021-05-14T15:34:44.693Z",
    "created_at": "2021-05-07T15:34:44.707Z",
    "links": {
      "billing_request": "BRQ123"
    }
  }
}

If the customer visits the authorisation_url, they will begin the checkout flow asking for their customer details, but with given and family name already prefilled:

Pre-filled Customer Details Form

The customer can amend any of the prefilled information and complete those fields that haven't been prefilled.

Final note#

It's worth noting that this same functionality means customers who leave the flow and come back later will resume from where they left off.

What's next?#