Skip to Content
Referência da APIVisão Geral

Visão Geral da Referência da API

Referência completa para a API REST SharpAPI v1. Todos os endpoints retornam JSON e seguem convenções consistentes para autenticação, filtragem, paginação e tratamento de erros.

URL Base

https://api.sharpapi.io/api/v1

Sempre use api.sharpapi.io como URL base, não sharpapi.io.

Especificação OpenAPI

A especificação completa OpenAPI 3.1 está disponível para importação em ferramentas como Postman, Insomnia ou geradores de código:

Esta especificação cobre todos os endpoints, esquemas de requisição/resposta e requisitos de autenticação.

Formato da Requisição

  • Todas as requisições usam HTTPS
  • Autenticação via cabeçalho X-API-Key, cabeçalho Authorization: Bearer ou parâmetro de consulta api_key
  • Corpos de requisição (quando aplicável) usam JSON com Content-Type: application/json
  • Todos os nomes de campo são snake_case

Resumo dos Endpoints

A SharpAPI expõe 35 rotas em 7 namespaces, além de endpoints de referência e de saúde.

Odds

MétodoCaminhoAuthTier Mínimo
GET/api/v1/oddsSimFree
GET/api/v1/odds/deltaSimFree
GET/api/v1/odds/bestSimFree
GET/api/v1/odds/comparisonSimFree
POST/api/v1/odds/batchSimFree

Eventos

MétodoCaminhoAuthTier Mínimo
GET/api/v1/eventsSimFree
GET/api/v1/events/:eventIdSimFree
GET/api/v1/events/:eventId/oddsSimFree
GET/api/v1/events/:eventId/marketsSimFree

Oportunidades

MétodoCaminhoAuthTier Mínimo
GET/api/v1/opportunities/evSimPro
GET/api/v1/opportunities/arbitrageSimHobby
GET/api/v1/opportunities/middlesSimPro

Splits

MétodoCaminhoAuthTier Mínimo
GET/api/v1/splitsSimPro
GET/api/v1/splits/historySimPro

Streaming

MétodoCaminhoAuthTier Mínimo
GET/api/v1/streamSimAdd-on

Conta

MétodoCaminhoAuthTier Mínimo
GET/api/v1/accountSimFree
GET/api/v1/account/usageSimFree
GET/api/v1/account/keysSimFree
POST/api/v1/account/keysSimFree
DELETE/api/v1/account/keys/:keyIdSimFree
POST/api/v1/account/keys/:keyId/rotateSimFree

Dados de Referência (Públicos)

MétodoCaminhoAuthTier Mínimo
GET/api/v1/sportsNão-
GET/api/v1/leaguesNão-
GET/api/v1/sportsbooksNão-
GET/api/v1/marketsNão-
GET/api/v1/teamsNão-

Enterprise

MétodoCaminhoAuthTier Mínimo
GET/api/v1/futuresSimEnterprise
GET/api/v1/futures/oddsSimEnterprise

Saúde

MétodoCaminhoAuthTier Mínimo
GET/api/v1/healthNão-

Formato da Resposta

Envelope de Sucesso

Todas as respostas bem-sucedidas encapsulam os dados em um envelope consistente:

{ "success": true, "data": [ { "id": "draftkings_33483153_moneyline_PHO", "sportsbook": "draftkings", "sport": "basketball", "home_team": "PHI 76ers", "away_team": "PHO Suns", "market_type": "moneyline", "selection": "PHO Suns", "odds_american": -150, "odds_decimal": 1.667, "odds_probability": 0.60, "is_live": false } ], "pagination": { "limit": 50, "offset": 0, "has_more": true, "next_offset": 50, "next_cursor": "eyJlIjoiMzM0ODMxNTMiLCJiIjoiZHJhZnRraW5ncyIsIm0iOiJtb25leWxpbmUiLCJpIjoiZHJhZnRraW5nc18zMzQ4MzE1M19tb25leWxpbmVfUEhJIn0" }, "meta": { "count": 1, "total": 3095, "pagination": { "limit": 50, "offset": 0, "has_more": true, "next_offset": 50, "next_cursor": "eyJlIjoiMzM0ODMxNTMiLCJiIjoiZHJhZnRraW5ncyIsIm0iOiJtb25leWxpbmUiLCJpIjoiZHJhZnRraW5nc18zMzQ4MzE1M19tb25leWxpbmVfUEhJIn0" }, "updated_at": "2026-01-26T02:10:37.846Z", "filters": { "sportsbook": "draftkings", "league": "nba" } } }
CampoDescrição
successtrue para todas as respostas bem-sucedidas
dataArray de resultados (ou objeto único para endpoints de detalhe)
pagination.limitMáximo de itens por página (padrão: 50, máximo: 200)
pagination.offsetOffset atual nos resultados
pagination.has_moreIndica se existem mais resultados além desta página
pagination.next_offsetValor de offset a ser usado para a próxima página (legado — use next_cursor para endpoints de dados em tempo real)
pagination.next_cursorCursor opaco para a próxima página. Passe como ?cursor= — estável contra alterações de dados em tempo real. Recomendado para varreduras de múltiplas páginas.
meta.countNúmero de itens retornados nesta resposta
meta.totalTotal de itens correspondentes em todas as páginas
meta.paginationO mesmo que o pagination de nível superior (incluído para compatibilidade retroativa)
meta.updated_atTimestamp ISO 8601 indicando quando os dados foram atualizados pela última vez
meta.filtersEco dos filtros aplicados a esta requisição

