SportApi
API Documentation

Integração de Sistema para Cálculo de Apostas e Cupons

Este sistema foi desenvolvido para operadores de apostas esportivas, casas de apostas e desenvolvedores de plataformas que desejam automatizar o processo de cálculo de apostas e gerenciamento de cupons. Permite a rápida integração dos cálculos de resultados, fornecendo dados precisos sobre o status dos cupons (vitória, derrota ou reembolso), e simplifica a interação entre o servidor do operador e o sistema de cálculo.

POST /v1/coupon json
{
  "coupon_id": "A7F3K9",
  "type": "express",
  "events": [
    { "id": 88213, "pick": "1", "odds": 2.10, "result": "win" },
    { "id": 88150, "pick": "over_2_5", "odds": 1.80, "result": "win" }
  ],
  "total_odds": 3.78, "status": "won"
}

Como o sistema funciona?

Como Funciona o Sistema de Cálculo de Odds e Resultados?

A integração com o nosso sistema de cálculo de apostas e cupons consiste em três etapas fundamentais:

Passo 1: Autorização

Na primeira etapa, você precisa se autorizar no sistema. Isso é feito realizando uma requisição POST com as credenciais do usuário (login e senha). A autorização bem-sucedida retorna uma sessão representada como um cookie, que deve ser salvo. Esses cookies são necessários para todas as requisições subsequentes, pois são usados para identificar a sessão do usuário no sistema.

Passo 2: Envio de uma Aposta

Nesta etapa, um código de aposta é enviado ao nosso sistema contendo:

  • Match ID, correspondente ao evento.
  • Código da aposta, descrevendo o resultado selecionado (por exemplo, vitória da equipe, handicap ou total).
  • Odds da aposta, válidas no momento do envio.

Ao enviar os dados, os cookies obtidos durante a autorização devem ser incluídos. Isso garante a identificação adequada do usuário e o processamento da aposta.

Passo 3: Recebimento dos Resultados

Após o cálculo dos resultados ou cupons, nosso sistema envia requisições POST para o remote_host especificado. Esta requisição inclui:

  • Status do cupom (vitória, derrota ou reembolso).
  • Status de todos os resultados incluídos no cupom.

Os resultados são enviados assim que o resultado é determinado. Por exemplo:

  • Se a aposta for feita em um resultado intermediário (por exemplo, handicap 2.5, e o terceiro gol é marcado), o cálculo pode ser realizado durante a partida.
  • Se a aposta for no resultado final (por exemplo, vitória da equipe), as informações de status serão enviadas imediatamente após o término da partida.

Agora revise cada etapa individualmente. Descrevemos as requisições, parâmetros e respostas da API em detalhes.

Autorização do usuário

O login, a senha e o host para envio de requisições podem ser obtidos com o gerente.

URL da Requisição:

{APIHOST}/WebServices/BCService.asmx/LogIn/

Tipo de Envio de Dados: POST

Dados Enviados:

ParâmetroDescrição
loginLogin do usuário
passwordSenha do usuário

Importante!

  • Durante a autorização, a resposta inclui cookies. Esses cookies devem ser salvos e enviados nas requisições subsequentes.

Recomendações para uma integração mais simples:

  • Certifique-se de que o campo login seja passado como uma string.
  • Verifique o salvamento e o envio correto dos cookies, pois isso afeta a execução das requisições seguintes.
  • Em caso de erro, a requisição retornará um objeto vazio. Certifique-se de tratar esse cenário adequadamente.

Os cookies são válidos por 3 meses. No entanto, eles podem ser redefinidos se o servidor for reiniciado. Portanto, você precisará se reautorizar caso encontre um erro ao salvar um cupom.

Resposta de erro json
"errorCode":1,
"fullErrorCode":99,
"errorMessage":"Invalid access level"

Exemplo de envio de requisição (use os dados fornecidos pelo gerente):

Exemplo de Resposta:

Bem-sucedida:

{"d":{"UserId":"36557"}}

Malsucedida:

{"d":{}}

