| Ledger | Who controls it | What moves |
|---|---|---|
| User charge | You | Points and/or fiat you collect from the user, in whatever amount you choose. |
| Drawdown deduction | Rye | The order’s purchase price minus your commission, deducted from your balance when the order places. |
{ "type": "drawdown" } payment method.
The hold → submit → settle pattern
All three charge models share the same shape. You hold value on the user’s side, submit the order to Rye, and then settle the hold based on how the checkout intent resolves:Place a hold on the user's funds
Reserve points or authorize the card before you submit the order, so you know the funds are good. Don’t capture them yet.
Submit the checkout intent with drawdown
Create (or confirm) the checkout intent with
paymentMethod: { type: "drawdown" }. Rye deducts purchase price − commission from your balance when the order places.Settle on the intent's terminal state
Watch the checkout intent reach a terminal state — via the
checkout_intent.completed / checkout_intent.order_failed webhooks, or by polling the intent lifecycle.completed→ finalize the hold (deduct the points / capture the card authorization).failed→ roll the hold back (refund the points / release the authorization). Rye automatically credits the drawdown deduction back to your balance on failure, so neither ledger is left charged.
1. Pay by points
The user redeems points for the order.- Hold: place a hold on the user’s points balance for the redemption amount (decrement an
availablebalance, move the points into apendingbucket — however your ledger models it). - Submit: create the checkout intent with drawdown.
- Settle:
completed→ finalize the deduction (the held points are now spent).failed→ roll the deduction back (return the held points to the user’s available balance).
2. Pay by fiat
The user pays with a card. Use whatever processor you prefer — the mechanics are the same. With Stripe, place a hold on a payment method by creating a manual-capture PaymentIntent.- Hold: authorize the card for the charge amount (don’t capture).
- Submit: create the checkout intent with drawdown.
- Settle:
completed→ capture the authorization.failed→ cancel/release the authorization.
3. Pay with a mixture
Split the charge across points and fiat — e.g. the user covers part of the order with points and puts the rest on a card. This is just (1) and (2) run together: hold both, submit one drawdown order, then settle both holds on the same terminal state. How you split the charge between points and fiat is entirely up to you — Rye doesn’t see it. The only thing Rye does is deductpurchase price − commission from your drawdown balance.
Discounting to incentivize purchases
Because you control the user-facing charge, you can discount an order to drive redemptions — and still come out ahead, as long as the discount stays within your commission. Recall that drawdown deducts purchase price − commission:A $100 product with $20 commission results in an $80 drawdown deduction.So your true cost for that order is $80. If you charge the user the full $100, you net the $20 commission. If you discount the user’s price by
X, you net 20 − X (in dollars). As long as the discount X is less than the commission, the checkout is still profitable.
To size the discount safely, read the commission before you charge the user. When the checkout intent reaches awaiting_confirmation, the offer carries a commission field with the amount you’d earn if the order places:
offer.commission.amount and the order stays in the black:
If
offer.commission.estimate is true, the amount is a pre-checkout estimate and may differ slightly from the finalized commission. Leave headroom against the estimate if you discount aggressively.
