---
title: "Client country and per-feature availability"
method: GET
path: "/geo"
tags: ["geo"]
---

# Client country and per-feature availability

`GET /geo`

Resolves the client country (Cloudflare header, then IP database) and returns which features are available there. Unknown country fails open: `country: null` with all features `true`. Response must never be shared-cached (`Cache-Control: private, no-store`).

## Response `200`

Resolved country and feature map

- GeoResponseDto
  - `country` object, nullable, required — Resolved client country (ISO 3166-1 alpha-2), or null when unknown
  - `features` GeoFeaturesDto, required
    - `fiatOnramp` boolean, required — Fiat on-ramp available in this region
    - `cards` boolean, required — Cards available in this region
    - `rewards` boolean, required — Rewards available in this region

## Other responses

- `403` — Sanctioned region — body `{ statusCode: 403, code: "REGION_BLOCKED", country }`. Feature-gated endpoints elsewhere return `{ statusCode: 403, code: "FEATURE_REGION_BLOCKED", feature }`.

---

[API](https://skmtc.dev/dre/apis/dre-api.md) · [All operations](https://skmtc.dev/dre/apis/dre-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/dre/dre-api/revisions/5d14beb9482b/schema)