Descrição dos Campos de Resposta:

CampoDescrição
UserIdIdentificador exclusivo do usuário
dObjeto raiz da resposta

Recomendações Gerais:

  • Antes da primeira requisição, certifique-se de que o usuário inseriu as credenciais corretas.
  • Configure o tratamento de erros para exibir ao usuário os motivos da falha de autorização (por exemplo, login ou senha incorretos).
  • Registre tanto as tentativas bem-sucedidas quanto as malsucedidas para fins de análise e monitoramento.

Os cookies devem ser salvos e enviados com as requisições subsequentes.

POST {APIHOST}/WebServices/BCService.asmx/LogIn/ python
import requests
import json

url = "https://example-domain-calc.com/WebServices/BCService.asmx/LogIn/"

payload = json.dumps({
  "login": "[email protected]",
  "password": "demo-password"
})
headers = {
  'Content-Type': 'application/json'
}

print(response.text)

Método de envio de aposta ou cupom

Para enviar uma aposta, você deve usar os cookies obtidos durante a etapa de autorização. Esses dados são necessários para identificar sua sessão e processar as requisições.

URL da Requisição:

{HOST_API}/bet/place/
Exemplo de payload do corpo json
{
    "data":{
        "list_bets":[
            "line#586464528|17|954|2.5#4.27",  "live#586464528|87|4|0#1.12"
        ],
        "realAmount":"2",
        "currency":"USD",
        "lang":"en",
        "remote_host":"https://mysites.com",
        "rate_mode":"reject"
    }
}

Parâmetros remote_host e rate_mode

Descrição dos Campos

ParâmetroDescrição
list_betsCódigo da aposta e odds. Formato: "event_type#match_ID|bet_code#odds". Exemplo: "live#579216393|1|1|0#2.1"
realAmountValor da aposta. Deve ser passado como uma string, por exemplo, "150".
currencyMoeda do cupom.
langO idioma no qual a aposta e o cupom são salvos. Por exemplo: "pt", "en" ou "ru".
remote_hostA URL para onde enviar os resultados do cálculo do cupom. Não inclua uma barra no final.
rate_modeOpção para lidar com a aceitação do cupom quando as odds mudam: "reject" (rejeitar em caso de alterações) ou "accept" (aceitar independentemente das alterações). Padrão: "accept".

Nota: Certifique-se de que os parâmetros sejam passados no formato correto. Por exemplo, list_bets deve ser um array, mesmo que haja apenas uma aposta.

Não validamos o valor da aposta. Você pode enviar o valor real da aposta ou qualquer valor arbitrário. Isso serve para garantir a confidencialidade de seus dados financeiros. Nossa tarefa é fornecer os resultados do cálculo. Você é responsável por creditar os ganhos aos seus jogadores.

Parâmetros Obrigatórios para Enviar uma Aposta:

  • list_bets — contém informações sobre a aposta e a partida correspondente.
  • remote_host — a URL para a qual enviaremos os resultados do cálculo do cupom ou resultado.
  • rate_mode — determina como o sistema lida com as alterações de odds.

Outros parâmetros também devem ser enviados, mas são opcionais e podem ser usados para sua conveniência.

Descrição do Parâmetro remote_host

remote_host é o endereço do seu servidor para onde enviamos as requisições com os resultados dos cálculos das apostas. Este host deve ser configurado para aceitar requisições do nosso servidor. Abaixo estão exemplos de valores possíveis e detalhes específicos sobre o funcionamento desse parâmetro.

Você pode especificar várias opções para o remote_host:

  • Host simples: https://meusite.com
  • Host com porta: https://meusite.com:78665
  • Host com caminhos adicionais: https://meusite.com/request/sportapi/sender
  • Host com parâmetros: https://meusite.com/request.php?action=webhook

Importante: Ao enviar uma requisição, nosso sistema anexa automaticamente a string /api/bet/result ao remote_host especificado. Assim, o endereço final para o recebimento de requisições é formado como remote_host + "/api/bet/result". Certifique-se de que seu servidor está configurado para receber dados neste caminho.

