Skip to main content
RapidDev - Software Development Agency
bubble-integrationsBubble API Connector

Worldpay

Connect Bubble to Worldpay using the API Connector with HTTP Basic Auth — your Service Key as the username and an empty password. Before writing a single API call, you must identify which Worldpay platform your merchant account is on: the legacy UK platform (api.worldpay.com) or the newer FIS platform (access.worldpay.com). These are different systems with different credentials, endpoints, and API structures. Test credentials start with T_S_ and live credentials with L_S_ for the legacy platform.

What you'll learn

  • How to identify which Worldpay platform your account is on (legacy UK vs FIS) — the critical first step
  • How to configure Bubble's API Connector with Basic Auth using Service Key as username and empty password
  • Why Worldpay order codes are case-sensitive and what happens when Bubble transforms them
  • How to convert GBP amounts to pence (minor currency units) for Worldpay's API
  • How to build order creation, status lookup, and refund workflows in Bubble
  • How to set up a paid-plan Backend Workflow for Worldpay payment notifications
  • Why test credentials (T_S_*) and live credentials (L_S_*) must match their respective base URLs
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Advanced18 min read3–4 hoursPaymentsLast updated July 2026RapidDev Engineering Team
TL;DR

Connect Bubble to Worldpay using the API Connector with HTTP Basic Auth — your Service Key as the username and an empty password. Before writing a single API call, you must identify which Worldpay platform your merchant account is on: the legacy UK platform (api.worldpay.com) or the newer FIS platform (access.worldpay.com). These are different systems with different credentials, endpoints, and API structures. Test credentials start with T_S_ and live credentials with L_S_ for the legacy platform.

Quick facts about this guide
FactValue
ToolWorldpay
CategoryPayments
MethodBubble API Connector
DifficultyAdvanced
Time required3–4 hours
Last updatedJuly 2026

Worldpay + Bubble: Platform Identification First, Then API Connector Setup

The most important thing to do before opening Bubble is to confirm which Worldpay platform you are on. Since FIS acquired Worldpay in 2018, there are now at least two distinct Worldpay API systems:

1. **Legacy UK Platform** (`api.worldpay.com`): The original Worldpay UK API. Test credentials start with `T_S_` and live credentials with `L_S_`. If you see these prefixes on your credentials, you are on this platform. This is the platform this tutorial covers.

2. **Worldpay from FIS Platform** (`access.worldpay.com`): A newer, separate platform with different credentials and endpoint structures. Credentials for this platform look different — contact your Worldpay account manager to confirm.

Using the wrong base URL with your credentials will always return a 401 error that looks like a credentials problem, not a platform-mismatch problem. Identifying your platform first saves hours of debugging.

Once confirmed on the legacy UK platform, the integration uses HTTP Basic Auth with your Service Key as the username and an empty password. Bubble's API Connector handles this cleanly — mark the username Private, leave the password field empty. Order amounts are in minor currency units (pence for GBP: £19.99 = 1999), and order codes are case-sensitive.

API access for most Worldpay merchant tiers requires contacting your relationship manager — there is no self-serve API key generation for many account types. This is a significant access barrier compared to Stripe or Braintree, and worth noting upfront so you do not start building before you have valid credentials.

Integration method

Bubble API Connector

Use the built-in API Connector (by Bubble) to call Worldpay's REST API using HTTP Basic Auth with your Service Key as the username and an empty password, both marked Private. The legacy UK platform uses `api.worldpay.com/v1` for order creation, status lookup, and refunds. Backend Workflows (paid plan required) receive payment notification webhooks.

