# Reservations

A reservation is a monthly pool on one model from one provider, 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. You reach it only through a preset. A plain model name still buys on the market. Every reservation requires zero data retention.

## How a reservation works

1. Send a request for quotes to up to 20 providers. State the model and the terms you need.
2. Read the quotes. You can discuss a quote, ask for changes, or reject it. A provider can answer a change request with an updated offer.
3. Accept a quote. The exchange checks that your cash covers 1 monthly fee. You pay nothing yet.
4. The provider links a deployment to your contract. Your contract serves from the first month that starts after the link. To be served sooner, see [Start before the term](#start-before-the-term).
5. On the 1st of each month of the term, you pay the monthly fee from your cash. If your cash is short, you lose that month.
6. Name the reservation in a preset. Requests with that preset go to the provider's deployment first, at no further cost, until you use up the month's pool.

## Terms

You set these terms in the request. Each provider answers with what it offers. You see each term that differs from your request.

| Term                | What you ask for                                                                 |
| ------------------- | -------------------------------------------------------------------------------- |
| Token pool          | Chat models: input tokens and output tokens for each month                       |
| Unit pool           | Video, image and speech models: the units for each month and variant             |
| Rate limits         | Tokens for each minute (units for a unit pool) and requests for each minute      |
| Output speed        | Chat models: the minimum output tokens for each second                           |
| Time to first token | Chat models: the maximum for 95% of requests in a month; the default is no limit |
| Start month         | The first month of the term                                                      |
| Term                | 1 to 12 months                                                                   |
| Uptime              | The minimum uptime, as a percentage                                              |
| Regions             | Serving regions, such as `us-east` or `eu-west`; empty accepts any               |
| SOC 2               | Not required, Type 1 or Type 2                                                   |

The time to first token runs from the hand-off to the provider to the first usable token, and includes thinking time. The exchange does not refuse a slower request.

## Prices and the monthly fee

Each quote gives an input price and an output price, in dollars for each million tokens. Your monthly fee is the input price times the input pool plus the output price times the output pool. You pay it whether or not you use the tokens.

## Reserve a video, image or speech model

Pick a video, image or speech model in the request. The form asks for units, not tokens. Embedding, decision and transcription models cannot be reserved.

| Model  | Unit             | Variant you choose |
| ------ | ---------------- | ------------------ |
| Video  | Seconds of video | Resolution         |
| Image  | Images           | Quality            |
| Speech | Characters       | None               |

State a count for each variant that you plan to use, and the most units that you send in one minute. Each quote gives a rate for each variant, in dollars for one unit. Your monthly fee is the sum of each count times its rate. You pay it whether or not you use the units.

The provider must charge exactly the rates of the contract, for each variant and no other. Commit each variant that you plan to use.

Each job counts its own units against the limit for each minute: the seconds of video, the number of images or the characters of the text. At the limit, the overflow serves the request. A job of another kind than the reservation counts nothing against it.

The exchange does not send probe requests to a video, image or speech deployment, because each one would buy real output. The uptime of the deployment comes from the jobs that buyers send.

## Ask for quotes

1. Open **Reservations** in the console and choose **New request**.
2. Pick the model, then the providers that sell reservations of that model.
3. Set the terms and choose **Send request**.

Only a workspace owner or admin can send, accept, ask for changes, reject or close. Every member can read.

You can accept several quotes on one request. **Close request** stops new quotes and lapses the quotes you did not accept. Accepted reservations stay in force.

## Compare and accept a quote

Open the request to see **Reserved so far** (accepted quotes and their use this month) and **Open quotes**, sorted by price at your input and output mix.

- Each column is a term on which the quotes differ. A tick means the quote matches your request. A ring means more than you asked for. An orange diamond means less.
- **Best price** marks the lowest price among the quotes that match and cover the full pool.
- To compare, tick up to 4 quotes and choose **Compare**.
- Providers that declined, and quotes that lapsed, are under **Not available**.

You can do 4 things with a quote:

- **Reply** or **Messages**: write to the provider. Do not send contact details or personal data. The exchange can read messages and can suspend an account that misuses them.
- **Ask for changes**: pick your reasons, such as uptime, location, throughput, start date, time to first token or price. An updated offer replaces the quote.
- **×** (**Reject quote**): the provider cannot send a new offer on it. You cannot undo this step.
- **Accept**: a dialog states the monthly fee, the total for the term and the month of the first fee. Choose **Accept quote** to confirm. You accept the current revision, and its start month must not have begun. If the provider sent an updated offer meanwhile, read it and accept again.

To accept, you need withdrawable cash that covers 1 monthly fee with the exchange fee. Credit does not count. You pay nothing when you accept. You cannot cancel a contract after you accept it.

## Put the reservation in a preset

Under **Reserved**, choose **Use in a preset** to make a preset with the reservation that ranks by price. Or add this entry to a preset of your own:

```text
reservation:<contract id>
```

A preset can hold 1 reservation. Any other models in the preset are your **overflow**, which you buy on the market when the reservation cannot serve. Overflow is optional. A preset with only the reservation sends nothing to the market. Rank the preset by price or by speed, not by Auto, because your reservation has no score.

Send requests with the preset's model name or a bound API key. See [Purchasing rules](https://inference.ai.exchange/docs/rules.md). For each request:

1. The exchange tries the reservation's deployment before any market offer, even a cheaper one.
2. The charge of each job, at the contract prices, leaves your month's pool.
3. If the deployment fails before its first token, the overflow serves the job at market prices. After the first token, the exchange does not switch provider.

When the pool is used up, the overflow serves the rest of the month.

The contract also sets the tokens (or units) and requests a minute that you can send to the reservation. The exchange counts each request in a window of 60 seconds. A request counts its input and the output it asks for (`max_tokens`). At the limit, the overflow serves the request. A request counts even when the deployment fails and the overflow serves it. A dry run counts nothing.

If the reservation is the only entry and cannot serve, the exchange refuses the request. See [Errors](https://inference.ai.exchange/docs/errors.md#reservations).

## Each month

The contract card shows one of these statuses:

| Status                 | Meaning                                                                                          |
| ---------------------- | ------------------------------------------------------------------------------------------------ |
| Waiting for start      | The term has not started.                                                                        |
| Waiting for deployment | The provider has not linked a deployment, or linked it after the 1st. You are served next month. |
| Fee due                | You have not paid the fee yet.                                                                   |
| Active                 | You paid the fee. Your requests go to the reservation.                                           |
| Pool used              | You used up the month's pool. Your requests go to the overflow.                                  |
| Suspended              | Your cash did not cover the fee on the 1st. You are not served this month.                       |
| Ended                  | The term is over.                                                                                |

The fee run is at 00:00 UTC on the 1st, and then once an hour. You pay from withdrawable cash only. If a hold is in flight, the run waits for the next hour. If your cash is still short, you lose the month, and a later top-up does not give it back. You pay no fee for a month that the contract does not serve.

Your ledger shows each fee as a `RESERVATION_FEE` entry. The exchange can grant a goodwill credit if the provider fails to serve you.

## Start before the term

You can ask the provider to serve the reservation for some days before the first month. The provider must accept, and then the exchange approves or refuses.

1. Under **Reserved**, pick a day under **Start early on** and choose **Ask to start early**. The day is after today, in the month before the term. The form shows the fee for the days to the end of that month, with the exchange fee.
2. Your withdrawable cash must cover that fee. Credit does not count. You can choose **Withdraw** until the provider answers.
3. The provider accepts or declines. It must link a deployment first, and cannot accept on or after the first day.
4. The exchange approves or refuses. On approval, it moves the fee from your cash to a hold.
5. From 00:00 UTC on the first day, the contract is **Active**. The pool for those days has the same share of the monthly pool as the fee has of the monthly fee. When it is used up, the overflow serves until the term starts.
6. On the 1st of the term, the exchange pays the held fee to the provider, then charges the first month as usual. If your cash does not cover the first month, you lose that month, but the provider keeps the payment for the early days.

The early fee is the monthly fee times the days to the end of the month, divided by the days in that month, in whole UTC days. For example, at $3,000 a month, an early start on October 24 serves 8 of 31 days for $774.19, plus the exchange fee.

The entry under **Reserved** shows the state:

- **Early start asked**: the provider has not answered. You can withdraw.
- **Waiting for the exchange**: the provider accepted.
- **Early start approved**: the fee is held. You are served from the first day.
- **Early start withdrawn**, **declined** or **refused**: you can ask again.
- **Early start revoked**: you cannot ask again.

The exchange can revoke an approval only before its first day, and states its reason. The hold then returns to your cash. The ledger shows `RESERVATION_HOLD`, `RESERVATION_RELEASE` and `RESERVATION_FEE`.

For the provider's side, see [Serve a reservation](https://inference.ai.exchange/docs/provider-reservations.md).
