How it flows
- Post. The buyer posts a request: a reference to what is needed, the time until which offers are accepted, the token it will be paid in, and how it settles.
- Offer. Suppliers answer with a price and a time to deliver. An offer cannot be edited once it is made. Its supplier can only withdraw it, and only while the request is open.
- Award. The buyer chooses one offer. The choice is recorded and no other offer can be chosen afterwards. In the same transaction the offer settles the way the request stated: nothing is paid, the supplier is paid directly, or the payment is held in escrow for the time the supplier offered.
- Deliver. When the payment is held, the buyer releases it on delivery. A supplier who cannot deliver hands it back. If neither acts before the deadline, anyone can trigger the return to the buyer.
How it settles
Each request or listing states how it settles when it is accepted. A workspace can switch direct payment or escrow off. Recording only is always available.
| Way | In the contracts | What happens |
|---|---|---|
| Recorded only | Settlement.None | Nothing is paid. The choice itself is the record. |
| Paid directly | Settlement.Direct | The payment passes through the vault to the supplier in the same transaction. |
| Held | Settlement.Escrow | The payment becomes an escrow. The supplier's time to deliver becomes its deadline. |
Who can do what
Every call below writes a record. None of them can be undone or edited afterwards.
| State | Who may act | Call | What happens next |
|---|---|---|---|
| Any time | A buyer | postRfp(…) | A request is recorded as Open |
| Open, while offers are accepted | A supplier | bid(rfpId, amount, timeframe) | An offer is recorded |
| Open | The supplier who made the offer | withdrawBid(rfpId, bidId) | The offer is marked withdrawn. It stays on the record. |
| Open | The buyer | acceptBid(rfpId, bidId) | Awarded: the choice is recorded and the offer settles |
| Open | The buyer | cancelRfp(rfpId) | Cancelled: no offer can be chosen |
When the payment is held
One held payment, one action on each side. Each action moves the payment in one direction only. After the deadline the only action left is the return to the buyer. It does not happen by itself: someone has to send that transaction, and anyone can.
| State | Who may act | Call | What happens next |
|---|---|---|---|
| Active, before the deadline | The buyer (issuer) | release(id) | Released: paid to the supplier, less the platform fee |
| Active, before the deadline | The supplier (receiver) | cancel(id) | Handed back (Cancelled): the held amount goes to the buyer |
| Active, after the deadline | Anyone | expire(id) | Returned (Expired): the held amount goes to the buyer, the only place it can go |
release(id) // the buyer (issuer) only, before the deadline: pays the supplier (receiver)
cancel(id) // the supplier (receiver) only, before the deadline: hands the payment back to the buyer
expire(id) // anyone, after the deadline: returns the payment to the buyerAn example
A request that settles by escrow, from the award to the held payment. The figures are an example.
| Request | #310 · offers accepted until 2026-08-01 · settles by escrow |
|---|---|
| Chosen offer | 12,500 USDT · delivered in 6 weeks · awarded 2026-08-05 |
| Becomes the escrow | |
| Escrow | #4822 · opened by the award |
| Buyer (issuer) | the buyer who posted the request |
| Supplier (receiver) | the supplier whose offer was chosen |
| Deadline | 2026-09-16 · six weeks after the award |
| Delivered | the buyer calls release() → paid to the supplier |
| Not delivered | after the deadline anyone can call expire() → returned to the buyer |
What makes it hold
A tender anyone can check
The request, every offer and the award are records. A supplier who was not chosen can check that nothing was rearranged afterwards.
Offers cannot be edited
An offer stays as it was made. Its supplier can withdraw it and never change it, so the buyer awards exactly the terms they read.
Wording can stay private
The record holds a fingerprint of the request's text, not the text itself. The wording can stay private, and its owner can still prove later what it said.
The same escrow underneath
A request that holds the payment uses the escrow protocol unchanged: the same three outcomes and the same limits on who can act.
In the contracts
The contracts call a request an Rfp (request for proposal), an offer a Bid, and the buyer's choice an award (acceptBid). The buyer is the requester and the supplier the provider. A request is Open, then Awarded or Cancelled.
A developer gets the contract addresses, the interface files and code examples for these calls from the Connect a platform page. The whitepaper sets out the rules that hold across all three.
Other protocols
- Escrow protocol: how a held payment works, and the only three things that can happen to it.
- Listings protocol: a supplier offers something at a fixed price, and a buyer takes it as it stands.
Questions about any of them? Contact us.