User flows
How Klaro actually works.
Every money flow is a state machine. These are the canonical journeys with their states, on-screen timelines, and stuck-state handling. Sourced from Klaro_Final_Testnet_Complete_Full_Flow_Design_v2.md.
- live testnet§11
Invoice creation
Vendor drafts an invoice, picks settlement assets, and shares a hosted link. Buyer acceptance hash is prepared at creation time so the receipt can later prove both sides.
RolesVendorStatesDraftOpenPaymentStartedPartiallyFundedFundedScreeningHeldReleasedSettledRefundedExpiredDisputedCancelledRejectedVoidedOn-screen timeline- Created
- Shared
- Viewed
- Payment started
- Paid
- Screening
- Released
- Receipt ready
Stuck-state handling- Invoice open, not viewed
- Send first reminder via copy-link / WhatsApp / email.
- Viewed, not paid
- Send payment nudge with hosted link.
- Invoice expired
- Suggest creating a fresh invoice.
- live testnet§12
Customer invoice payment
Customer opens the hosted invoice, reviews who is asking for money, accepts the invoice in plain language (EIP-712 for wallets, magic-link for email payers), and pays in USDC on Arc or any supported chain.
RolesBuyerVendorStatesReviewingAcceptedPayingPartiallyFundedFundedSettledRefundedOn-screen timeline- Preparing payment
- Waiting for wallet
- Moving funds
- Confirming on Arc
- Payment received
- Receipt ready
Stuck-state handling- Wrong chain
- Switch chain or use cross-chain payment route.
- Insufficient gas
- Explain Arc uses USDC for gas and show how to fund.
- Underpaid
- Show remaining amount and pay-remainder action.
- Overpaid
- Auto-refund excess; admin only if auto-refund fails.
- simulated§13
Cross-chain receive
Customer has USDC on another chain. App Kit unified balance or CCTP V2 route the funds to Arc without making the buyer learn bridge mechanics.
RolesBuyerStatesInitiatedRoutedSettledFailedOn-screen timeline- Detect source chain & balance
- Pick unified balance or CCTP
- Customer confirms
- USDC made spendable on Arc
- Escrow Funded
- simulated§20·§21
Cashout quote → order
Vendor opens Partner Cashout, picks INR, sees a 60–120s rate quote (rate · LP spread · Klaro fee · expiry), then locks the order. LP fills off-platform and submits proof.
RolesVendorLPStatesRequestedQuotedLockedLPAssignedPayoutSentProofSubmittedVerifyingWaitingVendorConfirmationReleasedRefundedDisputedExpiredCancelledOn-screen timeline- Quote created
- USDC locked
- LP assigned
- Payout sent
- Proof submitted
- Vendor confirms / proof verified
- USDC released to LP
Stuck-state handling- No LP assigned
- Show "Looking for LP"; let vendor cancel before lock.
- LP late on proof
- Surface support case with SLA and case ID.
- Proof rejected
- LP resubmits; vendor sees state change.
- Amount / name mismatch
- Freeze and escalate to admin/risk review.
- simulated§25
Cashout dispute
Either party opens a dispute from a fixed reason list. The order freezes, USDC stays in escrow, and an admin case opens with a deadline and an evidence checklist.
RolesVendorLPOperatorStatesOpenedEvidenceRequestedEvidenceSubmittedUnderReviewDecidedReleasedRefundedSlashedOn-screen timeline- Opened with reason code
- Evidence requested
- Evidence submitted
- Under admin review
- Decision made
- Funds released / refunded / slashed
Stuck-state handling- Awaiting evidence
- Show deadline countdown + missing-evidence checklist.
- Admin review delayed
- Surface SLA and case ID; both sides notified.
- live testnet§14·§15
Screening & receipt mint
On funding, Klaro runs screening against the buyer wallet and payment trail. On pass, the escrow releases to vendor and a Stenn-Proof receipt is minted with hashes of invoice + buyer acceptance + screening result.
RolesSystemOperatorStatesPendingPassedHeldReleasedMintedVerifiedOn-screen timeline- Screen wallet + chain trail
- Pass → release to vendor
- Mint receipt with proof bundle
- Anchor on Arc
- Public receipt page live
- simulated§22
LP onboarding
LPs are invite-only. Application → review → stake deposit → activation. Designed to feel like partner onboarding, not consumer signup.
RolesLPOperatorStatesInvitedApplicationStartedSubmittedUnderReviewApprovedRejectedStakeRequiredActiveSuspendedOn-screen timeline- Invite received
- Application + docs submitted
- Review (wallet risk, payout proof, source-of-funds)
- Approval + stake required
- Stake deposited → active