SDK oficial Python para integrar com a API pública da MuPay.
Project description
mupay-sdk
SDK oficial Python para integrar backends, automacoes, scripts e notebooks com a API publica da MuPay.
Ele foi desenhado para deixar o caminho feliz curto: instala, cria um cliente com sk_test_*, chama mupay.charges.create(...) e recebe um objeto tipado. Sem montar httpx na mao, sem decorar header de idempotencia, sem parsing manual de erro, sem validar webhook no improviso.
Por que integrar com a SDK é simples
- API com cara de produto:
mupay.charges.create(...),mupay.subscriptions.cancel(..., mode="immediate")emupay.webhooks.construct_event(...). - Tipos Pydantic v2 para validar request/response cedo, ainda no seu codigo.
- Cliente sync e async com a mesma ergonomia.
- Idempotencia automatica em operacoes mutaveis, com opcao de informar sua propria chave.
- Retry seguro para 429/5xx: respeita
Retry-Afterquando a API envia e usa backoff curto quando nao envia. - Erros tipados com
code,suggestion,documentation_urlerequest_id, prontos para log/suporte. - Webhook HMAC-SHA256 em tempo constante, com janela anti-replay padrao de 5 minutos.
O resultado esperado para quem integra e: poucas linhas para receber um PIX de teste e informacoes suficientes para resolver erro sem abrir ticket.
Instalação
pip install mupay-sdk
Requisitos:
- Python 3.10, 3.11 ou 3.12.
- Uma API key
sk_test_*ousk_live_*. - Dependencias runtime pequenas:
httpx,pydanticv2 etenacity.
Quickstart
from mupay_sdk import Gateway
mupay = Gateway(api_key="sk_test_...")
charge = mupay.charges.create(
amount_cents=12000,
payment_method="pix",
customer={"id": "22222222-2222-4222-8222-222222222222"},
)
print(charge.pix_emv_code)
Cliente async
from mupay_sdk import AsyncGateway
async def main() -> None:
async with AsyncGateway(api_key="sk_test_...") as mupay:
charge = await mupay.charges.create(
amount_cents=12000,
payment_method="pix",
customer={"id": "22222222-2222-4222-8222-222222222222"},
)
print(charge.charge_id)
Erros tipados
Erros HTTP da API viram GatewayAPIError. O erro preserva status_code, code, suggestion, documentation_url e request_id quando a API envia Problem Details.
from mupay_sdk import Gateway
from mupay_sdk.errors import GatewayAPIError
mupay = Gateway(api_key="sk_test_...")
try:
mupay.charges.create(
amount_cents=12000,
payment_method="credit_card",
card_token="tok_test",
customer={"id": "22222222-2222-4222-8222-222222222222"},
)
except GatewayAPIError as exc:
print(exc.code, exc.request_id, exc.suggestion)
Webhooks
Valide a assinatura antes de confiar no payload. O helper usa HMAC-SHA256 em tempo constante e bloqueia replay fora da janela configurada.
from mupay_sdk.webhooks import construct_event
event = construct_event(
request_body,
request_headers["x-mupay-signature"],
"whsec_...",
)
print(event.type)
Cancelamento de assinatura
O SDK envia o mesmo payload exigido pela API publica: mode é obrigatório e reason é opcional.
from mupay_sdk import Gateway
mupay = Gateway(api_key="sk_test_...")
subscription = mupay.subscriptions.cancel(
"sub_123",
mode="immediate",
reason="cliente pediu cancelamento",
)
print(subscription.status)
Fluxo completo em menos de 5 minutos
- Instale o pacote:
pip install mupay-sdk. - Crie uma API key sandbox no dashboard da MuPay.
- Exporte a chave:
set MUPAY_API_KEY=sk_test_...no Windows ouexport MUPAY_API_KEY=sk_test_...no Linux/macOS. - Rode
python examples/create_pix_charge.py. - Copie o
pix_emv_coderetornado para simular pagamento no sandbox.
Essa e a experiencia que a SDK precisa proteger: o integrador nao deve precisar conhecer headers internos, formato exato de Problem Details ou detalhes de retry para criar a primeira cobranca.
Exemplos completos
examples/create_pix_charge.pyexamples/async_create_charge.pyexamples/verify_webhook.py
Desenvolvimento local
python -m pip install -e .[dev]
python -m pytest
python -m coverage run -m pytest
python -m coverage report
python -m mypy .
python -m ruff check .
Publicação PyPI manual
Este PR não adiciona build/publicação automática no GitHub Actions. A publicação pública inicial deve ser manual para evitar release acidental enquanto o contrato da API ainda está amadurecendo.
Para publicar publicamente:
- Crie conta e verifique email em PyPI e TestPyPI.
- Garanta que o nome
mupay-sdkestá disponível ou que a organização MuPay controla esse nome. - Atualize
versionempyproject.tomlusando versionamento semântico. - Rode a validação local:
python -m pip install -e .[dev]
python -m ruff check .
python -m mypy .
python -m coverage run -m pytest
python -m coverage report
uv build
- Publique primeiro no TestPyPI:
python -m pip install twine
python -m twine upload --repository testpypi dist/*
- Instale em ambiente limpo e rode um smoke test:
python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ mupay-sdk
python -c "from mupay_sdk import Gateway; print(Gateway)"
- Se o smoke test passar, publique no PyPI:
python -m twine upload dist/*
Use token de API com escopo limitado ao projeto mupay-sdk quando o projeto já existir. Nunca coloque token PyPI em código, README, commit ou workflow.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mupay_sdk-0.1.0.tar.gz.
File metadata
- Download URL: mupay_sdk-0.1.0.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94353bc20aa69357c3a5e23a9b3e13685856a3d70746f079a887e3048c708134
|
|
| MD5 |
2cbeb859359cbd26f8be32d3cb273865
|
|
| BLAKE2b-256 |
6a11cf4d26ceb58f57bda8405487bf1e2e120ff2de66ed49fa96f883204d7889
|
File details
Details for the file mupay_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mupay_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ecc9d681bb05ba92af31ef70205e8d267a7fa2349a02ad7884b0644053587298
|
|
| MD5 |
2167a6dc79571d38abe766091138e7ee
|
|
| BLAKE2b-256 |
0221403f6b8f58f9bd1418885173dc39c6fa128896680a085c9ba27562a6909e
|