Skip to main content
Blog
Alan LeeSoftware Engineer & Developer Advocate, J.P. Morgan Payments
SHARE
    engineering

    Accepting payments from anywhere - Part 2

    10 April 2026

    How Fair Aisle Fitness manages inbound transactions across currencies and channels using the Checkout API and Drop-in UI

    In Part 1, we introduced a fictional, subscription-based fitness business called Fair Aisle Fitness. This hypothetical brand scaled its e-commerce platform across multiple markets using J.P. Morgan’s Checkout API and Drop-in UI.

    This post explores how the company could manage inbound customer payments across cards, wallets, and local methods. Read on for how our Online Payment capabilities can securely and efficiently accept payments, help improve approval rates, and glean insight into transaction health.

    From click to capture: building a global payment flow

    As Fair Aisle Fitness expanded internationally, its engineering team needed to solve a complex but common challenge: make it easy for customers to complete a purchase using their preferred payment method. They also needed to maintain control over authorization, fraud, and settlement.

    A typical inbound payment flow includes:

    1. Creating a checkout session with currency, order reference, and authorization settings
    2. Presenting payment methods based on customer location and eligibility
    3. Submitting the authorization request, either for immediate capture or deferred processing
    4. Receiving the transaction result, including success, decline, or action required
    5. Handling asynchronous updates via webhook notifications for settlement, errors, or fraud events

    This flow is supported through a combination of API requests, Drop-in UI integration, and real-time webhook events.

    Presenting the right payment methods

    Fair Aisle Fitness must then define which payment methods to offer based on market, currency, and transaction context. They could do this by configuring Checkout Settings in the Commerce Center, which includes the following supported methods:

    • Local payment options like iDEAL, PayNow, and Sofort
    • Global card networks such as Visa and Mastercard
    • Digital wallets including Apple Pay and Google Pay

    These settings are customized to each checkout session, so customers only see their relevant and supported options.

    Creating and authorizing a payment

    When a customer initiates a checkout, Fair Aisle’s backend submits the payment by calling the Checkout API to create the checkoutSessionToken:

    Developer Note: Idempotency and Traceability

    Every payment request should include:

    • A unique requestId, used for deduplication and retry handling
    • A merchantOrderNumber, used to correlate transactions across systems

    These fields are echoed back in all responses and webhook payloads, allowing end-to-end traceability across order processing, payment capture, and settlement.

    POST /checkout/intent 
    Authorization: Bearer {accessToken} 
    merchantId: FairAisleMerchant123 
    requestId: 202507301013-fif-order001 

    Sample request body:

    {
      "currencyCode": "USD",
      "merchantOrderNumber": "FI-ORD12345",
      "checkoutOptions": {
        "authorization": {
          "authorizationType": "AUTH_METHOD_CART_AMOUNT"
        },
        "capture": {
          "captureMethod": "CAPTURE_METHOD_NOW"
        }
      },
      "cart": {
        "totalTransactionAmount": 9999
      }
    }

    Sample response:

    {
      "checkoutSessionToken": "checkout-token-xyz"
    }

    Rendering the checkout experience

    Once the checkoutSessionToken is created, the frontend mounts the Drop-in UI and passes in the returned session token:

    const myDropIn = new DropInUI({
      checkoutSessionToken: "checkout-token-xyz",
    });
    myDropIn.mount("checkout-container");
    myDropIn.subscribe((event) => {
      if (event.namespace ===a "payment" && event.level === "info") {
        if (event.message === "PaymentSuccess") {
          handleSuccess(event);
        }
        if (event.message === "PaymentUnsuccessful") {
          handleFailure(event);
        }
      }
      if (event.namespace === "payment" && event.level === "error") {
        handleFailure(event);
      }
    });

    The Drop-in UI manages method selection, validation, and secure data transmission. Upon submission, the result is published to the subscriber function.

    Example notification payload: payment approved

    Once a payment is successfully authorized, your system can retrieve the corresponding notification by polling the Notifications API:

    {
      "eventType": "PaymentApproved",
      "transactionId": "txn_abc123",
      "merchantOrderNumber": "FI-ORD12345",
      "authorizationAmount": 9999,
      "currencyCode": "USD",
      "paymentMethod": "Visa"
    }

    Notifications must be retrieved and acknowledged explicitly. Developers can query for a range of event types, such as PaymentDeclined, PaymentErrored, or PaymentVoid.

    Improving approval rates

    Fair Aisle Fitness maximizes its approval performance through several key practices:

    • Ensuring complete and consistent metadata on each request
    • Tokenizing payment credentials for returning users and subscriptions
    • Configuring region-specific retry logic to minimize false declines
    • Using real-time feedback to adapt transaction strategies

    Our processing engine also improves results across networks by applying intelligent routing and fraud checks.

    Observability and error handling

    Developers can receive real-time notifications and query the status of any transaction using the Payments API or dashboards. The API provides structured error codes for failed transactions, allowing systems to respond intelligently.

    For example:

    • A 402 response may indicate insufficient funds
    • A 409 may signal a duplicate requestId
    • A 403 might reflect a blocked payment method or fraud detection

    These codes help developers understand, improve retry logic, reduce abandonment and preserve the user experience.

    Summary

    If organizations want to accept global inbound payments, they need to do more than collect a card number. A business like Fair Aisle Fitness must support local preferences, maintain authorization performance, and gain insight into every step of the transaction lifecycle.

    Our Online Payments platform supports this with:

    • APIs for checkout, authorization, and capture
    • A robust notifications model for operational visibility
    • Dynamic method configuration using Commerce Center
    • Fraud mitigation and retry logic to protect revenue

    Learn more

    To explore the APIs and concepts covered in this article, start here:

    The company “Fair Aisle Fitness” and the scenario described are entirely fictional and provided for illustrative purposes only. Any resemblance to actual persons, companies, or events is purely coincidental.   The outcomes depicted are hypothetical and do not guarantee or predict future results.  Actual outcomes may vary. 

    Disclaimer

    © 2026 JPMorgan Chase & Co. All rights reserved. JPMorgan Chase Bank, N.A. Member FDIC. Deposits held in non-U.S. branches are not FDIC insured. Non-deposit products are not FDIC insured. The statements herein are confidential and proprietary and not intended to be legally binding. Not all products and services are available in all geographical areas. Visit jpmorgan.com/paymentsdisclosure for further disclosures and disclaimers related to this content.

    Updated: 10 April 2026