> For the complete documentation index, see [llms.txt](https://daddy-studios.gitbook.io/daddy-studios-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://daddy-studios.gitbook.io/daddy-studios-docs/scripts/daddy-marketplace/configuration/offers.md).

# Offers & Buy Orders

Two ways for a buyer to name their own price.

## Offers

A buyer proposes a price on an existing listing. The seller accepts, rejects, or counters.

```lua
Config.Offers = {
    enabled = true,
    maxActiveOffers      = 5,       -- per player
    expiryHours          = 24,
    minOfferPercentage   = 50,      -- % of the asking price
    escrow               = true,
    allowPartialQuantity = true,
    checkIntervalSeconds = 60,
}
```

| Option                 | Meaning                                                                   |
| ---------------------- | ------------------------------------------------------------------------- |
| `maxActiveOffers`      | Pending offers one player may have open at once                           |
| `expiryHours`          | An unanswered offer expires after this and is refunded                    |
| `minOfferPercentage`   | The floor, as a percentage of the asking price. `50` blocks lowball spam. |
| `escrow`               | Hold the offer money until the offer is resolved — **recommended**        |
| `allowPartialQuantity` | Allow offers on part of a listing                                         |
| `checkIntervalSeconds` | How often expired offers are refunded                                     |

### Escrow

With `escrow = true` the money is taken when the offer is made and held. It is returned in full when the offer is rejected, cancelled, expires, or when the listing is removed by an admin. The refund happens exactly once — an offer already refunded on rejection is not refunded again when the expiry job later sweeps it up.

With escrow off, a seller can accept an offer from a player who has since spent the money. Leave it on.

### Counter-offers

A seller can counter with a different price instead of accepting. The buyer's original escrow is released at that moment, and the buyer decides on the new price. That release happens once: a countered offer is not refunded a second time when it later expires.

### Partial offers

With `allowPartialQuantity = true` a buyer can offer for part of a listing — 3 of the 10 iron on sale. Accepting sells only those 3; the listing keeps the other 7 and stays active. An offer can never be accepted for more than what is still available: if someone bought 9 of the 10 in the meantime, an outstanding offer for 10 is refused rather than silently shrunk.

## Buy orders

The reverse of a listing: a buyer posts what they want and what they pay, sellers fill it from their inventory.

```lua
Config.BuyOrders = {
    enabled = true,
    maxActiveBuyOrders = 5,         -- per player
    durationHours      = 48,
    minPricePerUnit = 1,
    maxPricePerUnit = 100000,
    minQuantity = 1,
    maxQuantity = 500,
    taxPercentage           = 5,
    buyerPaymentMethod      = 'bank',
    sellerReceiveMethod     = 'bank',
    allowPartialFulfillment = true,
    requireItemInInventory  = false,
    checkIntervalSeconds    = 60,
}
```

| Option                    | Meaning                                                   |
| ------------------------- | --------------------------------------------------------- |
| `durationHours`           | Unfilled escrow is refunded after this                    |
| `taxPercentage`           | Non-refundable creation fee, % of the order total         |
| `buyerPaymentMethod`      | Where the escrow is taken from and refunded to            |
| `sellerReceiveMethod`     | Where a filling seller is paid                            |
| `allowPartialFulfillment` | Sellers may fill part of an order                         |
| `requireItemInInventory`  | Buyer must own at least 1 of the item to create the order |

### How the escrow works

The full order value is taken up front and held. Each fulfilment pays out only for the units actually delivered and shrinks both the remaining quantity and the remaining escrow.

An order for 10 units at $100 holds $1,000. A seller filling 4 units is paid $400; the order is left with 6 units and $600 held. When the last 6 are filled, the escrow reaches exactly zero. If the order expires with 6 unfilled, that $600 is refunded — the creation fee is not.

### Claiming

Items delivered into a buy order are collected by the buyer from the claim depot. Each fulfilment row is claimed atomically (`0` waiting → `2` claiming → `1` claimed), so clicking the claim button repeatedly cannot hand the same items over twice.

Cancelling an order — by the buyer or through `/marketplaceadmin buyorder <id>` — refunds whatever escrow is still remaining.

## Next steps

* [Fees & Taxes](/daddy-studios-docs/scripts/daddy-marketplace/configuration/fees.md)
* [Auctions](/daddy-studios-docs/scripts/daddy-marketplace/configuration/auctions.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://daddy-studios.gitbook.io/daddy-studios-docs/scripts/daddy-marketplace/configuration/offers.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