Prerequisites

  • A Worldpay merchant account with API access. Contact your Worldpay account manager to confirm API access is enabled and to obtain test credentials (T_S_* prefix for legacy UK platform).
  • Confirmation of which Worldpay platform you are on: legacy UK (api.worldpay.com, T_S_* / L_S_* credentials) or FIS platform (access.worldpay.com, different credentials). This tutorial covers the legacy UK platform.
  • Your test Service Key (starts with T_S_) and live Service Key (starts with L_S_) for the legacy UK platform.
  • A Bubble app on a paid plan (Starter or above) if you need to receive Worldpay payment notifications via Backend Workflows.
  • A Bubble database type for Orders with at minimum: order_code (text), amount (number), currency (text), status (text). The order_code must be stored exactly as submitted to Worldpay — case-sensitive.

Step-by-step guide

1

Step 1: Identify Your Worldpay Platform and Gather Credentials

Contact your Worldpay account manager and ask them to confirm: 1. Which API platform your merchant account uses — legacy UK platform (api.worldpay.com) or the Worldpay from FIS platform (access.worldpay.com) 2. Your test Service Key — for the legacy UK platform this starts with `T_S_` (e.g., `T_S_0123456789abcdef0123456789`) 3. Your live Service Key — starts with `L_S_` 4. Any restrictions on which API endpoints your account has access to (Reporting API and Disputes API are enterprise add-ons not included in standard accounts) If your Service Key starts with `T_S_` or `L_S_`, you are confirmed on the legacy UK platform. If your credentials look different, this tutorial may not fully apply — ask your account manager for the correct API documentation for your platform version. Store your test and live Service Keys separately. Do not use the live key during development — even a single accidental test transaction on a live account may result in real charges. Note that unlike Stripe or Braintree, there is no self-serve Worldpay sandbox you can sign up for. You must wait for your account manager to provision test credentials before you can build anything in Bubble.

worldpay_platform_reference.json
1{
2 "legacy_uk_platform": {
3 "test_base_url": "https://api.worldpay.com/v1",
4 "live_base_url": "https://api.worldpay.com/v1",
5 "test_service_key": "T_S_your_test_key_here",
6 "live_service_key": "L_S_your_live_key_here",
7 "auth_pattern": "HTTP Basic Auth — service key as username, empty password"
8 },
9 "fis_platform": {
10 "base_url": "https://access.worldpay.com",
11 "note": "Different credentials and endpoint structure — confirm with your account manager"
12 }
13}

Pro tip: If you are unsure which platform you are on, look at the format of your credentials. T_S_* or L_S_* prefixes confirm you are on the legacy UK platform. Credentials that do not match this pattern indicate the FIS platform, which requires separate documentation.

Expected result: You have confirmed your Worldpay platform, received your T_S_* test Service Key, and identified the API base URL. You are ready to configure Bubble's API Connector.

2

Step 2: Configure the API Connector with Basic Auth

Open your Bubble app. Go to Plugins tab → Add plugins → search 'API Connector' (by Bubble) → Install. Click 'API Connector' in the plugin list. Click 'Add another API'. Name it 'Worldpay Test'. In the base URL field, enter `https://api.worldpay.com/v1`. In the Authentication section, select 'Basic auth'. In the Username field, enter your T_S_* test Service Key. Check the 'Private' checkbox. Leave the Password field completely blank. If Bubble requires a non-empty password value (some versions do), enter a single space — do not enter 'none', 'null', or any placeholder text, as these will be sent as the actual password and cause authentication failures. Add one shared header: `Content-Type: application/json`. Worldpay also supports a `client-key` in the response for hosted payment pages — this is a client-facing value that does not need to be Private, but you will not need it for server-side API calls. Name your API Connector group 'Worldpay Test' (not just 'Worldpay') so that when you create a parallel 'Worldpay Live' group later, the naming prevents accidental cross-environment calls.

worldpay_api_connector_config.json
1{
2 "api_name": "Worldpay Test",
3 "base_url": "https://api.worldpay.com/v1",
4 "authentication": {
5 "type": "basic_auth",
6 "username": "<private: T_S_your_test_service_key>",
7 "password": ""
8 },
9 "shared_headers": {
10 "Content-Type": "application/json"
11 }
12}

