Harbor Hotel (example)
Reference EXAMPLE-RM-TMJJB7- Imprinted, 7 Oct, 14:09380.00
- Captured so far0.00
Hotels, rental desks, chargers, pumps, bars, grocery stores and the APIs that agents pay all find out the total at the end. With Abeyo the customer approves a hold on Tempo with one passkey tap. The merchant captures what was used, in parts if needed, and the rest goes back.
The customer pays no network fee. Nobody, Abeyo included, can move held money any other way.
Live from the vault on Tempo's Moderato testnet. The yellow copy is money still held. Each stub is a capture. A stamp closes the slip.
Each counter learns its total at a different moment: at checkout, at unplug, per batch of API calls, at closing time. The vault's rules are the same for all of them. Run a story to see what the customer and the merchant each press, or take the controls and try to break the rules.
| Counter | The hold covers | The merchant captures | Valid for at most | Simulator |
|---|---|---|---|---|
| HotelHarbor Hotel | Two nights and incidentals | The bill at checkout, once | 30 days, lodging | |
| Car rentalRidgeway Car Rental | The rental, fuel and tolls | Tolls as they post, then the bill at return | 30 days, vehicle rental | |
| EV chargingQuay Street Charging | A ceiling for the session | The energy delivered, at unplug | 7 days, general | |
| Agent APISaltmarsh Inference API | An agent's budget for one job | Metered usage, one stub per batch | 7 days, general | |
| Bar tabThe Long Room | A ceiling for the tab | The tab and the tip, at close | 7 days, general | |
| EquipmentLens and Tripod Rentals | The kit's value while it is out | Nothing, if it comes back whole | 10 days, equipment | |
| FuelNorthgate Fuel | A ceiling for the pump | The fuel pumped | 7 days, general | |
| DeliveryLarder Grocery Delivery | The basket estimate | The basket after substitutions, or nothing | 7 days, general |
Every row has an example merchant registered on the Moderato vault: 8 merchants in all.
Simulated with example merchants. Every step runs through the same rules as the vault, from @abeyo/sdk.
Harbor Hotel asks for a hold
380.00eUSD
Terms signed with the merchant's own key. Nothing is held until the guest approves.
Signs the terms with its own key: 380.00 eUSD, valid until 14 Oct, 15:00 UTC, paid out only to its own address.
Waiting for the guest to approve.
Read from the chain on each visit, newest first. Held money stays yellow until a capture or a release settles it. A dashed stamp means someone still has to act.
| Merchant and reference | Held | Captured | Returned | Valid until (UTC) | State |
|---|---|---|---|---|---|
| Saltmarsh Inference API (example)MCP-JOB | 0.00 | 3.12 | 46.88 | 8 Oct, 14:41 | Captured, rest returned |
| Saltmarsh Inference API (example)MCP-JOB | 0.00 | 3.12 | 46.88 | 8 Oct, 14:40 | Captured, rest returned |
| Saltmarsh Inference API (example)MCP-JOB | 0.00 | 3.12 | 46.88 | 8 Oct, 14:39 | Captured, rest returned |
| Saltmarsh Inference API (example)MCP-JOB | 20.00 eUSD | 0.00 | 0.00 | 8 Oct, 14:38 | Held |
| Lens and Tripod Rentals (example)EXAMPLE-KIT-TMJJBK | 1,200.00 eUSD | 0.00 | 0.00 | 17 Oct, 13:59 | Held |
| The Long Room (example)EXAMPLE-TAB-TMJJBJ | 100.00 eUSD | 0.00 | 0.00 | 14 Oct, 13:59 | Held |
| Saltmarsh Inference API (example)EXAMPLE-JOB-TMJJBF | 42.08 eUSD | 7.92 | 0.00 | 14 Oct, 13:59 | Held |
| Quay Street Charging (example)EXAMPLE-BAY-TMJJBE | 60.00 eUSD | 0.00 | 0.00 | 14 Oct, 13:59 | Held |
| Ridgeway Car Rental (example)EXAMPLE-CAR-TMJJBB | 481.60 eUSD | 18.40 | 0.00 | 6 Nov, 13:59 | Held |
| Harbor Hotel (example)EXAMPLE-RM-TMJJB7 | 380.00 eUSD | 140.00 | 0.00 | 6 Nov, 13:59 | Held |
| Merchant and reference | Held | Captured | Returned | Valid until (UTC) | State |
|---|---|---|---|---|---|
| Harbor Hotel (example)PROOF-DESK-1 | 97.50 eUSD | 52.50 | 0.00 | 8 Oct, 13:55 | Held |
| Quay Street Charging (example)PROOF-BAY-6151G | 0.00 | 0.00 | 60.00 | 7 Oct, 13:52 | Expired, returned |
| Larder Grocery Delivery (example)PROOF-ORDER-6151G | 0.00 | 0.00 | 85.00 | 9 Oct, 13:51 | Void |
| Saltmarsh Inference API (example)PROOF-JOB-6151G | 0.00 | 10.18 | 39.82 | 8 Oct, 13:51 | Captured, rest returned |
| Harbor Hotel (example)PROOF-RM-6151G | 0.00 | 120.00 | 220.00 | 10 Oct, 13:51 | Captured, rest returned |
| Quay Street Charging (example)PROOF-BAY-5XP50 | 0.00 | 0.00 | 60.00 | 7 Oct, 13:49 | Expired, returned |
| Larder Grocery Delivery (example)PROOF-ORDER-5XP50 | 0.00 | 0.00 | 85.00 | 9 Oct, 13:48 | Void |
| Saltmarsh Inference API (example)PROOF-JOB-5XP50 | 0.00 | 10.18 | 39.82 | 8 Oct, 13:48 | Captured, rest returned |
| Harbor Hotel (example)PROOF-RM-5XP50 | 0.00 | 120.00 | 220.00 | 10 Oct, 13:48 | Captured, rest returned |
| Quay Street Charging (example)PROOF-BAY-5UH35 | 0.00 | 0.00 | 60.00 | 7 Oct, 13:47 | Expired, returned |
| Larder Grocery Delivery (example)PROOF-ORDER-5UH35 | 0.00 | 0.00 | 85.00 | 9 Oct, 13:46 | Void |
| Saltmarsh Inference API (example)PROOF-JOB-5UH35 | 0.00 | 10.18 | 39.82 | 8 Oct, 13:45 | Captured, rest returned |
| Harbor Hotel (example)PROOF-RM-5UH35 | 0.00 | 120.00 | 220.00 | 10 Oct, 13:45 | Captured, rest returned |
| Harbor Hotel (example)EXAMPLE-RM008 | 0.00 | 0.00 | 0.0090.00 waiting | 8 Oct, 20:41 | Waiting to be collected |
| Ridgeway Car Rental (example)EXAMPLE-CAR-04 | 481.60 eUSD | 18.40 | 0.00 | 4 Nov, 20:25 | Held |
| Larder Grocery Delivery (example)EXAMPLE-ORDER-02 | 0.00 | 0.00 | 85.00 | 8 Oct, 20:25 | Void |
| Larder Grocery Delivery (example)EXAMPLE-ORDER-01 | 0.00 | 79.12 | 5.88 | 8 Oct, 20:25 | Captured, rest returned |
| Northgate Fuel (example)EXAMPLE-PUMP-01 | 0.00 | 63.20 | 86.80 | 7 Oct, 20:25 | Captured, rest returned |
| Lens and Tripod Rentals (example)EXAMPLE-KIT-02 | 1,200.00 eUSD | 0.00 | 0.00 | 16 Oct, 20:15 | Held |
| Lens and Tripod Rentals (example)EXAMPLE-KIT-01 | 0.00 | 135.00 | 465.00 | 16 Oct, 20:15 | Captured, rest returned |
| The Long Room (example)EXAMPLE-TAB-02 | 100.00 eUSD | 0.00 | 0.00 | 13 Oct, 20:14 | Held |
| The Long Room (example)EXAMPLE-TAB-01 | 0.00 | 86.40 | 13.60 | 7 Oct, 20:24 | Captured, rest returned |
| Saltmarsh Inference API (example)EXAMPLE-JOB-01 | 29.12 eUSD | 20.88 | 0.00 | 13 Oct, 20:14 | Held |
| Quay Street Charging (example)EXAMPLE-BAY-02 | 47.60 eUSD | 12.40 | 0.00 | 13 Oct, 20:14 | Held |
| Quay Street Charging (example)EXAMPLE-BAY-01 | 0.00 | 20.07 | 39.93 | 7 Oct, 20:24 | Captured, rest returned |
| Harbor Hotel (example)EXAMPLE-RM007 | 0.00 | 0.00 | 90.00 | 8 Oct, 18:41 | Void |
| Ridgeway Car Rental (example)EXAMPLE-CAR-17 | 250.00 eUSD | 0.00 | 0.00 | 15 Oct, 18:41 | Held |
| Harbor Hotel (example)EXAMPLE-RM402 | 0.00 | 0.00 | 420.00 | 9 Oct, 18:41 | Void |
| Ridgeway Car Rental (example)EXAMPLE-CAR-91 | 0.00 | 0.00 | 150.00 | 10 Oct, 18:41 | Void |
| Harbor Hotel (example)EXAMPLE-RM120 | 380.00 eUSD | 120.00 | 0.00 | 11 Oct, 18:41 | Held |
| Harbor Hotel (example)EXAMPLE-RM311 | 0.00 | 120.00 | 220.00 | 9 Oct, 18:41 | Captured, rest returned |
| Ridgeway Car Rental (example)EXAMPLE-CAR-88 | 180.00 eUSD | 0.00 | 0.00 | 6 Oct, 18:41 | Past expiry |
| Harbor Hotel (example)EXAMPLE-RM204 | 0.00 | 0.00 | 300.00 | 6 Oct, 18:41 | Expired, returned |
The rules are code in the vault. A merchant cannot capture past them and Abeyo cannot change them.
| Rule | Limit |
|---|---|
| Valid until | Lodging and vehicle rental 30 days, equipment 10 days, everything else 7 days. Set by the merchant's category when the hold is opened, never extended. |
| Additions | Up to 10, each approved and funded by the customer in one tap, and only before the first capture. Never above the ceiling the customer signed, and never above the original amount plus the larger of 500 or five times the original. |
| Captures | Up to 50 partial captures and one final capture, only before the valid-until date, only to the merchant's registered payout address. |
| Release | A final capture or a void returns the rest at once. After the valid-until date anyone can return what is left to the customer. |
| Fee | 0.20% of each capture on this deployment, kept in the vault and swept separately. A capture never waits on it. |
The vault has no admin key, no upgrade and no pause.
| Who | Can | Cannot |
|---|---|---|
| Customer | Open a hold, approve an addition, collect a refund that waited | Capture, or touch anyone else's hold |
| Merchant | Capture to its payout address, void, ask for an addition | Capture more than is held, change the payout address, extend the date |
| Anyone | Return an expired hold to its customer | Release a hold early or send money anywhere else |
| Abeyo | Pay network fees for customers, sweep its fee, add merchants for new holds | Move or freeze held money, or block a capture, void or release |
Checked on 6 Oct 2026. Each line links to where it can be checked again.
@abeyo/sdk builds the signed terms and the calls. The same package carries the rules as a pure model, which is what the simulator above runs, so a merchant can test a counter's flow before it sends anything.
import { authorizeCalls, captureCall, holdTypedData } from "@abeyo/sdk";
// The merchant's server signs the terms of the hold with its own key.
const signature = await merchant.signTypedData(holdTypedData(vault, chainId, terms));
// The customer approves with a passkey: approve + authorize, one sponsored Tempo transaction.
await customer.sendTransaction({ calls: authorizeCalls(vault, terms, signature), feePayer: true });
// The charger captures what was used and closes the slip. The rest returns in the same transaction.
await merchant.sendTransaction({ calls: [captureCall(vault, terms, 20_070_000n, { final: true })] });