Uma integração de opções começa pelo vencimento, depois busca strikes, séries negociadas e preços. A brapi separa essas etapas em rotas próprias, então você não recebe uma cadeia inteira quando queria uma lista de datas.
/api/v2/options/expirations descobre as datas. /api/v2/options/chain abre a
cadeia de um vencimento. Histórico e analytics respondem outras perguntas.
Aqui o assunto é escolher a rota certa. Para montar a tabela completa com pandas, leia o tutorial de cadeia de opções com Python.
Qual endpoint usar
| Necessidade | Endpoint | Resposta principal |
|---|---|---|
| Listar vencimentos | /api/v2/options/expirations | expirations[] |
| Listar preços de exercício | /api/v2/options/strikes | strikes[] |
| Consultar a cadeia EOD | /api/v2/options/chain | series[] |
| Baixar preços históricos | /api/v2/options/historical | option.history[] |
| Calcular gregas e IV | /api/v2/options/analytics | analytics[] |
| Baixar gregas e IV históricas | /api/v2/options/analytics/history | option.analytics[] |
O dia a dia usa as três primeiras. As outras atendem gráficos, backtests e análise de risco.
Descobrir vencimentos e strikes
Comece pelo ativo subjacente. O sandbox aceita PETR4, e nenhum exemplo daqui
depende de uma data fixa.
curl "https://brapi.dev/api/v2/options/expirations?underlying=PETR4"A resposta traz underlying, tradedOnly e expirations, com datas em
YYYY-MM-DD e ordem crescente.
Pegue uma das datas retornadas e passe para a rota de strikes.
curl "https://brapi.dev/api/v2/options/strikes?underlying=PETR4&expirationDate=DATA_RETORNADA&side=call"O parâmetro side aceita call ou put. Sem ele, você recebe os dois lados. A
resposta entrega números em strikes, já ordenados.
Consultar a cadeia de opções
A cadeia reúne os contratos negociados do vencimento. Cada item traz symbol,
side, strike, optionStyle e expirationDate, mais OHLCV, ofertas e volume
do pregão usado.
curl "https://brapi.dev/api/v2/options/chain?underlying=PETR4&expirationDate=DATA_RETORNADA"Limite a resposta com side, minStrike e maxStrike. O parâmetro date
escolhe uma data EOD específica.
Uma resposta reduzida tem esta estrutura:
{
"underlying": "PETR4",
"expirationDate": "2026-12-18",
"date": "2026-06-01",
"tradedOnly": true,
"series": [
{
"symbol": "PETRF783",
"side": "call",
"strike": 7.29,
"close": 35.15,
"bid": 35.1,
"ask": 35.2,
"volume": 120
}
]
}Os valores ilustram o formato e não servem como cotação para negociar.
A cadeia não é intradiária
A rota retorna dados EOD. Confira date e lastTradeDate. Uma opção com
pouco negócio pode ter uma referência antiga.
Baixar o histórico de uma série
O histórico exige symbol e expirationDate, que juntos identificam a série.
Quando o mesmo símbolo aparece mais de uma vez no vencimento, acrescente
strike.
curl "https://brapi.dev/api/v2/options/historical?symbol=PETRF783&expirationDate=2026-12-18&startDate=2026-05-01&endDate=2026-06-01&sortOrder=asc"Cada ponto de option.history traz date em timestamp Unix, e pode trazer
open, high, low, average, close, bid, ask, trades, volume e
financialVolume.
Buraco na série é o estado normal aqui. Uma opção fora do dinheiro passa pregões inteiros sem um negócio. Preencher esses dias com zero cria uma queda de 100% que nunca existiu.
O artigo de backtesting de opções com Python trata a série temporal com mais detalhe.
Consultar gregas e volatilidade implícita
Use /api/v2/options/analytics com underlying e expirationDate. Volta uma
análise EOD por série filtrada.
curl "https://brapi.dev/api/v2/options/analytics?underlying=PETR4&expirationDate=DATA_RETORNADA&limit=50"Os campos incluem impliedVolatility, delta, gamma, theta, vega e
rho, mais model, priceSource, underlyingPrice e optionPrice.
Nem toda série permite o cálculo. Sem preço, ou com o modelo sem convergir, os
valores vêm como null. Antes de descartar o item, leia confidence e
nullReason: eles distinguem uma opção sem liquidez de uma falha numérica.
Para acompanhar a IV no tempo, use
/api/v2/options/analytics/history. Essa
rota recebe os mesmos identificadores do histórico de preços.
Exemplo curto em Python
O código abaixo descobre o próximo vencimento e busca a cadeia, sem fixar nenhuma data que vá vencer.
import requests
base = "https://brapi.dev/api/v2/options"
expiration_response = requests.get(
f"{base}/expirations",
params={"underlying": "PETR4"},
timeout=30,
)
expiration_response.raise_for_status()
expiration = expiration_response.json()["expirations"][0]
chain_response = requests.get(
f"{base}/chain",
params={
"underlying": "PETR4",
"expirationDate": expiration,
"minStrike": 25,
"maxStrike": 45,
},
timeout=30,
)
chain_response.raise_for_status()
payload = chain_response.json()
for option in payload["series"]:
print(option["symbol"], option["side"], option["strike"], option["close"])Perguntas frequentes
Como consultar a cadeia de opções da B3 por API?
Liste os vencimentos com /expirations. Envie uma data retornada para
/chain, junto com o ativo em underlying.
A API retorna gregas de opções?
Sim. /analytics retorna a fotografia EOD do vencimento. Use
/analytics/history para acompanhar uma série específica no tempo.
A cadeia mostra todas as opções cadastradas?
Não. A resposta usa séries negociadas, e tradedOnly confirma esse recorte.
Assim contratos sem negócio não entram no meio de preços observados.
