Skip to main content

Parcele+

License CI Quality Security Coverage Python

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_secret nunca 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 framework
  • samples/sample_flask — ParceleMaisClient como 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-cov e 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

MIT

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)

Source distribution for twila-parcelemais 2.0.0
File Size Uploaded
twila_parcelemais-2.0.0.tar.gz 35.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for twila-parcelemais 2.0.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page