Pro tip: In Bubble's Basic Auth configuration, leaving the password field empty is the correct setting for Worldpay. If you see 'authentication failed' errors after this setup, double-check that no placeholder text accidentally ended up in the password field.

Expected result: The 'Worldpay Test' API group in Bubble's API Connector shows Basic Auth configured with a Private username (your T_S_* key) and an empty password field.

3

Step 3: Add and Initialize the Order Status Lookup Call

Start with a GET call for order status lookup — this is a safe read-only operation for initialization. Inside the 'Worldpay Test' API group, click 'Add a call'. Name it 'Get Order'. Set the method to GET and the path to `/orders/<orderCode>`. In Bubble's API Connector, the `<orderCode>` part is a dynamic path parameter — enter it as a parameter name that Bubble will substitute at runtime. You need a known test order code to initialize. If you do not have one, you will need to create a test order first (see Step 4) and use that order code here. You can also ask your Worldpay account manager for a sample test order code to use during initialization. Click 'Initialize call' with a real test order code. The successful response includes fields like `orderCode`, `token`, `amount`, `currencyCode`, `paymentStatus` ('SUCCESS', 'FAILED', 'SENT_FOR_REFUND'), `orderDescription`, and payment method details. WORNING: Worldpay order codes are CASE-SENSITIVE. The initialization will fail if the order code you provide does not match exactly — including letter case — the one stored in Worldpay. Never apply Bubble text transformations like `:lowercase()` or `:trim()` to order codes. Use the value exactly as it was submitted. Set 'Use as' to 'Data'.

worldpay_get_order_response.json
1{
2 "method": "GET",
3 "path": "/orders/<dynamic: orderCode>",
4 "example_response": {
5 "orderCode": "BUBBLE-ORDER-20260115",
6 "token": "TEST_TOKEN_ABC123",
7 "amount": 1999,
8 "currencyCode": "GBP",
9 "paymentStatus": "SUCCESS",
10 "orderDescription": "Pro plan subscription",
11 "paymentResponse": {
12 "type": "ObfuscatedCard",
13 "name": "Worldpay",
14 "cardType": "VISA_CREDIT",
15 "maskedCardNumber": "**** **** **** 1234"
16 }
17 }
18}

Pro tip: If the Initialize call returns a 404, verify the order code is exactly right — Worldpay order codes are case-sensitive and Bubble may have auto-lowercased or trimmed the value. Copy and paste the order code directly from your Worldpay test portal rather than typing it.

Expected result: Bubble shows 'Get Order' with green 'Initialized' status and detected fields including orderCode, amount, currencyCode, and paymentStatus.

4

Step 4: Build the Order Creation Workflow

Add a second call to 'Worldpay Test'. Name it 'Create Order'. Method: POST. Path: `/orders`. In the body section, select JSON and enter the order structure: ```json { "token": "<dynamic: payment_token>", "amount": 1999, "currencyCode": "GBP", "name": "<dynamic: customer_name>", "orderDescription": "<dynamic: order_description>", "orderCode": "<dynamic: order_code>", "billingAddress": { "address1": "<dynamic: address1>", "postalCode": "<dynamic: postal_code>", "city": "<dynamic: city>", "countryCode": "GB" } } ``` For the `amount` field: Worldpay uses minor currency units. £19.99 = 1999 pence. In Bubble's formula editor: `round down(Current product's price * 100)`. The amount must be an integer — never a decimal. For `orderCode`: generate a unique code per order. Use your Bubble database record's unique ID with a prefix: `"WP-" + Current Order's unique id`. Store this exact value in your Bubble Order database record — you will need it for lookups and refunds. NEVER apply `:lowercase()`, `:trim()`, or any other text transformation to the order code at any point in your workflows. For `token`: this is the payment token from Worldpay's hosted payment form (a client-side JS component that tokenizes the card). On a Worldpay hosted page integration, the token comes back as a URL parameter when the user returns from Worldpay's checkout. Store it briefly in a page custom state to use in this create order call. Initialize with test values (a test payment token from Worldpay sandbox, a fixed amount). Set 'Use as' to 'Action'.

