Integration docs

Pay with Quarvo.

Two endpoints. Stripe Connect handles the money. Drop-in snippets for Shopify, WooCommerce, and any custom checkout. You're live in 5 minutes.

API v1 · live REST · JSON Stripe Connect

01Quickstart

Quarvo is a thin layer on top of Stripe Connect. You create a checkout session, redirect your customer to the Quarvo-hosted split UI, and Stripe Connect deposits a single payment into your account when they're done. Three steps.

01

Connect Stripe

OAuth into your existing Stripe account from /for-merchants. Quarvo is a Connect Platform — we never hold funds.

02

Create a session

From your server, POST /api/checkout/session with the cart total + return URL. Get back a session_id.

03

Redirect

Send the customer to app.quarvo.io/checkout/[session_id]. We handle the split. Stripe deposits the total to your account.

02Authentication

Once your Stripe Connect OAuth completes, Quarvo issues a publishable key (used in client-side snippets) and a secret key (used server-side for session creation). Find both in your dashboard at app.quarvo.io/dashboard/keys.

All API requests require a Bearer token in the Authorization header. Never ship the secret key to the browser.

# Test key (sk_test_...) -- use in development
Authorization: Bearer sk_test_4ec1...d8a3

# Live key (sk_live_...) -- use in production
Authorization: Bearer sk_live_9f02...c5e7

03Create a checkout session

From your server, before sending the customer to Quarvo, create a session that captures the cart total and your return URL. The response includes a session_id and a hosted url.

POST https://app.quarvo.io/api/checkout/session

Request body

{
  "amount": 348000,                // integer cents (USD)
  "currency": "usd",
  "customer_email": "jane@example.com",
  "order_id": "ORD-9931",           // your internal id
  "return_url": "https://shop.example.com/orders/9931/thank-you",
  "cancel_url": "https://shop.example.com/cart",
  "metadata": { "sku": "FLT-NYC-MAD" }
}

Response (200)

{
  "id": "qcs_2N4KLd9Pf3rTWqXz",
  "url": "https://app.quarvo.io/checkout/qcs_2N4KLd9Pf3rTWqXz",
  "amount": 348000,
  "currency": "usd",
  "status": "created",
  "expires_at": 1735689600
}

04Redirect the customer

When the customer clicks “Pay with Quarvo” on your checkout, redirect them to the URL returned by step 3. They authorize each card via Plaid, the split runs, and Stripe Connect routes the total to your account.

GET https://app.quarvo.io/checkout/{session_id}

No auth required — the session_id itself is the bearer. After completion, Quarvo redirects to your return_url with ?qcs=qcs_...&status=succeeded.

Webhook (recommended)

Subscribe to checkout.session.completed from your Quarvo dashboard. Webhook payload mirrors Stripe's PaymentIntent format with an extra quarvo object containing per-card breakdown.

05Drop-in snippets

Pick your stack. Each snippet creates a session server-side and renders the Quarvo button on your checkout.

Shopify (Liquid + App Proxy)

The Quarvo Shopify app installs an App Proxy at /apps/quarvo. Drop this Liquid snippet into checkout.liquid (or use the Theme App Extension):

<script src="https://app.quarvo.io/v1/quarvo.js"></script>

<div id="quarvo-button" />

<script>
  Quarvo.init({
    publishableKey: "{{ settings.quarvo_pk }}",
    amount: {{ checkout.total_price }},
    currency: "{{ checkout.currency | downcase }}",
    orderId: "{{ checkout.order_id }}",
    returnUrl: "{{ checkout.thank_you_url }}"
  }).mount("#quarvo-button");
</script>

WooCommerce (PHP gateway)

Install the Quarvo WooCommerce plugin from the WP plugin directory. To register Quarvo as a gateway and create a session on order submission:

// In your theme's functions.php (or the Quarvo plugin handles this for you)
add_action('woocommerce_checkout_order_processed', function($order_id) {
  $order = wc_get_order($order_id);

  $session = wp_remote_post('https://app.quarvo.io/api/checkout/session', [
    'headers' => [
      'Authorization' => 'Bearer ' . QUARVO_SECRET_KEY,
      'Content-Type'  => 'application/json',
    ],
    'body' => wp_json_encode([
      'amount'     => (int) ($order->get_total() * 100),
      'currency'   => strtolower($order->get_currency()),
      'order_id'   => (string) $order_id,
      'return_url' => $order->get_checkout_order_received_url(),
    ]),
  ]);

  $body = json_decode(wp_remote_retrieve_body($session));
  wp_redirect($body->url); exit;
});

curl

Verify your secret key is working from the terminal:

curl -X POST https://app.quarvo.io/api/checkout/session \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 348000,
    "currency": "usd",
    "order_id": "ORD-9931",
    "return_url": "https://shop.example.com/thank-you"
  }'

Node.js (Express)

import express from 'express';
const app = express();
const SECRET = process['env'].QUARVO_SECRET; // load from your config

app.post('/api/quarvo-session', async (req, res) => {
  const r = await fetch('https://app.quarvo.io/api/checkout/session', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${SECRET}`,
      'Content-Type':  'application/json',
    },
    body: JSON.stringify({
      amount:     req.body.amount,
      currency:   'usd',
      order_id:   req.body.orderId,
      return_url: `https://shop.example.com/orders/${req.body.orderId}/thank-you`,
    }),
  });
  const session = await r.json();
  res.json({ redirectUrl: session.url });
});

06Brand kit

Use the Quarvo button at checkout. Don't restyle the gradient or the rounded corners. The button is the trust mark customers will recognize across merchants.

Reference button

Colors

#7B2FFF
#00F5FF
#06060A
Naming

Always “Quarvo” (capital Q, lowercase rest). The product is “Pay with Quarvo”. The technology is QuantumSplit™. The company is QUARVO LLC.

Don't

Don't translate the wordmark. Don't recolor the gradient. Don't combine with other payment logos in a single button. Don't shrink below 16px height.

Ready to integrate?

Connect your Stripe account and we'll issue your test keys instantly.

Connect your store — Free