Python

Exemplos com a biblioteca requests. Compatível com Python 3.8+.

Instalação

pip install requests

Cliente reutilizável

Use uma Session para reaproveitar conexão e header de auth.

import requests

API_BASE = "https://seurastreio.com.br/api/public"
API_KEY = "sr_live_sua_chave_aqui"

session = requests.Session()
session.headers.update({"Authorization": f"Bearer {API_KEY}"})

Rastreamento

def rastrear(codigo: str) -> dict:
    r = session.get(f"{API_BASE}/rastreio/{codigo}")
    r.raise_for_status()
    return r.json()

dados = rastrear("BR123456789BR")
print(dados["eventoMaisRecente"]["descricao"])
# Plano pago: dados["historico"], dados["previsaoEntrega"]

Consulta de CEP

import re

def buscar_cep(cep: str) -> dict | None:
    limpo = re.sub(r"\D", "", cep)
    r = session.get(f"{API_BASE}/cep/{limpo}")
    json = r.json()
    return json["data"] if json.get("success") else None

print(buscar_cep("01310-100"))

Criar Logística Reversa

def criar_lr(payload: dict) -> dict:
    r = session.post(f"{API_BASE}/logistica-reversa", json=payload)
    json = r.json()
    if not json.get("ok"):
        raise RuntimeError(f"{json.get('code')}: {json.get('message')}")
    return json

criar_lr({
    "credentialId": "9a2c1f80-1234-4abc-9def-000000000001",
    "tipo": "A",
    "servicoEnvio": "pac",
    "remetente": {
        "nome": "Maria Silva",
        "logradouro": "Rua das Flores",
        "numero": "100",
        "complemento": "",
        "bairro": "Centro",
        "cidade": "São Paulo",
        "uf": "SP",
        "cep": "01310100",
        "ddd": "11",
        "telefone": "987654321",
        "email": "[email protected]",
    },
})

Listar com paginação

def listar_todas_lrs() -> list[dict]:
    items = []
    cursor = None
    while True:
        params = {"limit": 100}
        if cursor:
            params["cursor"] = cursor
        r = session.get(f"{API_BASE}/logistica-reversa", params=params)
        data = r.json()
        items.extend(data["items"])
        cursor = data.get("nextCursor")
        if not cursor:
            break
    return items

print(len(listar_todas_lrs()), "LRs no total")

Tratamento de erro

from requests.exceptions import HTTPError

def call(method: str, path: str, **kwargs) -> dict:
    r = session.request(method, f"{API_BASE}{path}", **kwargs)
    json = r.json() if r.content else {}
    if r.status_code == 401:
        raise RuntimeError("Chave de API inválida")
    if r.status_code == 429:
        raise RuntimeError(
            f"Cota estourada ({json.get('current')}/{json.get('max')})"
        )
    try:
        r.raise_for_status()
    except HTTPError:
        raise RuntimeError(json.get("message") or f"HTTP {r.status_code}")
    return json
Para cargas altas considere httpx com cliente assíncrono. A API responde rápido, mas paralelizar paginação encurta sincronizações de muitos itens.