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.
Connect Stripe
OAuth into your existing Stripe account from /for-merchants. Quarvo is a Connect Platform — we never hold funds.
Create a session
From your server, POST /api/checkout/session with the cart total + return URL. Get back a session_id.
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.
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.
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
Always “Quarvo” (capital Q, lowercase rest). The product is “Pay with Quarvo”. The technology is QuantumSplit™. The company is QUARVO LLC.
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.