---
title: "Build your own Jovvie Checkout integration"
description: "How developers and agencies can add Jovvie in-person card payments to any app, website, or platform with the Jovvie PHP SDKs."
url: https://docs.jovvie.com/developers/
section: "Developers"
last_updated: 2026-10-27
---

# Build your own Jovvie Checkout integration

Section: Developers

> How developers and agencies can add Jovvie in-person card payments to any app, website, or platform with the Jovvie PHP SDKs.

Jovvie Checkout adds in-person card payments to any app, website, or platform. If your platform does not have a ready-made Jovvie integration, you can build your own with the Jovvie PHP SDKs. This section is for developers and agencies doing that work for a merchant.

Anyone can build an integration. The ready-made integrations for WooCommerce, GiveWP, Gravity Forms, and Event Tickets work the same way as the one you will build.

## What you can build

Your integration runs on your server and lets the merchant’s staff take a card payment on a card reader from inside your app. For example, you can add in-person payments to:

- A booking or appointment system
- A membership, class, or club platform
- An event check-in or ticketing app
- A custom online store that also sells in person

With the SDKs, your integration can:

- Create one-time payments and send staff to the [Jovvie payment page](https://docs.jovvie.com/start-here/glossary/#jovvie-payment-page) to take them.
- Create recurring payments (Stripe only).
- Give staff access to the merchant’s card readers (Stripe only).
- Send a payment straight to a registered NMI terminal (NMI only).
- Check a payment’s status and receive [webhooks](https://docs.jovvie.com/start-here/glossary/#webhook) when it changes.

Refunds are not available in the SDKs yet. SDK support for refunds is planned. Merchants refund in their Stripe Dashboard or in the NMI portal. See [Refunds](https://docs.jovvie.com/developers/refunds/).

## How a payment works

A typical payment goes like this:

1. A staff member starts a checkout in your app.
2. Your server creates a payment with the SDK. You give the amount, currency, description, and the addresses to send the browser back to afterward. Jovvie returns the payment with its ID and a checkout link.
3. Your server saves the payment ID with your order.
4. Your app sends the staff member’s browser to the checkout link. This opens the Jovvie payment page.
5. On the payment page, staff choose a card reader. The customer taps, inserts, or swipes their card on the reader.
6. After checkout, the payment page sends the browser to your return URL. If staff click **← Back** while the payment is still `pending`, Jovvie marks it `cancelled`. **← Back** then goes to your cancel URL when the payment is `cancelled`, and to your return URL for any other status. Closing the browser tab does not redirect the browser.
7. Your server confirms the result. It fetches the payment with the SDK and checks its status, and it listens for webhooks about later changes.
8. Your app marks the order as paid.

For what staff see in step 5, see [Take a payment on the Jovvie payment page](https://docs.jovvie.com/checkout/jovvie-payment-page/).

> **Caution: Never trust the return URL alone**
>
> Anyone can open your return URL in a browser. Before you mark an order as paid, fetch the payment with the SDK on your server and check its status, or wait for a verified webhook. See [Check a payment’s status](https://docs.jovvie.com/developers/check-payment-status/) and [Handle webhooks](https://docs.jovvie.com/developers/webhooks/).

## Who can use the card readers

The payment page only lists the merchant’s card readers on a device that is allowed to use them. With the Stripe SDK, your server can create an authorization link that unlocks the readers in a staff member’s browser. Only give these links to the merchant’s staff, never to customers or anonymous visitors. See [Unlock card readers for staff](https://docs.jovvie.com/developers/unlock-card-readers/).

## Stripe or NMI

Jovvie has one SDK for each payment processor. Use the one that matches the merchant’s account. The ready-made Checkout plugins are Stripe only, but your own integration can use either processor.

|                                | Stripe                                | NMI                                                 |
| ------------------------------ | ------------------------------------- | --------------------------------------------------- |
| Composer package               | `bizswoop/jovvie-payments`            | `bizswoop/jovvie-payments-gateway`                  |
| Client class                   | `JovviePayments\JovviePaymentsClient` | `JovviePaymentsGateway\JovviePaymentsGatewayClient` |
| Platform provider ID           | Required                              | Not used                                            |
| Test mode                      | Yes                                   | No. Every payment is real                           |
| One-time payments              | Yes                                   | Yes                                                 |
| Recurring payments             | Yes                                   | No                                                  |
| Authorization links for staff  | Yes                                   | No                                                  |
| Register and list terminals    | No                                    | Yes                                                 |
| Webhook event names start with | `jovvie.`                             | `jovvie-gateway.`                                   |
| Refunds                        | In the Stripe Dashboard               | In the NMI portal                                   |

For the merchant-facing differences, see [Stripe and NMI: what’s different](https://docs.jovvie.com/payments/stripe-vs-nmi/).

## What you need

- A platform provider ID from Jovvie support (Stripe SDK only). Your integration must pass it explicitly. Without the right ID, an integration can work in test mode and fail in live mode.
- A merchant account with Stripe or NMI connected.
- A server application in the merchant’s Payments Dashboard, with its public key, secret key, and webhook key.
- A server that runs PHP 7.4 or later with Composer.
- An HTTPS address on your server to receive webhooks.

[Get started](https://docs.jovvie.com/developers/get-started/) walks you through each of these.

## Pages in this section

1. [Get started](https://docs.jovvie.com/developers/get-started/)
2. [Install the SDK](https://docs.jovvie.com/developers/install-the-sdk/)
3. [Create a payment (Stripe)](https://docs.jovvie.com/developers/create-a-payment/)
4. [Unlock card readers for staff](https://docs.jovvie.com/developers/unlock-card-readers/)
5. [Take payments with NMI](https://docs.jovvie.com/developers/nmi-payments/)
6. [Handle webhooks](https://docs.jovvie.com/developers/webhooks/)
7. [Check a payment’s status](https://docs.jovvie.com/developers/check-payment-status/)
8. [Recurring payments](https://docs.jovvie.com/developers/subscriptions/)
9. [Refunds](https://docs.jovvie.com/developers/refunds/)
10. [Test your integration](https://docs.jovvie.com/developers/test-mode/)
11. [Handle errors](https://docs.jovvie.com/developers/errors/)

## Need help?

To get a platform provider ID or ask about your integration, contact [Jovvie support](https://jovvie.com/support/).
