Documentação da API

Integre o sistema OlympusPay ao seu site, bot ou aplicativo de forma simples e rápida.

Base URL: https://olympuspay.cloud/api/v1

Autenticação

Todas as requisições devem incluir sua API Key no cabeçalho (Header).

Authorization: oly_live_seutokenaqui123...
Nunca compartilhe sua chave API com ninguém. Se vazar, gere uma nova no painel.
GET /balance

Consultar Saldo

Retorna o saldo atual disponível na sua conta.

Exemplo de Requisição
curl -X GET https://olympuspay.cloud/api/v1/balance \
  -H "Authorization: oly_live_..."
Resposta (200 OK)
{
  "balance": 150.50
}
POST /pay

Criar Pagamento (Depósito)

Gera um PIX Copia e Cola para seu cliente pagar. O ID retornado aqui é o ID do Banco.

Parâmetros (Body JSON)
CampoTipoDescrição
amount Obrigatório Number Valor do pagamento (Ex: 10.00). Mínimo 5.00.
Exemplo de Body
{
  "amount": 25.00
}
Resposta de Sucesso
{
  "id": 49281,  // <-- ID NUMÉRICO (Use este para checar status)
  "status": "pending",
  "qr_code": "00020126580014br.gov.bcb.pix...",
  "qr_code_base64": "https://api.qrserver.com/..."
}
POST /withdraw

Realizar Saque

Envia dinheiro da sua conta para uma chave PIX externa. O ID retornado é o ID Olympus.

Parâmetros (Body JSON)
CampoTipoDescrição
amount Obrigatório Number Valor a ser enviado (Ex: 50.00).
pix_key Obrigatório String A chave Pix do destinatário.
key_type Opcional String Tipo da chave: cpf, email, phone, random. Se não enviar, tentamos detectar.
Exemplo de Body
{
  "amount": 50.00,
  "pix_key": "[email protected]",
  "key_type": "email"
}
Resposta de Sucesso
{
  "id": "wd_api_1709230021",  // <-- ID OLYMPUS (Use este para checar status)
  "status": "pending",
  "message": "Saque solicitado."
}
GET /payment/:id

Consultar Pagamento AUTO-APPROVE

Use o ID Numérico recebido na criação do depósito.

Se o status na API bancária for PAID, essa rota atualiza seu saldo automaticamente.

Exemplo de Requisição
curl -X GET https://olympuspay.cloud/api/v1/payment/49281 \
  -H "Authorization: oly_live_..."
Respostas Possíveis
Caso 1: Sucesso (Pago e Creditado)
{
  "id": 49281,
  "status": "paid",
  "message": "Pagamento confirmado e saldo creditado.",
  "received": 24.00 
}
Caso 2: Pendente (Aguardando)
{
  "id": 49281,
  "status": "pending",
  "vision_status": "pending"
}
GET /withdraw/:id

Consultar Saque AUTO-REFUND

Use o ID Olympus (wd_api_...) recebido na solicitação de saque.

Se o saque falhar no banco (chave inválida, rejeitado), essa rota devolve seu dinheiro automaticamente.

Exemplo de Requisição
curl -X GET https://olympuspay.cloud/api/v1/withdraw/wd_api_170923... \
  -H "Authorization: oly_live_..."
Respostas Possíveis
Caso 1: Sucesso (Enviado)
{
  "id": "wd_api_170923...",
  "status": "paid"
}
Caso 2: Pendente (Processando)
{
  "id": "wd_api_170923...",
  "status": "pending"
}
Caso 3: Falha (Dinheiro Estornado)
{
  "id": "wd_api_170923...",
  "status": "failed",
  "message": "Falha no banco. Valor estornado."
}

Exemplo de Integração (Python)

Script CLI para testar todas as rotas.
Nota: Este é um código de exemplo gerado por IA (ChatGPT) para fins didáticos e de teste.
import requests

# ==============================
# CONFIGURAÇÃO
# ==============================

API_KEY = "SUA_API_KEY_AQUI" # Substitua pela sua chave
BASE_URL = "https://olympuspay.cloud/api/v1"