Resposta de Recurso Único

{ "success": true, "data": { "id": "evt_abc123", "sport": "nba", "home_team": "PHI 76ers", "away_team": "PHO Suns", "start_time": "2026-01-26T19:00:00Z" }, "meta": { "updated_at": "2026-01-26T02:10:37.846Z" } }

Envelope de Erro

Todos os erros seguem um formato consistente:

{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Upgrade your plan or wait 45 seconds.", "docs": "https://docs.sharpapi.io/en/authentication#rate-limits" } }
CampoDescrição
error.codeCódigo de erro legível por máquina
error.messageDescrição legível por humanos
error.docsLink para a documentação relevante (opcional — incluído em erros de autenticação, tier, rate limit e streaming)
error.correct_endpointO endpoint correto a ser usado (opcional — incluído em erros unknown_endpoint quando a API reconhece o caminho como uma rota errada conhecida)
error.retry_afterSegundos até que uma nova tentativa seja permitida (opcional — incluído em erros rate_limited)

Cabeçalhos de Resposta Padrão

Toda resposta da API inclui estes cabeçalhos:

CabeçalhoExemploDescrição
X-RateLimit-Limit300Máximo de requisições por minuto para o seu tier
X-RateLimit-Remaining299Requisições restantes na janela atual
X-RateLimit-Reset1705804800Timestamp Unix de quando o rate limit é redefinido
X-Data-Delay0Atraso dos dados em segundos (60 para Free, 0 para tiers pagos)
X-Request-Idreq_a1b2c3d4Identificador único da requisição para depuração e suporte

Inclua o valor de X-Request-Id ao entrar em contato com o suporte sobre uma requisição específica.

Comparação de Tiers

RecursoFreeHobbyProSharpEnterprise
Sportsbooks2 (DK, FD)515Todos os 32Todos os 32
Atraso de Dados60s0s0s0s0s
Requisições/min121203001.000Personalizado
PinnacleNãoNãoSimSimSim
EV / Arb / MiddlesNãoNãoSimSimSim
StreamingNãoAdd-onAdd-onAdd-onIncluído
Máx. eventos em batch10105050100

Streaming requer o add-on de WebSocket (US$ 99/mês) em tiers pagos. O Enterprise inclui streaming sem custo adicional.

Filtragem

Todos os endpoints de listagem suportam filtragem via parâmetros de consulta. Os filtros usam nomes de parâmetros no singular e aceitam valores separados por vírgula para seleção múltipla.

Parâmetros de Filtro

ParâmetroTipoExemploDescrição
sportsbookstringdraftkings,fanduelFiltrar por um ou mais sportsbooks
sportstringbasketball,footballFiltrar por esporte
leaguestringnba,nflFiltrar por liga
marketstringmoneyline,spreadFiltrar por tipo de mercado
eventstringevt_abc123Filtrar por ID do evento
livebooleantrueApenas eventos ao vivo/em andamento
sortstring-odds_americanCampo de ordenação com prefixo - opcional para ordem decrescente
fieldsstringid,sportsbook,odds_americanCampos separados por vírgula a serem incluídos na resposta
min_oddsnumber-110Filtro de odds americanas mínimas
max_oddsnumber200Filtro de odds americanas máximas
group_bystringeventAgrupar resultados por campo
limitnumber25Resultados por página (padrão: 50, máximo: 200)
offsetnumber50Offset de paginação. Pode produzir linhas duplicadas em endpoints de tempo real quando os dados mudam entre requisições.
cursorstringCursor opaco do next_cursor. Recomendado para varreduras de múltiplas páginas sobre dados em tempo real — elimina o desvio de offset.

Exemplos

# Múltiplos sportsbooks (separados por vírgula) curl "https://api.sharpapi.io/api/v1/odds?sportsbook=draftkings,fanduel" \ -H "X-API-Key: YOUR_KEY" # Combinar filtros curl "https://api.sharpapi.io/api/v1/odds?league=nba,nhl&sportsbook=pinnacle&live=true" \ -H "X-API-Key: YOUR_KEY" # Paginar pelos resultados curl "https://api.sharpapi.io/api/v1/odds?limit=25&offset=50" \ -H "X-API-Key: YOUR_KEY"

Os nomes dos parâmetros são sempre no singular (sportsbook, não sportsbooks). Use vírgulas para passar múltiplos valores: sportsbook=draftkings,fanduel.

Formatos de Odds

Todas as odds são retornadas como campos planos em cada objeto de odds:

{ "odds_american": -110, "odds_decimal": 1.909, "odds_probability": 0.5238 }
CampoExemploDescrição
odds_american-110, +150Formato padrão dos EUA
odds_decimal1.909, 2.50Formato multiplicador
odds_probability0.5238Probabilidade implícita (0 a 1)

Códigos de Erro

A lista canônica de códigos de erro emitidos pela API. A string em error.code é o contrato estável — verifique-a em vez do texto em message.

Códigos de erro HTTP

Emitidos em respostas REST.

CódigoStatus HTTPDescrição
missing_api_key401Nenhuma API key fornecida via X-API-Key, ?api_key= ou Authorization: Bearer
invalid_api_key401API key foi fornecida, mas não é reconhecida
expired_api_key401API key expirou — gere uma nova no painel
disabled_api_key401API key está desativada, geralmente porque a assinatura expirou
unauthorized401Autenticação por Bearer token falhou em endpoints de admin ou /api/v1/monitoring/* (distinto de invalid_api_key)
invalid_token401Falha na verificação do token de sessão Clerk (endpoints exclusivos do painel)
tier_restricted403Endpoint ou recurso não está disponível no seu tier — a resposta inclui tier e required_tier
not_found404Recurso não encontrado
method_not_allowed405Método HTTP não é suportado nesta rota
gone410Evento terminou ou expirou — use /api/v1/events para eventos atuais
unknown_endpoint410Caminho de API errado — a resposta inclui correct_endpoint com a rota correta (ex.: /api/v1/arbitrage/api/v1/opportunities/arbitrage)
validation_error400Corpo da requisição ou parâmetros de consulta falharam na validação
offset_too_large400offset excede o máximo por endpoint (atualmente 500 em /odds e /odds/delta). Mude para paginação baseada em cursor ou avance since
rate_limited429Limite de requisições por minuto excedido — a resposta inclui retry_after
concurrent_request_cap429Muitas requisições em andamento para o seu tier — reduza o paralelismo ou faça upgrade
too_many_streams429Máximo de streams SSE ou WebSocket concorrentes excedido para esta API key
backpressureEmitido como um SSE event: error (não como um status HTTP) quando o cliente não consegue acompanhar; o servidor então fecha o stream
upstream_error502Problema temporário ao acessar um sportsbook upstream ou provedor de autenticação
service_unavailable503Um serviço necessário (ex.: gerenciamento de chaves) não está configurado ou está offline
not_ready503Um armazenamento de apoio do qual o endpoint depende (ex.: ClickHouse, captura de closing line) ainda não está pronto para atender à requisição. Tente novamente com backoff
internal_error500Erro inesperado do servidor — tente novamente com backoff e contate o suporte com o X-Request-Id se persistir

bad_request e invalid_request estão obsoletos — ambos foram colapsados em validation_error. Clientes que correspondem às strings antigas devem adicionar validation_error ao seu mapa de erros.

Códigos de erro em frames WebSocket

Emitidos apenas dentro de frames {"type": "error", "code": "..."} em uma conexão WebSocket aberta. Eles descrevem erros do protocolo do cliente e não correspondem a um status HTTP.

CódigoSignificado
invalid_messageO frame não pôde ser analisado como JSON ou não corresponde ao formato esperado
unknown_message_typeO campo type não é um dos valores documentados (auth, subscribe, filter, refresh_token, ping)
missing_tokenFrame auth ou refresh_token não incluiu um campo token
missing_channelsFrame subscribe não incluiu um array channels não vazio
not_authenticatedO frame requer uma sessão autenticada (enviou subscribe, filter ou refresh_token antes de auth)
already_authenticatedO cliente enviou um segundo frame auth após o primeiro ter sido bem-sucedido
Last updated on