Stripe
Reconcile Stripe charges, subscriptions, and refunds into Zivvy /v1/payment-entries.
The snag
Finance teams manually match Stripe payouts against sales invoices, and refunds go unrecorded until month-end.
How Zivvy helps
Forward the charge.succeeded, charge.refunded, and payout.paid Stripe webhooks into /v1/payment-entries; Zivvy auto-links to the referenced /v1/sales-invoices.
Before Zivvy
Handoffs go missing, owners are unclear, audits get painful.
What you get
- Auto-create /v1/payment-entries from charge.succeeded
- Match Stripe fee + net payout to your bank account ledger
- Refund events reverse the payment entry with full audit trail
Workflow stream
Common uses
01
Stripe charge.succeeded → /v1/payment-entries against a Sales Invoice
02
Stripe payout.paid → bank reconciliation line in Zivvy
03
Stripe charge.refunded → reverse the payment entry automatically
Integration code
Open API referenceRecord Stripe charge
curl -X POST https://integrate.zivvy.xyz/v1/payment-entries \
-H "Authorization: Bearer $ZIVVY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"payment_type": "Receive",
"party_type": "Customer",
"party": "Acme Corp",
"paid_amount": 1200.00,
"reference_no": "ch_3PabcDeXYZ",
"reference_date": "2026-07-25",
"references": [
{ "reference_doctype": "Sales Invoice",
"reference_name": "SAL-INV-2026-0042",
"allocated_amount": 1200.00 }
]
}'Stripe webhook handler
import Stripe from "stripe";
import { zivvy } from "./zivvy-client";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
export async function POST(req) {
const raw = await req.text();
const event = stripe.webhooks.constructEvent(
raw,
req.headers.get("stripe-signature"),
process.env.STRIPE_WEBHOOK_SECRET
);
if (event.type === "charge.succeeded") {
const c = event.data.object;
await zivvy.paymentEntries.create({
payment_type: "Receive",
party_type: "Customer",
party: c.metadata.zivvy_customer,
paid_amount: c.amount / 100,
reference_no: c.id,
references: [{
reference_doctype: "Sales Invoice",
reference_name: c.metadata.zivvy_invoice,
allocated_amount: c.amount / 100
}]
});
}
return new Response("ok");
}API endpoints
Events emitted
HMAC-SHA256 signed webhooks, retried for 24 hours.
- payment-entries.created
- payment-entries.paid
- payment-entries.reversed
0
free seats forever
0
card required to start
1
workspace for the workflow
Questions
Ready to try it?
Free plan. Two seats. No card.