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 BasePermalink for this section

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

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

Especificação OpenAPIPermalink for this section

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çãoPermalink for this section

  • 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 EndpointsPermalink for this section

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

OddsPermalink for this section

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

EventosPermalink for this section

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

OportunidadesPermalink for this section

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

SplitsPermalink for this section

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

StreamingPermalink for this section

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

ContaPermalink for this section

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)Permalink for this section

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-

EnterprisePermalink for this section

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

SaúdePermalink for this section

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

Formato da RespostaPermalink for this section

Duas formas de nível superior — ambas colocam data primeiro e updated_at por último, com um bloco pagination opcional no meio. Não existe campo success; o código de status HTTP é a fonte da verdade. Consulte Convenções de Resposta para o conjunto completo de regras.

Resposta de lista paginadaPermalink for this section

{ "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, "count": 1, "total": 3095, "has_more": true, "next_offset": 50, "next_cursor": "eyJlIjoiMzM0ODMxNTMiLCJiIjoiZHJhZnRraW5ncyIsIm0iOiJtb25leWxpbmUiLCJpIjoiZHJhZnRraW5nc18zMzQ4MzE1M19tb25leWxpbmVfUEhJIn0" }, "updated_at": "2026-01-26T02:10:37.846Z" }
CampoDescrição
dataArray de resultados
pagination.limitMáximo de itens por página (padrão: 50, máximo: 200)
pagination.offsetOffset atual nos resultados
pagination.countNúmero de itens retornados nesta resposta
pagination.totalTotal de itens correspondentes em todas as páginas. Omitido em endpoints que não conseguem calculá-lo de forma barata (por exemplo, /odds).
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. Prefira next_cursor em 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. Presente apenas em endpoints com suporte a cursor (/odds, /odds/delta).
updated_atTimestamp ISO 8601 indicando quando os dados foram atualizados pela última vez

Resposta de Recurso ÚnicoPermalink for this section

Usada para recursos únicos (/account, /events/:eventId) e endpoints de referência não paginados. Sem bloco pagination.

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

Envelope de ErroPermalink for this section

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ãoPermalink for this section

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 TiersPermalink for this section

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.

FiltragemPermalink for this section

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 FiltroPermalink for this section

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.

ExemplosPermalink for this section

# 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 OddsPermalink for this section

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 ErroPermalink for this section

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 HTTPPermalink for this section

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 WebSocketPermalink for this section

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