> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agg.market/llms.txt
> Use this file to discover all available pages before exploring further.

# Venue Geo Availability

> Which venues a user can fill on from their country, and how to detect it before you take their money

Each venue AGG routes to restricts its own set of countries. A user in a restricted country can browse and quote normally but cannot fill on that venue.

Two things matter for your integration:

1. **Detect ineligibility at quote time**, not at fill time. The signal is already in the quote response.
2. **Don't hard-code the country lists below.** They change — see [Keeping current](#keeping-current).

## Detecting ineligibility before the fill

The smart-route quote response includes a `warnings` array. Any venue in the route the user cannot fill on appears there, with the venue name and a human-readable reason:

```json theme={null}
{
  "quoteId": "...",
  "warnings": [
    {
      "venue": "polymarket",
      "venueMarketOutcomeId": "vmo_...",
      "reason": "Venue not available in your region (GB)"
    }
  ]
}
```

This is deliberate. The quote **does not filter blocked venues out** — it returns the full route the user would get, with the blocked legs flagged, so you can gray them out, relabel them, or route around them before the user commits. Geo is enforced at fill.

Match on the prefix `Venue not available in your region` to identify geo warnings specifically. The trailing `(GB)` is the resolved country and is omitted when the country cannot be determined.

If you ignore the warnings, `POST /execution/fill` returns **403** with `Venue polymarket is not available in your region (US).` — correct, but the worst possible moment to tell a user.

<Note>
  Geo eligibility is not exposed on the events or markets endpoints. Quote time is the earliest point it is available.
</Note>

## Restricted countries by venue

ISO 3166-1 alpha-2. A user in a listed country cannot fill on that venue.

**Polymarket** — 39 countries. Source: [Polymarket Geographic Restrictions](https://help.polymarket.com/en/articles/13364163-geographic-restrictions), verified 2026-08-10.

`AU, BE, BI, BR, BY, CD, CF, CU, DE, ET, FR, GB, IE, IQ, IR, IT, JP, KP, LB, LY, MM, MT, NI, NL, PL, RU, SD, SG, SK, SO, SS, SY, TH, TW, UM, US, VE, YE, ZW`

**Predict** — 13 countries. Source: [predict.fun Terms of Service](https://docs.predict.fun/terms-of-service), verified 2026-08-10.

`AU, BE, CU, FR, GB, IR, KP, PL, SG, SY, TH, TW, US`

**Myriad** — 19 countries. Source: [Myriad Terms of Use](https://help.myriad.markets/myriad-terms-of-use), verified 2026-08-10.

`BS, BW, CH, CU, FR, IR, KH, KP, KY, LY, MT, SD, SG, SO, SY, TT, US, VG, ZW`

**Limitless** — 9 countries. Source: [Limitless Terms of Service](https://docs.limitless.exchange/user-guide/terms-of-service), verified 2026-08-10.

`BY, CN, CU, IR, KP, RU, SY, TW, US`

**Hyperliquid** — 6 countries. Source: [Hyperliquid docs](https://hyperliquid.gitbook.io/hyperliquid-docs/validators/delegation-program), verified 2026-08-10.

`CU, IR, KP, MM, SY, US`

**Kalshi** — 56 countries. Source: Kalshi Member Agreement §VI as amended 2026-06-22, verified 2026-08-10.

`AE, AF, AO, AU, BE, BF, BG, BO, BY, CA, CD, CF, CH, CI, CM, CN, CU, DZ, ET, FR, GB, HT, HU, IE, IN, IQ, IR, IT, KE, KP, LA, LB, LY, MC, ML, MM, MZ, NA, NE, NI, NZ, PL, PT, RU, SD, SG, SO, SS, SY, TH, TW, UA, US, VE, YE, ZW`

## Where our enforcement is stricter than the venue's

Three deliberate differences. In each case AGG blocks more than the venue's own terms require.

**The United States is blocked on every venue.** This is an AGG platform policy, applied uniformly. Kalshi in particular is CFTC-regulated and permits US users; we still block it.

**Country granularity only.** Several venues restrict sub-national regions: Polymarket restricts Alberta, British Columbia, Ontario and Quebec; Limitless restricts Ontario and Alberta; Hyperliquid and Myriad both name Ontario; several name Crimea, Donetsk and Luhansk. We resolve country, not region, so **we do not enforce these** — a user in Ontario will pass our check and may then be rejected by the venue. If sub-national accuracy matters to you, handle it in your own integration.

**No close-only tier.** Polymarket marks Singapore, Poland, Thailand and Taiwan as close-only — existing positions may be closed, new ones may not be opened. AGG has no close-only mode, so those four are blocked outright.

## Unresolved

**Limitless, `CN` vs `TW`.** The Limitless terms restrict the "Republic of China", which denotes Taiwan, but an earlier reading of the same clause recorded "People's Republic of China". We block **both** until the ambiguity is settled. One of the two is likely an over-block.

## Country resolution

Country comes from the edge (`cloudfront-viewer-country`) unless your app is enrolled in [Trusted Proxy](/recipes/partner-trusted-proxy), in which case it is resolved from the `x-agg-client-ip` you forward.

**If the country cannot be determined, no venues are available and every fill is rejected.** This is fail-closed by design. In practice it means a misconfigured proxy looks identical to a fully geo-blocked user, so check your `x-agg-client-ip` plumbing first when every venue disappears at once.

VPN exits resolve to the VPN's exit country, which is how a UK user on a US exit gets a US block.

## Keeping current

Every list above carries a verification date because venues change them without notice. In the four months to 2026-08-10, Polymarket added six countries, Kalshi added three, and Predict's list changed substantially.

**Read `warnings` from the quote rather than shipping these lists in your client.** The quote is correct per user, per venue, at the moment it is issued, and it stays correct when a venue changes its terms. A static copy will not.

## Reading the lists programmatically

If you need the lists themselves — to build a country picker, an availability table, or a support tool — `GET /app/venue-geo-policy` returns the same data this page describes, live:

```bash theme={null}
curl https://api.agg.market/app/venue-geo-policy \
  -H "x-app-id: $AGG_APP_ID"
```

```json theme={null}
{
  "venues": [
    { "venue": "kalshi", "blockedCountries": ["AF", "DZ", "AO"] },
    { "venue": "polymarket", "blockedCountries": ["AU", "BE", "BI"] }
  ]
}
```

Or from the SDK:

```ts theme={null}
const { venues } = await agg.getVenueGeoPolicy();
```

A venue with an empty `blockedCountries` has no country restriction. A venue absent from the response is not fillable through AGG at all.

<Warning>
  This is the **raw venue policy, not per-user eligibility**. It does not account for the country we resolve for the user, your app's disabled venues, or the fail-closed rule when the country is unknown. Do not gate a fill on it — a user can be blocked while every list here says otherwise. `warnings` on the quote remains the only per-user answer.
</Warning>