Exemplos:
  • Se você especificar remote_host = https://meusite.com, enviaremos as requisições para: https://meusite.com/api/bet/result.
  • Se você especificar remote_host = https://meusite.com/request.php?action=webhook, enviaremos as requisições para: https://meusite.com/request.php?action=webhook/api/bet/result.

Detalhes Técnicos:

  • As requisições são enviadas usando o método POST.
  • Seu servidor deve estar pronto para aceitar os dados JSON que enviamos.
  • Seu servidor deve retornar um código de status 200 após o recebimento bem-sucedido dos dados.

Certifique-se de que seu servidor processa corretamente o caminho e as requisições especificadas. A próxima seção fornece um exemplo da estrutura de dados enviada pelo nosso servidor.

Descrição do Parâmetro rate_mode

O parâmetro rate_mode define o comportamento do sistema quando as odds mudam. Pode assumir dois valores:

  • accept: Neste modo, o cupom será aceito com as odds atuais, mesmo que tenham mudado. Por exemplo, um jogador adiciona uma aposta "Vitória do Manchester" com odds de 2.02. Enquanto ele pressiona o botão "Fazer Aposta", as odds mudam para 1.37 ou 2.78. No modo accept, o sistema salva o cupom com as novas odds sem notificar seu sistema.
  • reject: Neste modo, o sistema rejeita o cupom se as odds mudarem. A resposta incluirá um erro notificando que as odds foram alteradas.

Escolha o modo que melhor se adapta aos seus processos de negócios e oferece praticidade aos seus usuários.

Recomendações Importantes

  1. Formatação JSON: Certifique-se de que os dados estejam devidamente serializados no formato JSON antes do envio.
  2. Cookies: Inclua os cookies obtidos durante a autorização para identificar com sucesso a sessão do usuário.
  3. Tratamento de Erros: Trate as respostas do servidor, especialmente os casos em que errorCode = 1 é retornado.
  4. Testes: Realize testes em todas as etapas da integração, incluindo o envio de apostas simples e múltiplas.

Campos de resposta e descrição de erros

Operação bem-sucedida

Operação bem-sucedida json
{
  "errorCode": 0,
  "fullErrorCode": 0,
  "errorMessage": ""
}

Códigos de erro

Se a aposta for aceita com sucesso, o servidor retornará uma resposta de sucesso (veja acima). O cupom foi aceito e não há erros.

Se ocorrer um erro, o servidor retornará uma resposta de erro geral (veja acima). Um dos erros possíveis ocorreu. Abaixo estão os códigos de erro e as mensagens.

Códigos de Erro Possíveis e Descrições

Código de Erro (fullErrorCode)Mensagem de Erro (errorMessage)Descrição
1error_wrong_bet_dataDados de aposta incorretos. Verifique o parâmetro list_bets e outros campos obrigatórios.
1error_block_bet_dataA aposta está temporariamente bloqueada e não pode ser aceita.
1error_repeat_bet_dataNão são permitidas apostas duplicadas no mesmo resultado de uma partida.
2label_change_rateAs odds mudaram. O cupom foi rejeitado devido a uma divergência entre as odds especificadas e as atuais.
3error_exist_betO resultado da aposta especificado não existe mais. Verifique a precisão dos dados.
99Nível de acesso inválidoO usuário não tem permissão para realizar esta operação. O mais provável é que seja necessária reautorização, os cookies estejam ausentes ou a conta esteja bloqueada.
99Erro ao existir host remoto!O parâmetro remote_host está incorreto ou ausente. Verifique as configurações do seu servidor.

Recomendações para Tratamento de Erros

  • Validação de Dados de Entrada: Certifique-se de que todos os parâmetros necessários sejam fornecidos corretamente. Verifique o formato de list_bets e a presença de todos os campos obrigatórios.
  • Trabalho com Odds: Se o modo rate_mode = reject for usado, trate os erros relacionados a mudanças de odds (label_change_rate).
  • Configuração do Servidor: Certifique-se de que seu servidor está especificado corretamente no parâmetro remote_host.
  • Registro de Erros: Registre todos os erros (errorCode, fullErrorCode, errorMessage) para simplificar a depuração e a interação com o suporte.
  • Ações para Erros Críticos: Em caso de erros de nível 99, verifique as permissões de acesso e as configurações de API do seu lado.
