Create a link. Get paid. Move on.
This page is a walkthrough of how ShapLink is intended to work. It covers the merchant and customer journeys, planned rails, and draft API and webhook shapes.
- • Full merchant and customer journey storyboard
- • One webhook and CSV export concept
- • Rails roadmap Ozow, SnapScan, PayShap

End to end journeys
- 1) Create a payment link with amount and reference
- 2) Share it WhatsApp SMS email
- 3) Status moves to paid
- 4) Receive one payment.paid webhook
- 5) Export CSV for finance
- 6) Optional send receipt mark fulfilled or refund
- 1) Tap link then clean ShapLink pay page
- 2) Continue to provider bank or PSP page
- 3) Login OTP approve payment
- 4) Redirect back to success page and receipt
- 5) Optional email themselves the receipt
How it would work
- 1) Create a link via API or dashboard concept
- 2) Share the link with your customer
- 3) Customer pays on the provider page
- 4) We update the link status to paid
- 5) You get one normalized webhook and CSV
- 6) After payment send receipt fulfill refund
Security: planned HMAC signed webhooks X-Shap-Signature
.
Observability: idempotency keys request IDs and simple latency charts.
# Concept API sketch not live
curl -X POST https://api.shap.link/v1/links \
-H 'Authorization: Bearer sk_test_***' \
-H 'Content-Type: application/json' \
-d '{
"amount": 199.00,
"currency": "ZAR",
"description": "Order #A452",
"rails": ["ozow"],
"customer": {"email": "lee@example.com"},
"metadata": {"orderId": "A452"}
}'
// Concept API sketch not live
const res = await fetch("https://api.shap.link/v1/links", {
method: "POST",
headers: {
"Authorization": "Bearer sk_test_***",
"Content-Type": "application/json"
},
body: JSON.stringify({
amount: 199.00,
currency: "ZAR",
description: "Order #A452",
rails: ["ozow"],
customer: { email: "lee@example.com" },
metadata: { orderId: "A452" }
})
});
const link = await res.json();
console.log(link);
// Concept webhook sketch not live
{
"type": "payment.paid",
"linkId": "lnk_01HXY…",
"status": "paid",
"amount": 199.00,
"currency": "ZAR",
"rail": "ozow",
"reference": "Order #A452",
"metadata": { "orderId": "A452" },
"occurredAt": "2025-09-12T14:22:31Z"
}
// Signature header (concept): X-Shap-Signature: t=..., v1=HMAC_SHA256(payload, webhook_secret)
Designed for both journeys
One URL for your buyer. More rails planned.
One normalized event shape for status updates.
Live updates in the dashboard view planned.
Send receipts mark fulfilled issue refunds.
CSV with amounts and rail references.
Signed webhooks and short lived admin token planned.
Get involved
We are exploring a pilot. If this solves your problem reach out and we will share the concept deck and timelines.
Planned rails
These are planned integrations.
Rail | Link create | Refunds | Status events | Settlement refs |
---|---|---|---|---|
Ozow | Planned | Future | Planned | Planned |
SnapScan | Future | Future | Future | Future |
PayShap | Future | Future | Future | Future |
Yoco | Future | Future | Future | Future |
PayFast | Future | Future | Future | Future |
Security and compliance planned
- • POPIA data minimisation and clear retention windows
- • No card PAN handled. We store tokens and provider references only
- • Encryption at rest and in transit. HMAC signed webhooks
Notes
- 2025 08 29 Concept walkthrough page
- 2025 08 20 PayShap adapter research
- 2025 08 12 Normalised webhook schema v0.1 draft
Roadmap tentative
- Validate demand with design partners
- Prototype with one rail then expand
- Smart routing and basic settlement forecasts
Walk the concept in five minutes
Open the local demo to see the storyboard then scroll the journeys.