# Serve a reservation

A reservation sells a monthly pool from one model at a fixed monthly fee. The pool of a chat model is tokens. The pool of a video, image or speech model is units: seconds of video, images or characters of speech. An operator must turn on reservations for your provider first. Ask the exchange.

## How a reservation sale works

A buyer asks you and other chosen providers for quotes. If the buyer accepts yours, the exchange creates a contract. It names you as seller and the buyer's workspace as buyer, and neither side can change it.

1. Answer the buyer's request in the **Reservations** inbox with a quote, or decline.
2. The buyer accepts. The accepted quote becomes a contract.
3. Link one unlisted deployment of the agreed model to the contract. The link is final.
4. Quote the deployment only at the contract prices.
5. On the 1st of each month of the term, the exchange moves the fee from the buyer's cash into your balance. You get it in your next payout.
6. Serve the buyer's requests on the deployment. The buyer can also ask you to serve some days early. See [Start before the term](https://inference.ai.exchange/docs/provider-reservations.md#start-before-the-term).

All reservation deployments must follow zero data retention.

## The inbox

The provider console has 4 tabs:

| Tab                 | What you find there                                                                                      |
| ------------------- | -------------------------------------------------------------------------------------------------------- |
| **Needs an answer** | Requests you have not quoted, quotes the buyer asked you to change, and threads with a newer buyer reply |
| **Answered**        | Requests you quoted                                                                                      |
| **Closed**          | Requests the buyer closed before you quoted, and quotes the buyer rejected                               |
| **Contracts**       | Accepted quotes, in groups                                                                               |

