twila-parcelemais
SDK oficial em Python para a API do Parcele+ — crédito direto ao consumidor (CDC) e parcelamento no momento da compra.
Uso restrito a server-side. O
client_secretnunca deve ser embarcado em um app mobile, SPA ou qualquer código que rode no navegador/dispositivo do usuário final.
Compatibilidade
| Runtime | Versões aceitas |
|---|---|
| Python | 3.9 ou superior (CI cobre 3.9, 3.10, 3.11, 3.12, 3.13 e 3.14) |
Cliente síncrono, baseado em httpx, com tipos totalmente anotados (py.typed, PEP 561).
Instalação
pip install twila-parcelemais
Quick start
from twila_parcelemais import ParceleMaisClient, ParceleMaisClientOptions, ParceleMaisEnvironment
client = ParceleMaisClient(
ParceleMaisClientOptions(
client_id="<seu-client-id>",
client_secret="<seu-client-secret>",
environment=ParceleMaisEnvironment.STAGING,
)
)
ParceleMaisClient é thread-safe e deve ser reaproveitado como singleton na sua aplicação — ele mantém o cache do token de acesso e o estado do circuit breaker. Feche-o só no shutdown (client.close(), ou use como context manager: with ParceleMaisClient(options) as client:).
Simulando parcelas
from twila_parcelemais import SimulateInstallmentsRequest
parcelas = client.simulations.simulate_installments(SimulateInstallmentsRequest(requested_amount=1500.0))
for parcela in parcelas:
print(f"{parcela.term}x de {parcela.installment_amount} (total {parcela.total_amount})")
Criando um pedido
from twila_parcelemais import CreateOrderRequest, OrderAddress
pedido_id = client.orders.create(
CreateOrderRequest(
cpf="12345678901",
phone_number="+5511999998888",
establishment_document="12345678000195",
requested_amount=1500.0,
name="Maria Souza",
email="maria.souza@exemplo.com.br",
date_of_birth="1990-05-20T00:00:00-03:00",
address=OrderAddress(
street="Av. Paulista",
number="1578",
neighborhood="Bela Vista",
city="São Paulo",
state="SP",
postal_code="01311000",
),
)
)
create retorna só o id do pedido — a API não devolve o pedido completo na criação; use client.orders.get(pedido_id) se precisar dos dados completos logo em seguida.
Clientes por recurso
| Cliente | Métodos |
|---|---|
client.orders |
create, get, list, start_cdc_sale, import_invoice |
client.simulations |
simulate_installments, simulate_values |
client.customers |
get, list |
client.establishments |
create, get, list, update, update_bank_account, activate, deactivate |
client.webhooks |
create, list, list_audit, update, delete |
Paginação
orders.list(...), customers.list(...) e webhooks.list_audit(...) retornam um PagedResult[T] — sem auto-paginação, você controla explicitamente o avanço de página:
from twila_parcelemais import ListOrdersRequest
page = client.orders.list(ListOrdersRequest(page=1, page_size=20))
for order in page.items:
print(order.id)
if page.has_next:
next_page = client.orders.list(ListOrdersRequest(page=2, page_size=20))
Tratamento de erros
| Erro | Quando |
|---|---|
ParceleMaisConfigurationError |
Configuração do ParceleMaisClient inválida (ex: client_id/client_secret ausentes) |
ParceleMaisAuthenticationError |
Falha ao gerar/renovar o token de acesso |
ParceleMaisValidationError |
400 — erro de validação, com field_errors por campo |
ParceleMaisRateLimitError |
429 |
ParceleMaisTimeoutError |
Timeout de rede, timeout total, ou circuit breaker aberto |
ParceleMaisApiError |
Qualquer outro erro de API (404, 409, 5xx) |
ParceleMaisWebhookSignatureError |
Assinatura de webhook inválida ou expirada |
from twila_parcelemais import ParceleMaisApiError
try:
client.orders.get(order_id)
except ParceleMaisApiError as error:
print(f"{error.status_code} {error.error_code}: {error}")
Validando webhooks
from twila_parcelemais import parse_webhook_event
evento = parse_webhook_event(raw_body, signature_header, signing_secret)
Verifica a assinatura HMAC-SHA256 do cabeçalho e a janela de replay (5 minutos) antes de expor o evento. Lança ParceleMaisWebhookSignatureError se a assinatura for inválida ou o evento estiver fora da janela.
Samples
samples/sample_plain— script standalone, sem frameworksamples/sample_flask—ParceleMaisClientcomo singleton na app factory do Flask
Qualidade, segurança e cobertura
- Build/Test (
ci.yml) —mypy --strict+ suíte de testes (pytest+respx) em Python 3.9–3.14. - Quality (
quality.yml) — análise estática via Codacy CLI (pylint), resultados publicados na aba Security → Code scanning do repositório. - Security (
security.yml) — CodeQL para Python, rodando a cada PR/push e semanalmente. - Coverage — cobertura de testes coletada via
pytest-cove publicada no Codecov.
Documentação completa
documentacao.parcelemais.com.br — referência de todos os endpoints, autenticação, webhooks e mais.
Contribuindo
Veja CONTRIBUTING.md.
Código de conduta
Este projeto segue o Código de Conduta.
Licença
Release files for twila-parcelemais 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| twila_parcelemais-2.0.0.tar.gz | 35.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| twila_parcelemais-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.9 kB
Release files / twila_parcelemais-2.0.0.tar.gz
| Download URL | twila_parcelemais-2.0.0.tar.gz |
|---|---|
| Size | 35.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ca7ceee7c4ac8448aa76977fbf61367e6deb0071117d1c20fa602c7ffd8edbe3
|
|
BLAKE2b-256 checksum How to use checksums |
c902e411d15253c2195128c0242b0f3648bd836ead8cf61ed62a7cc02862a183
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / twila_parcelemais-2.0.0-py3-none-any.whl
| Download URL | twila_parcelemais-2.0.0-py3-none-any.whl |
|---|---|
| Size | 36.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5b40c45bc5d5ee2ec31bd107849a716623cd1979654cce6679f0d26f37fae4cb
|
|
BLAKE2b-256 checksum How to use checksums |
87f4380ef72652ae494daec6ddb0686a24567fb542d703696a0a01adc3449e52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log