HEADERS = {
    "Authorization": API_KEY,
    "Content-Type": "application/json"
}

# ==============================
# FUNÇÕES
# ==============================

def consultar_saldo():
    try:
        r = requests.get(f"{BASE_URL}/balance", headers=HEADERS)
        print("\n🔎 SALDO:")
        print(r.json())
    except Exception as e:
        print(f"Erro: {e}")

def criar_deposito():
    valor = input("Valor do depósito (ex: 5.90): ").replace(",", ".")
    try:
        valor = float(valor)
    except:
        print("❌ Valor inválido")
        return

    payload = {"amount": valor}

    try:
        r = requests.post(
            f"{BASE_URL}/pay",
            headers=HEADERS,
            json=payload
        )
        data = r.json()

        print("\n📥 DEPÓSITO CRIADO")
        print(data)

        # Tenta recuperar o ID de várias formas
        payment_id = (
            data.get("id")
            or data.get("payment_id")
            or data.get("order_id")
            or data.get("reference")
        )

        if payment_id:
            print(f"\n🆔 ID DO DEPÓSITO: {payment_id}")
            print("👉 Use esse ID para consultar o status")
        else:
            print("\n⚠️ ATENÇÃO: ID não identificado automaticamente.")

        if "qr_code" in data:
            print("\n📲 PIX COPIA E COLA:")
            print(data["qr_code"])
            
    except Exception as e:
        print(f"Erro na requisição: {e}")

def consultar_deposito():
    payment_id = input("ID do depósito: ").strip()
    if not payment_id:
        print("❌ ID inválido")
        return

    try:
        r = requests.get(
            f"{BASE_URL}/payment/{payment_id}",
            headers=HEADERS
        )
        print("\n📊 STATUS DO DEPÓSITO")
        print(r.json())
    except Exception as e:
        print(f"Erro: {e}")

def criar_saque():
    valor = input("Valor do saque (ex: 10.00): ").replace(",", ".")
    try:
        valor = float(valor)
    except:
        print("❌ Valor inválido")
        return

    pix_key = input("Chave PIX: ").strip()
    key_type = input("Tipo da chave (cpf/email/phone/random) [enter p/ ignorar]: ").strip()

    payload = {
        "amount": valor,
        "pix_key": pix_key
    }

    if key_type:
        payload["key_type"] = key_type

    try:
        r = requests.post(
            f"{BASE_URL}/withdraw",
            headers=HEADERS,
            json=payload
        )
        data = r.json()

        print("\n📤 SAQUE CRIADO")
        print(data)

        withdraw_id = data.get("id")

        if withdraw_id:
            print(f"\n🆔 ID DO SAQUE: {withdraw_id}")
            print("👉 Use esse ID para consultar o status")
            
    except Exception as e:
        print(f"Erro: {e}")

def consultar_saque():
    withdraw_id = input("ID do saque: ").strip()
    if not withdraw_id:
        print("❌ ID inválido")
        return

    try:
        r = requests.get(
            f"{BASE_URL}/withdraw/{withdraw_id}",
            headers=HEADERS
        )
        print("\n📊 STATUS DO SAQUE")
        print(r.json())
    except Exception as e:
        print(f"Erro: {e}")

# ==============================
# MENU
# ==============================

def menu():
    while True:
        print("""
==============================
        OLYMPUSPAY CLI
==============================
1 - Consultar saldo
2 - Criar depósito (PIX)
3 - Consultar depósito
4 - Criar saque (PIX)
5 - Consultar saque
0 - Sair
""")
        opcao = input("Escolha: ").strip()

        if opcao == "1": consultar_saldo()
        elif opcao == "2": criar_deposito()
        elif opcao == "3": consultar_deposito()
        elif opcao == "4": criar_saque()
        elif opcao == "5": consultar_saque()
        elif opcao == "0": 
            print("Saindo...")
            break
        else:
            print("❌ Opção inválida")

if __name__ == "__main__":
    menu()