Erro geral json
{
  "errorCode": 1,
  "fullErrorCode": [ERROR_CODE],
  "errorMessage": "[ERROR_DESCRIPTION]"
}

Recomendações para tratamento de erros quando as odds mudaram

Recomendações para tratamento de erros quando as odds mudaram json
{
    "errorCode":1,
    "fullErrorCode":2,
    "errorMessage":"Odds have changed",
    "rate_mode":"reject",
    "changed":[
        {
            "gid":"586464528", // match ID
            "rb":2.15, // odds in your coupon
            "rg":"2.27", // current real odds
            "rt":0 // status of change. 0 - decreased, 1 - increased
        }
    ]
}

Envio dos resultados do cálculo

Quando uma aposta é adicionada ao nosso sistema e calculada, enviamos os resultados do cupom para o seu servidor. Eles podem incluir:

  • Resultados do cupom (cálculo completo).
  • Status dos cupons (vitória, derrota, reembolso).

As requisições são enviadas para o endereço especificado no parâmetro remote_host. A string /api/bet/result é anexada automaticamente a este endereço. Certifique-se de que seu servidor está configurado para receber dados neste caminho.

Exemplo de Endereço Final:

Se você especificou: remote_host = https://meusite.com, enviaremos os dados para: https://meusite.com/api/bet/result.

Exemplo de dados para um único cupom json
{
    "remote_host": "https://mysite.com",
    "Heads": [{
        "KeyHead": {
            "Id": "344143",
            "BarCode": "x9c52i8411"
        },
        "Status": 2,
        "ExtStatus": 0,
        "AmountOut": 11130,
        "DateReceive": "1597075782"
    }]
}

Exemplo de dados para múltiplos cupons

Descrição dos Campos

CampoDescrição
remote_hostO endereço do seu servidor para onde os dados são enviados.
IdIdentificador exclusivo da aposta no nosso sistema. Ignorado na maioria dos casos.
BarCodeNúmero exclusivo do cupom.
StatusStatus atual do cupom. Valores possíveis: 2 — vitória, 4 — derrota.
ExtStatusStatus adicional em caso de reembolso: 0 — sem alterações, 1 — um ou mais resultados foram calculados com coeficiente alterado.
AmountOutValor do ganho (se o cupom venceu).
DateReceiveA hora e a data em que o cupom foi calculado.

Como interpretar Status e ExtStatus

  • Status = 2 e ExtStatus = 0: O cupom ganhou.
  • Status = 4 e ExtStatus = 0: O cupom perdeu.
  • Status = 2 e ExtStatus = 1: Reembolso. O cupom foi calculado com coeficiente 1.

Pontos Importantes para Integração

  • Tratamento de ExtStatus = 1: Isso pode ocorrer se uma partida foi cancelada ou encerrada prematuramente. Nesses casos, todas as apostas são calculadas com coeficiente 1.
  • Requisitos Técnicos: As requisições são enviadas usando o método POST. Seu servidor deve estar pronto para aceitar dados JSON no caminho remote_host + /api/bet/result.
Exemplo de dados para múltiplos cupons json
{
    "remote_host": "https://mysite.com",
    "Heads": [{
        "KeyHead": {
            "Id": "313",
            "BarCode": "75vz48t935"
        },
        "Status": 2,
        "ExtStatus": 0,
        "AmountOut": 19.85,
        "DateReceive": "1592937968"
    }, {
        "KeyHead": {
            "Id": "312",
            "BarCode": "77i0r6e15t"
        },
        "Status": 2,
        "ExtStatus": 0,
        "AmountOut": 12.51,
        "DateReceive": "1592937280"
    }]
}