Each row shows the model, buyer, pool size, region, start month, term and one status, such as **New**, **Buyer replied**, **Quote sent**, **Accepted** or **Lapsed**. A row flags uptime above 99.9%, time to first token of 250 ms or less, and SOC 2. **Needs an answer** lists buyer replies first, then change requests, then new requests, oldest first. See [Reservations](https://inference.ai.exchange/docs/reservations.md#terms) for the terms.

## Quote, revise or decline

Open a request and set the prices and terms. The buyer sees your prices with the exchange fee added.

| Field                 | What you set                                                     |
| --------------------- | ---------------------------------------------------------------- |
| Input price           | Dollars for each million input tokens, before the exchange fee   |
| Output price          | Dollars for each million output tokens, before the exchange fee  |
| Token pool            | Input and output tokens for each month                           |
| Rate limits           | Tokens and requests for each minute                              |
| Output speed          | Minimum output tokens for each second                            |
| Time to first token   | Maximum for 95% of requests in a month, or no limit              |
| Start month           | First month of the term, after the current month                 |
| Term                  | 1 to 12 months                                                   |
| Uptime                | Minimum uptime, as a percentage                                  |
| Regions               | Serving regions, such as `us-east` or `eu-west`. Empty means any |
| SOC 2                 | Not required, Type 1 or Type 2                                   |
| **Note to the buyer** | Optional, 200 characters at most                                 |

The monthly fee is the input price times the input pool, plus the output price times the output pool. It must be above zero.

For a video, image or speech model, the buyer states a count for each variant. You state a rate for each of them, in nano-USD for one unit (`nanos_per_unit`), before the exchange fee. The monthly fee is the sum of each count times its rate. You cannot add or leave out a variant that has a count, and you cannot price a variant that has none.

The terms start as the buyer's terms. The buyer sees each term that differs. If the buyer's start month has begun, the form moves it to the next open month.

- **Send quote** sends your quote.
- **Send updated offer** replaces your quote with a new revision. The buyer accepts one revision, so a buyer must read the new offer before the acceptance counts.
- **Decline** ends your part in the request.

After you decline, the buyer accepts or the quote lapses, you cannot quote again.

When the buyer asks for changes, you see the reasons. Answer with an updated offer or a reply. A rejected quote is closed.

Keep messages about the request. The exchange can read them.

## Link a deployment

Open the **Contracts** tab. **Needs action** lists contracts with no deployment, or whose fee the buyer's cash did not cover.

Choose a deployment and then **Link deployment**. The deployment must belong to your provider, serve the same model, be unlisted, and serve no other contract. It must also be in a region the contract allows, and your provider must have a checked SOC 2 report of the type the contract asks for or a stronger one (a declared or lapsed report does not count; see [Provider claims](https://inference.ai.exchange/docs/provider-claims.md)). If none qualifies, register one first. See [Deployments](https://inference.ai.exchange/docs/provider-models.md).

The link is final. A linked deployment is **committed**: you can never list it, you cannot change its model link, and the exchange leaves it out of automatic admission.

Link by 00:00 UTC on the 1st to serve that month. A later link serves from the next month. The exchange refuses the link when no month of the term is left after the current one.

The exchange compares region names exactly, so a deployment in `us` or `us-east-1` does not meet a `us-east` term. A contract can name these regions: `us-east`, `us-central`, `us-west`, `ca-central`, `sa-east`, `eu-west`, `eu-central`, `eu-north`, `uk-south`, `me-central`, `af-south`, `ap-south`, `ap-southeast`, `ap-northeast` and `au-southeast`.

A refused link gets `409` with one of these codes:

| Code                    | Cause                                                                       |
| ----------------------- | --------------------------------------------------------------------------- |
| `deployment_ineligible` | The deployment serves another model, or it is not unlisted                  |
| `deployment_taken`      | The deployment serves another contract                                      |
| `already_linked`        | The contract has a deployment                                               |
| `region_outside_terms`  | The deployment is in a region the contract does not allow                   |
| `soc2_missing`          | Your provider has no checked SOC 2 report of the type the contract asks for |

## Quote the contract prices

From the link to the end of the term, quote the deployment only at the contract prices. You get requests and the monthly fee only while you do. In your quote:

- State the contract input price as the uncached input rate.
- State the contract output price as the generation rate.
- State no fixed fee.
- Keep the cache read and write rates, and any audio output rate, no higher than the input price and output price respectively.
- Quote no rate for images, characters, video seconds or audio seconds, unless the contract is for that unit.

A contract for video, image or speech has no token prices. Quote exactly the rate of each variant of the contract, with the same resolution, quality, size and sound options, and no other line. A line for a variant that the buyer did not commit gets `contract_price`.

Other prices on a linked deployment get `contract_price`. See [Quote over the session](https://inference.ai.exchange/docs/provider-quoting.md). When you link a deployment that has an offer at other prices, the exchange removes that offer in about 10 seconds. Otherwise, serve as usual. See [Serve and get paid](https://inference.ai.exchange/docs/provider-dispatch.md).

## Each month

The contract card shows the month status:

| Status                 | Meaning                                                                             |
| ---------------------- | ----------------------------------------------------------------------------------- |
| Waiting for start      | The term has not started.                                                           |
| Waiting for deployment | No deployment is linked, or you linked it after the 1st. You serve from next month. |
| Fee due                | The buyer has not paid. The exchange charges after you quote the contract prices.   |
| Active                 | The buyer paid. You serve the buyer's requests.                                     |
| Pool used              | The buyer used the pool. Requests go to the market for the rest of the month.       |
| Suspended              | The buyer's cash did not cover the fee on the 1st. You do not serve this month.     |
| Ended                  | The term is over.                                                                   |

The fee run is at 00:00 UTC on the 1st, then once an hour. The exchange charges the fee only if you had an offer at the contract prices in the last 5 minutes. Otherwise it tries again in an hour.

A suspended month stays suspended, and a later top-up does not resume it. You earn nothing for it, or for a month before the link.

## Start before the term

The buyer can ask you to serve for some days before the first month. You accept or decline, and then the exchange approves or refuses.

1. The request shows on the contract in **Contracts**, with the first day and the fee for the days to the end of that month, before the exchange fee.
2. Choose **Accept** or **Decline**. Link the deployment first. You cannot accept from 00:00 UTC on the first day.
3. When you accept, the exchange approves or refuses. If it approves, it holds the fee from the buyer's cash. It cannot approve after the first day begins.
4. From 00:00 UTC on the first day, you serve at the contract prices. The pool for those days is the same share of the monthly pool as the fee is of the monthly fee.
5. On the 1st of the term, you receive the held fee, with the first month's fee if the buyer pays it. The early days are paid even when the buyer cannot pay the first month.

The early fee is the monthly fee times the days to the end of the month, divided by the days in that month. Days are whole UTC days.

| State                                      | Meaning                                                                                             |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------- |
| Early start asked                          | The buyer waits for you and can withdraw until you answer.                                          |
| Waiting for the exchange                   | You accepted. The exchange approves or refuses.                                                     |
| Early start approved                       | The fee is held. You serve from the first day and are paid on the 1st.                              |
| Early start withdrawn, declined or refused | The buyer withdrew, you declined, or the exchange refused (with a reason). The buyer can ask again. |
| Early start revoked                        | The exchange revoked the approval, with a reason. The buyer cannot ask again.                       |

## Uptime and speed

While the contract serves a month, the exchange measures the uptime and the output speed of the linked deployment.

- Every 5 minutes, the exchange sends a chat deployment a request for 1 token. A video, image or speech deployment gets no probe, so its uptime comes from the buyer's jobs. The exchange does not send this request when a buyer's request got an answer in those 5 minutes. The exchange pays for the request at the contract prices. The request does not use the buyer's pool or rate.
- Uptime is a share of time. The exchange divides the time into periods of 5 minutes. In each period, the uptime is the requests that got an answer, divided by all the counted requests from buyers and from the exchange. Each period has the same weight, whatever the number of requests in it. A failure of your deployment counts as down. A time with no offer at the contract prices also counts as down, because the buyer cannot use the deployment. A slow answer counts as up, because the speed term measures it.
- Output speed is the median of the output tokens a second, over the requests from buyers and from the exchange. A request with less than 250 ms of output does not count. When a month has fewer than 30 timed requests, the exchange also sends a longer request every 6 hours.
- The exchange checks your SOC 2 report during the term. A report that lapses counts against the contract.

When the last 24 hours fall below a term, the exchange records the time that the term was below its target. After a month ends, the exchange keeps one result for each term: met, missed or not measured. Uptime needs 100 periods with a counted request for a result, and speed needs 30 timed requests. Uptime is not measured for a month in which the exchange did not count each day, for example the month in which the exchange started to measure.

## Jobs, usage and payout

A job inside the pool takes no hold and settles with no charge. Its value at the contract prices counts against the pool. The pool is used when use reaches the monthly fee.

If your deployment fails a job before its first token, the buyer's **overflow** models serve it at market prices. The exchange records your failed jobs on the contract.

Each paid month becomes one item of your payout, with the same hold window as a settlement. See [Serve and get paid](https://inference.ai.exchange/docs/provider-dispatch.md#payouts).
