> For the complete documentation index, see [llms.txt](https://docs.odds88.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.odds88.io/odds88-client-api/odds88-feeds/cashout-feed.md).

# Cashout Feed

```
/feed/cashout/v2?revision=<revision>
```

`revision` - Unix time stamp seconds of the moment, from which you want to get recovery. Can be `0` for initial connection. Max value - 3 days from current time.

The feed contains real-time updated suggested cashout values for bets.

{% hint style="warning" %}
The stream connection is rate-limited and there can be only 1 active connection at a time.
{% endhint %}

Rate limit configuration is the following:

* Connection attempt without revision - 5 connections per 30 minutes
* Connection attempt with too small revision - 5 connections per 30 minutes
* Connection attempt with proper revision - 5 connections per 5 minutes

**Two additional** rate limits apply to all feeds that use a timestamp as the `revision` parameter. These limits apply specifically to **recovery requests made on reconnection**.

#### 1. Large recoveries (timestamp older than 1 hour)

If a client reconnects and requests recovery from a timestamp more than **1 hour** in the past, the request is subject to a hard limit:

> **Limit:** 5 requests per 30 minutes

#### 2. Small recoveries (timestamp within the last 1 hour)

If a client reconnects and requests recovery from a timestamp within the last hour, the length of the requested recovery period is added to a **leaking bucket**:

| Parameter       | Value                                       |
| --------------- | ------------------------------------------- |
| Bucket capacity | 1 hour (3,600 seconds)                      |
| Leak rate       | 4 seconds drained per 1 second of real time |

Once the bucket is full, further recovery requests are blocked until enough has drained.

#### Practical examples

**✅ Within limits** A client that drops and reconnects every **5 minutes** requesting a **10-minute** recovery will operate well under the limit and notice no impact.

**❌ Will be blocked** A client that reconnects every **5 minutes** requesting a **30-minute** recovery will fill the bucket faster than it can drain, and will eventually be blocked.

#### Summary

Frequent reconnects are fine — as long as the requested recovery window stays **proportionate to the reconnect interval**.

## Message Format

## The Marlin.SportsbetApi.Models.Cashout.CashoutFeedMessage object

```json
{"openapi":"3.0.4","info":{"title":"[T728-STAGE] Odds88 API","version":"v1"},"components":{"schemas":{"Marlin.SportsbetApi.Models.Cashout.CashoutFeedMessage":{"type":"object","properties":{"pingId":{"type":"string","description":"Message ping id, if the message is a ping","nullable":true},"data":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Models.Cashout.CashoutViewModel"}],"description":"Message data","nullable":true}},"additionalProperties":false,"description":"Model representing cashout feed message"},"Marlin.SportsbetApi.Models.Cashout.CashoutViewModel":{"required":["betId","playerId","status","timestamp"],"type":"object","properties":{"playerId":{"type":"string","description":"Player id","nullable":true},"betId":{"type":"string","description":"Bet (request) id","nullable":true},"status":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Models.Cashout.CashoutStatus"}],"description":"Status of cashout\n\n* `1` - Available\n* `2` - NotSupported\n* `3` - CashedOut"},"reason":{"type":"string","description":"Reason, if the Marlin.SportsbetApi.Models.Cashout.CashoutViewModel.Status is something other than Marlin.SportsbetApi.Models.Cashout.CashoutStatus.Available","nullable":true},"amount":{"allOf":[{"$ref":"#/components/schemas/Marlin.SportsbetApi.Models.Cashout.CashoutAmountViewModel"}],"description":"Amount view model","nullable":true},"timestamp":{"type":"string","description":"Timestamp of the message","format":"date-time"}},"additionalProperties":false,"description":"Model representing cashout"},"Marlin.SportsbetApi.Models.Cashout.CashoutStatus":{"enum":[1,2,3],"type":"integer","description":"Enum representing different cashout statuses\n\n* `1` - Available\n* `2` - NotSupported\n* `3` - CashedOut","format":"int32"},"Marlin.SportsbetApi.Models.Cashout.CashoutAmountViewModel":{"required":["currency","localAmount","precision"],"type":"object","properties":{"localAmount":{"type":"number","description":"Cashout amount","format":"double"},"precision":{"type":"integer","description":"Precision value","format":"int32"},"currency":{"type":"string","description":"Currency ticker symbol","nullable":true}},"additionalProperties":false,"description":"View model representing amount"}}}}
```