worldpay_create_order_body.json
1{
2 "token": "<dynamic: worldpay_payment_token>",
3 "amount": "<dynamic: amount_in_pence>",
4 "currencyCode": "GBP",
5 "name": "<dynamic: customer_full_name>",
6 "orderDescription": "<dynamic: order_description>",
7 "orderCode": "<dynamic: unique_order_code>",
8 "billingAddress": {
9 "address1": "<dynamic: address_line_1>",
10 "postalCode": "<dynamic: postal_code>",
11 "city": "<dynamic: city>",
12 "countryCode": "GB"
13 },
14 "successUrl": "<dynamic: success_redirect_url>",
15 "failureUrl": "<dynamic: failure_redirect_url>",
16 "pendingUrl": "<dynamic: pending_redirect_url>"
17}

Pro tip: Always create a Bubble Order record in the database BEFORE calling the Worldpay 'Create Order' API. Store the generated order code in that record. If the API call fails, you can resume from the stored order code. If you create the order code on-the-fly in the API step, a failure leaves you without a record to track.

Expected result: The 'Create Order' call initializes successfully and returns a Worldpay response including the order code, redirect URL (for hosted checkout), and payment status.

5

Step 5: Build the Refund Workflow

Add a third call to 'Worldpay Test'. Name it 'Refund Order'. Method: POST. Path: `/orders/<dynamic: orderCode>/refund`. In the body section, enter: ```json { "amount": 1999 } ``` Make `amount` a dynamic parameter. On the Bubble page, add a Refund button to each row in your Orders Repeating Group. Set an 'Only when' condition: `Current cell's Order status is 'SUCCESS'` (only settled, successful orders can be refunded). Add a confirmation popup before the refund action: display the order code and amount in GBP (divide Bubble's stored pence amount by 100 for display: `Current cell's Order's amount / 100`). Ask 'Confirm refund of £X.XX?'. The Confirm button triggers: 1. A step calling 'Refund Order' with `orderCode = Current cell's Order's order_code` (passed exactly, no transformations) and `amount = Current cell's Order's amount` (the stored pence value, or a partial refund amount from an input field). 2. A step changing the Bubble Order record's status to 'REFUNDED'. 3. Optionally, a step sending a confirmation email to the customer. Worldpay supports partial refunds (pass an amount less than the original). Store refund amounts in the Bubble database if you allow multiple partial refunds — you need to track how much has already been refunded to prevent over-refunding.

worldpay_refund_order.json
1{
2 "path": "/orders/<dynamic: orderCode>/refund",
3 "method": "POST",
4 "body": {
5 "amount": "<dynamic: refund_amount_in_pence>"
6 }
7}
8
9// Bubble formula for displaying GBP amount from stored pence:
10// Current cell's Order's amount / 100
11// Example: 1999 pence → £19.99
12
13// Bubble formula for partial refund amount conversion:
14// round down(Input Refund Amount's value * 100)
15// Example: user enters 10.00 → 1000 pence

Pro tip: Pass the order code to the refund endpoint EXACTLY as stored in your Bubble database — the same string that was submitted to Worldpay at order creation. Any transformation (trim, lowercase, etc.) will produce a different string and cause a 404 on the refund lookup.

Expected result: The refund workflow successfully calls Worldpay's refund endpoint for a test order, receives a confirmation response, and updates the Order record status in the Bubble database.

6

Step 6: Set Up Payment Notifications and Go Live

Worldpay can send HTTP notification POSTs to your server when payment status changes. For the legacy UK platform, these are JSON payloads — simpler than Adyen's HMAC-verified format or Authorize.Net's form-encoded Silent Post. To set up the Backend Workflow endpoint (requires paid Bubble plan — Starter or above): 1. Go to Settings → API → check 'This app exposes a Workflow API' → Save. 2. In Backend Workflows, create a new workflow named `worldpay_notification`. 3. Check 'Detect request data'. Leave it waiting. 4. In your Worldpay account settings (through your account manager), register your notification URL: `https://yourapp.bubbleapps.io/api/1.1/wf/worldpay_notification`. 5. Trigger a test payment. Worldpay sends a JSON POST with fields including `orderCode`, `paymentStatus`, `amount`, and `currencyCode`. 6. After detection, add workflow steps: find the Bubble Order where `order_code = notification's orderCode`, update its status based on `paymentStatus` ('SUCCESS' → 'paid', 'FAILED' → 'payment_failed'). To go live: 1. In the API Connector, create a new group 'Worldpay Live' with the same `api.worldpay.com/v1` base URL. Change the Basic Auth username to your L_S_* live Service Key (marked Private). Keep the password blank. 2. Point your Bubble workflows to 'Worldpay Live' calls for production. 3. Update the notification URL in your Worldpay account to your production Bubble app URL if different. RapidDev's team has helped UK-based Bubble founders migrate Worldpay-powered payment flows — if you need help mapping Worldpay's notification fields to your Bubble database schema, reach out at rapidevelopers.com/contact.

worldpay_notification_payload.json
1// Worldpay payment notification JSON payload (legacy UK platform)
2{
3 "orderCode": "WP-ORDER-20260115-abc123",
4 "token": "TEST_TOKEN_ABC123",
5 "amount": 1999,
6 "currencyCode": "GBP",
7 "paymentStatus": "SUCCESS",
8 "paymentResponse": {
9 "type": "ObfuscatedCard",
10 "cardType": "VISA_CREDIT",
11 "maskedCardNumber": "**** **** **** 1234"
12 },
13 "environment": "TEST"
14}
15
16// Backend Workflow endpoint:
17// https://yourapp.bubbleapps.io/api/1.1/wf/worldpay_notification
18// (Drop '/initialize' suffix — that is only for Bubble's detection step)

Pro tip: After switching to live credentials, run a real low-value test transaction (e.g., £1.00) to verify the end-to-end flow. Immediately refund it. Confirm the live notification reaches your Backend Workflow and updates the Bubble Order record correctly before processing real customer payments.

Expected result: Your Bubble app creates Worldpay orders, receives payment notifications via Backend Workflow, and processes refunds. Live L_S_* credentials are active and processing real payments.

Common use cases

Order Payment and Status Tracking

Bubble apps that process payments through Worldpay can use the API Connector to create orders, then poll or receive notifications to update order status. Use `POST /orders` to create a payment order and `GET /orders/{orderCode}` to check the current status from a Bubble workflow.

Bubble Prompt

Build a Bubble workflow that creates a Worldpay order with the customer's amount in pence, a unique order code based on the Bubble record ID, and a success/failure redirect URL. Store the Worldpay order code in the Bubble database and display a redirect to Worldpay's hosted payment page.

Copy this prompt to try it in Bubble

Refund Processing Dashboard

Allow authorized Bubble users to issue partial or full refunds on settled Worldpay orders. The refund workflow looks up the original order code from the Bubble database, converts the refund amount to pence, and calls `POST /orders/{orderCode}/refund`. Display refund status and confirmation in the Bubble UI.

Bubble Prompt

Build a Bubble admin page with a Repeating Group of Worldpay orders. When an admin clicks Refund on a row, show a confirmation popup with the refund amount in GBP, then trigger a workflow that calls POST /orders/{orderCode}/refund with the amount in pence and updates the order status in the Bubble database.

Copy this prompt to try it in Bubble

Payment Notification Processing

Use a Bubble Backend Workflow (paid plan) to receive Worldpay payment notification webhooks. When Worldpay posts a payment outcome (successful, failed, cancelled), the workflow updates the corresponding order record in the Bubble database and triggers downstream actions like order fulfillment emails.

Bubble Prompt

Set up a Bubble Backend Workflow endpoint that receives Worldpay payment notifications. When the orderStatus field is 'SUCCESS', find the matching order by orderCode and update its status to 'paid'. When 'FAILED', update to 'payment_failed' and send an alert email to the customer.

Copy this prompt to try it in Bubble

Troubleshooting

All API calls return 401 Unauthorized after credentials look correct

Cause: The most common cause is a credential/environment mismatch: test credentials (T_S_*) used against the live URL or live credentials (L_S_*) used against the test URL. Both look like credential errors because Worldpay returns 401 for environment mismatches too. Alternatively, a placeholder password value (like 'none' or 'empty') was accidentally entered in the Basic Auth password field.

Solution: Open Plugins → API Connector → your Worldpay group. Verify the Authentication section shows your Service Key in the Username field (with the Private checkbox checked) and an empty (or single-space) password. Also confirm the base URL environment matches your credential type: T_S_* = test URL, L_S_* = live URL. The base URL for both legacy UK environments is `https://api.worldpay.com/v1`.

Order lookup returns 404 Not Found even though the order was just created successfully

Cause: Worldpay order codes are case-sensitive. If any Bubble formula, workflow step, or text transformation changed the case of the order code between creation and lookup, Worldpay cannot find the order. Common culprits: `:lowercase()` applied to the code, Bubble's autocorrect in an input field, or a database field with a 'text to lower' constraint.

Solution: Check every workflow step that handles the order code string. Remove any `:lowercase()`, `:uppercase()`, `:trim()`, or other transformations. In the Bubble database, verify the order_code field was saved exactly as submitted to Worldpay. If you use an input element to display or re-enter order codes, disable autocorrect on that input.

Refund fails with 'Order not eligible for refund' or similar error

Cause: The order has not yet settled (paymentStatus is still SENT_FOR_AUTHORISATION or AUTHORISED, not SUCCESS), or the order has already been fully refunded. Worldpay only allows refunds on orders in SUCCESS or SENT_FOR_REFUND (partial) status.

Solution: Add an 'Only when' condition on the Bubble refund button: `Current cell's Order's status is 'SUCCESS'`. Update order status via Worldpay notification webhook or by polling `GET /orders/{orderCode}` after payment. Display the refund status restriction in your admin UI so operators understand why the button may be disabled on certain orders.

Backend Workflow does not receive Worldpay notifications even after registering the endpoint

Cause: The Bubble app may be on the Free plan (Backend Workflows require paid plans), the Workflow API may not be enabled in Settings, the registered URL may include '/initialize', or Worldpay's notification system may need to be activated by your account manager separately from basic API access.

Solution: Go to Settings → API and confirm 'This app exposes a Workflow API' is checked and your plan is Starter+. Confirm the registered URL does not have '/initialize' appended. Contact your Worldpay account manager to confirm that payment notifications are enabled for your merchant account and that the notification URL has been registered in the correct portal section.

API Connector Initialize call returns 'There was an issue setting up your call'

Cause: The Initialize call needs a real, successful Worldpay API response to detect the schema. If the test order code does not exist, or the credentials are wrong, or the base URL is incorrect, the initialize will fail with this generic error.

Solution: Open Bubble's Logs tab immediately after the failed initialize to see the raw HTTP status code from Worldpay (401 = auth issue, 404 = order not found). Fix the specific underlying issue before retrying initialization. For the Get Order call, use a test order code obtained directly from the Worldpay test portal or your account manager — do not guess or generate an order code for initialization.

Best practices

  • Identify your Worldpay platform (legacy UK vs FIS) BEFORE building anything in Bubble. Platform identification is step zero — the API endpoints, credential formats, and response schemas differ significantly between platforms.
  • Never apply text transformations (lowercase, trim, uppercase) to Worldpay order codes. Store and pass them exactly as generated and submitted. A case mismatch causes 404 errors on all lookup and refund operations.
  • Store amounts in pence in your Bubble database (not GBP decimals). Use `round down(price_in_GBP * 100)` to convert for API calls. Display to users by dividing stored pence by 100. This avoids floating-point conversion errors.
  • Create separate API Connector groups for test ('Worldpay Test') and live ('Worldpay Live') with their respective Service Keys. Never mix T_S_* and L_S_* credentials in the same API group.
  • Set Bubble Data tab → Privacy rules for your Orders type. Without privacy rules, all orders (including amounts, statuses, and partial card details) are readable by all authenticated users — a significant security concern for payment data.
  • Monitor Workload Unit (WU) consumption in Bubble's Logs tab. Polling `GET /orders/{orderCode}` on a schedule to check payment status consumes WU on every call. Use Worldpay's payment notification webhooks (Backend Workflows, paid plan) instead of polling wherever possible.
  • Note that Worldpay's Reporting API and Disputes API are enterprise add-on products not accessible with a standard merchant API key. Do not build Bubble workflows against these endpoints without confirming your account has access — they will always return 401 or 403 with a standard key.
  • For Bubble apps that process refunds, implement a refund ledger in your database — track each partial refund amount and date against the original order. This prevents double-refunds if a workflow is accidentally triggered twice, and is required for accurate financial reconciliation.

Alternatives

Frequently asked questions

How do I know if I'm on the legacy Worldpay UK platform or the FIS platform?

Look at the format of your credentials. Legacy UK platform test credentials start with `T_S_` and live credentials with `L_S_` (for example, `T_S_0123456789abcdef`). If your credentials do not have these prefixes, you are likely on the FIS platform (access.worldpay.com), which has different endpoints and a different integration pattern. Ask your Worldpay account manager to confirm.

Why is the password field empty in Worldpay's Basic Auth — isn't that a security concern?

No — Worldpay's legacy UK platform uses the Service Key itself as the authentication credential. The Basic Auth 'username' field carries the Service Key; the 'password' field is intentionally left blank. This is Worldpay's API design, not a Bubble limitation. The security comes from the Service Key value being secret (marked Private in Bubble's API Connector) and transmitted over HTTPS.

What is the API Connector Initialize call and why does it say 'There was an issue setting up your call'?

Bubble's Initialize call sends a real HTTP request to the API to detect the response structure (field names and types). If the API returns an error (401, 404, etc.), Bubble cannot detect the schema and shows this message. To fix it, check the Logs tab for the HTTP status code from Worldpay, resolve the underlying issue (usually wrong credentials or wrong order code for a GET call), then click Initialize again.

Can I use Worldpay with a Free Bubble plan?

You can use the API Connector calls (create orders, look up status, process refunds) on the Free plan. However, receiving Worldpay payment notifications server-side requires Backend Workflows, which are only available on paid Bubble plans (Starter+). On the Free plan, you would need to check order status by calling `GET /orders/{orderCode}` on your returnUrl page.

Why does my order lookup return 404 when I just created the order?

Worldpay order codes are case-sensitive. If any part of your Bubble workflow transformed the order code — applied `:lowercase()`, trimmed whitespace, or passed it through an input that auto-corrected the case — the lookup string will not match what Worldpay stored. Use the order code value exactly as submitted. Store it in your Bubble database directly from the creation workflow result without any text transformations.

Does the Worldpay Reporting API work with a standard merchant account API key?

No. The Worldpay Reporting API and Disputes API are separate enterprise products with different access requirements from the standard Payments API. Calling them with a standard Service Key returns 401 or 403 errors. If you need reporting or dispute management functionality in Bubble, contact your Worldpay account manager to discuss whether these add-ons are available on your merchant tier.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Bubble integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.