---
title: "Cross-venue arbitrage opportunities from the Arb Bets feed"
method: GET
path: "/arb-bets/"
tags: ["Markets"]
---

# Cross-venue arbitrage opportunities from the Arb Bets feed

`GET /arb-bets/`

## Request

- Base URL: `https://data.kairos.trade`
- URL: `https://data.kairos.trade/arb-bets/`
- Auth: API key in header `X-Client-Id` and API key in header `X-Api-Key` and API key in header `X-Api-Secret`

Server-side proxy to the Arb Bets vendor feed, called with a Kairos-held key so the credential never reaches a client. Fixed vendor parameters: $100 investment, 1.0% minimum profit. The body is the vendor's payload passed through unchanged — Kairos does not normalize it, and its shape is owned by the vendor. Note the **trailing slash**: the route is registered at `/arb-bets/`, and `/arb-bets` redirects.

## Response `200`

Vendor payload, passed through.

- ArbBetsResponse: Vendor payload, passed through unchanged. Fields are documented as observed — the vendor owns this shape and can change it without a Kairos deploy.
  - `success` boolean
  - `generated_at` string
  - `investment_amount` number
  - `min_profit_filter` number
  - `total_markets_analyzed` integer
  - `total_arbitrages_found` integer
  - `markets_skipped` integer
  - `skip_reasons` object
  - `profitable_count` integer
  - `profitable_arbitrages` ArbBetsOpportunity[]
    - `kalshi_id` string
    - `poly_clob_token_ids` string[]
    - `market_name_a` string
    - `market_name_b` string
    - `platform_a` string
    - `platform_b` string
    - `url_a` string
    - `url_b` string
    - `volume_a` number
    - `volume_b` number
    - `best_arbitrage` ArbBetsStrategy: The two-leg bet the vendor scored as best for this opportunity.
      - `combination` string
      - `platform_1` string
      - `side_1` 'Yes' | 'No'
      - `price_1` number
      - `bet_amount_1` number
      - `payout_1` number
      - `platform_2` string
      - `side_2` 'Yes' | 'No'
      - `price_2` number
      - `bet_amount_2` number
      - `payout_2` number
      - `total_prob` number: Combined implied probability. Below 1 is what makes the pair an arb.
      - `gross_profit` number
      - `net_profit` number
      - `roi_percent` number
      - `fees` number

## Other responses

- `401`: No valid credential presented — missing/invalid API-key headers, or an invalid/expired session token.
- `429`: Rate limit exceeded for this route's sliding window, keyed on the session `sub` when authenticated and on the trusted client IP otherwise. Honor `Retry-After`. A per-API-key data ceiling (set per credential) rejects with `{"detail": "API key data rate limit exceeded"}` instead of the `error` envelope below.
- `500`: No Arb Bets key is configured on this deployment.
- `503`: Kairos' vendor credential was rejected upstream.
- `default`: Any other upstream failure is passed through with the vendor's status code.

---

[API](https://skmtc.dev/kairos/apis/kairos-data-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-data-api/revisions/cf6b76079e38?raw)
