GammaFlip.io Discovery API
The Discovery API from GammaFlip.io — 4 operation(s) for discovery.
The Discovery API from GammaFlip.io — 4 operation(s) for discovery.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/gammaflip-io:gammaflip-io-discovery-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: GammaFlip GEX Discovery API
version: 1.0.0
description: 'Programmatic access to Gamma Exposure (GEX) data for crypto options
(Bybit, Deribit, OKX, Derive, Binance) and US options (the `tradfi` exchange).
API access is a plan entitlement (`api_access`). The trial includes it
(50 requests/day); other plans with API access get 500 requests/day.
Only `/gex/...`, `/levels/...` and the `/history/...` query endpoints count
against the quota; `/exchanges`, `/coins`, `/expirations/...`, `/me` and
`/history/coverage` are free. History file downloads use a separate daily
bucket of file credits (trial 20, other plans 200). A `429` carries no
`Retry-After` header: use `X-RateLimit-Reset`, `X-History-Files-Reset` or `/me`.
All GEX values are USD per 1% move of the underlying. Field definitions:
https://docs.gammaflip.io/data-dictionary'
contact:
name: GammaFlip Support
email: admin@gammaflip.io
url: https://gammaflip.io
servers:
- url: https://api.gammaflip.io/api/v1
description: Production
security:
- ApiKeyAuth: []
tags:
- name: Discovery
paths:
/exchanges:
get:
operationId: listExchanges
summary: List available exchanges
description: 'Returns the exchanges currently available, plus the virtual `all` aggregator and
the same exchanges grouped by market. **Free**: not counted against the quota.'
tags:
- Discovery
responses:
'200':
description: Exchange list
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
type: object
properties:
available:
type: array
items:
type: string
example:
- bybit
- deribit
- okx
- derive
- binance
- tradfi
virtual:
type: array
items:
type: string
example:
- all
markets:
$ref: '#/components/schemas/Markets'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/coins:
get:
operationId: listCoins
summary: List available coins
description: 'Returns the union of symbols across all exchanges (crypto coins and TradFi tickers),
plus the same list split by market. **Free**: not counted against the quota.'
tags:
- Discovery
responses:
'200':
description: Coin list
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
type: object
properties:
coins:
type: array
items:
type: string
example:
- BTC
- ETH
- QQQ
- SOL
- SPX
markets:
$ref: '#/components/schemas/Markets'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/me:
get:
operationId: getMe
summary: Your plan, markets and quota
description: 'Returns your tier, the markets your plan includes, `api_access`, and today''s quota
for both buckets (`requests` and `history_files`).
**Free**: not counted against the quota. Use it to find out when the quota resets
(a 429 carries no `Retry-After`).'
tags:
- Discovery
responses:
'200':
description: Account info
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
type: object
properties:
tier:
type: string
example: trial
markets:
type: array
items:
type: string
example:
- crypto
- tradfi
api_access:
type: boolean
quota:
type: object
properties:
requests:
type: object
properties:
limit:
type: integer
description: Daily limit; 0 means unlimited.
example: 50
used:
type:
- integer
- 'null'
example: 13
remaining:
type:
- integer
- 'null'
example: 37
reset:
type: string
format: date-time
example: '2026-10-07T00:00:00+00:00'
history_files:
type: object
description: 'Separate daily bucket for history file downloads
(trial 20, other plans with API access 200, admin unlimited).
'
properties:
limit:
type: integer
description: Daily file credits; 0 means unlimited.
example: 20
used:
type:
- integer
- 'null'
example: 2
remaining:
type:
- integer
- 'null'
example: 18
reset:
type: string
format: date-time
example: '2026-10-07T00:00:00+00:00'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/expirations/{exchange}/{coin}:
get:
operationId: listExpirations
summary: List expirations
description: 'Returns sorted, non-expired option expirations for a given exchange and coin.
`expirations` keeps the `DDMMMYY` codes; `expirations_detail` adds the ISO date,
days to the cutoff, the cutoff instant and a 0DTE flag. The cutoff is 08:00 UTC for
crypto and 16:00 US Eastern for TradFi. **Free**: not counted against the quota.'
tags:
- Discovery
parameters:
- $ref: '#/components/parameters/Exchange'
- $ref: '#/components/parameters/Coin'
responses:
'200':
description: Expiration list
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
data:
type: object
properties:
expirations:
type: array
items:
type: string
example:
- 25APR26
- 02MAY26
- 09MAY26
- 27JUN26
expirations_detail:
type: array
items:
$ref: '#/components/schemas/ExpirationDetail'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'503':
description: TradFi data temporarily unavailable (`market_unavailable`)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
RateLimit:
type: object
properties:
limit:
type: integer
example: 500
remaining:
type: integer
example: 487
reset:
type: string
format: date-time
example: '2026-04-15T00:00:00+00:00'
Envelope:
type: object
required:
- data
- meta
properties:
data:
type: object
description: The response payload.
meta:
type: object
properties:
timestamp:
type: string
format: date-time
description: When the response was generated.
example: '2026-04-14T10:00:00+00:00'
exchange:
type: string
example: all
coin:
type: string
example: BTC
rate_limit:
$ref: '#/components/schemas/RateLimit'
Markets:
type: object
properties:
crypto:
type: array
items:
type: string
tradfi:
type: array
items:
type: string
ExpirationDetail:
type: object
properties:
code:
type: string
example: 17OCT26
iso:
type:
- string
- 'null'
example: '2026-10-17'
dte:
type:
- number
- 'null'
description: Days to the cutoff (two decimals).
example: 11.2
cutoff_utc:
type:
- string
- 'null'
format: date-time
example: '2026-10-17T20:00:00Z'
is_0dte:
type: boolean
Error:
type: object
description: 'Standard error body. `error` is a stable slug safe to branch on; `message` is human-readable prose that may change and must not be parsed. Errors are never wrapped in the data/meta envelope used by successful responses. Some errors add hint fields.
'
required:
- error
- message
properties:
error:
type: string
enum:
- unauthorized
- subscription_required
- market_not_in_plan
- rate_limit_exceeded
- invalid_exchange
- invalid_pair
- invalid_expiration
- invalid_param
- no_data
- unsupported_coin
- market_unavailable
- history_not_available
- range_too_large
- no_snapshot
- no_file
- files_unavailable
- history_files_limit_exceeded
- method_not_allowed
example: invalid_exchange
message:
type: string
example: Exchange 'kraken' is not available.
current_tier:
type: string
description: With `subscription_required` and `market_not_in_plan`.
example: trial
valid_exchanges:
type: array
items:
type: string
description: With `invalid_exchange`, `invalid_pair` and `history_not_available`.
example:
- deribit
- bybit
- okx
- derive
- binance
- combined
nearest_expirations:
type: array
items:
type: string
description: With `invalid_expiration`; up to five ISO dates closest to the request (the earliest five if the value is not a date).
example:
- '2026-10-17'
- '2026-10-19'
valid_values:
type: array
items:
type: string
description: With `invalid_param` for `view`, `granularity`, `file` and `compare`.
example:
- full
- levels
max_value:
type: number
description: With `invalid_param` for `range_pct`.
example: 50
max_window_days:
type: integer
description: With `range_too_large`.
example: 31
nearest_timestamps:
type: array
items:
type: string
format: date-time
description: With `no_snapshot`; up to three capture times closest to `at`.
example:
- '2026-10-05T20:15:00Z'
- '2026-10-05T13:45:00Z'
market:
type: string
description: With `market_not_in_plan`; the market the requested coin belongs to.
enum:
- crypto
- tradfi
example: tradfi
markets_in_plan:
type: array
items:
type: string
description: With `market_not_in_plan`.
supported_crypto:
type: array
items:
type: string
description: With `unsupported_coin`; crypto coins listed by at least one exchange.
example:
- BTC
- ETH
- HYPE
- SOL
- XRP
supported_tradfi:
type: array
items:
type: string
description: With `unsupported_coin`; US tickers we track.
example:
- QQQ
- SPX
- SPY
rate_limit:
allOf:
- $ref: '#/components/schemas/RateLimit'
description: With `rate_limit_exceeded` and `history_files_limit_exceeded`; mirrors the X-RateLimit-* headers.
responses:
Forbidden:
description: '`subscription_required` (the plan has no API access) or `market_not_in_plan`
(the plan does not include the coin''s market).
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: 'Missing or invalid credential, or a credential that does not resolve to a user. Both return `unauthorized`.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: '`invalid_exchange`, `invalid_pair`, `invalid_expiration` or `invalid_param`,
with hint fields (`valid_exchanges`, `nearest_expirations`, `valid_values`, `max_value`).
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
Exchange:
name: exchange
in: path
required: true
description: 'Crypto: `bybit`, `deribit`, `okx`, `derive`, `binance`, `all` / `combined`, or a `+`-joined
subset such as `deribit+derive`. TradFi tickers: `tradfi` (`all` and `combined`
are aliases). Use `/exchanges` for the live list.
'
schema:
type: string
examples:
- all
- deribit+derive
- tradfi
Coin:
name: coin
in: path
required: true
description: Symbol (case-insensitive), for example `BTC` or `QQQ`. Use `/coins` for the list.
schema:
type: string
example: BTC
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: 'API key prefixed with `gex_sk_`. Create one in your
[account dashboard](https://gammaflip.io/account).
'