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.webhooks create, list, update, delete

Paginação

orders.list(...) e customers.list(...) 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 1.1.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 1.1.0
File Size Uploaded
twila_parcelemais-1.1.0.tar.gz 35.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for twila-parcelemais 1.1.0
File Interpreter ABI Platform
twila_parcelemais-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 70.5 kB

Release files / twila_parcelemais-1.1.0.tar.gz

Download URL twila_parcelemais-1.1.0.tar.gz
Size 35.0 kB
Tags Source
SHA-256 checksum
How to use checksums
ef8b75e7cf2227006b4630f983fa090c1e6679bae1033f180733a042ee9b91dc
BLAKE2b-256 checksum
How to use checksums
7effc04e2e73dcb2893737a21df755be75e7b99faf41c0d032faa93ede21b806
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 24, 2026.

Transparency log

Release files / twila_parcelemais-1.1.0-py3-none-any.whl

Download URL twila_parcelemais-1.1.0-py3-none-any.whl
Size 35.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fe41e68cc05f36c7616f49e9aaa509da8d27e2540796f14a7ad3bd383b48c112
BLAKE2b-256 checksum
How to use checksums
b459db7347e2193545ab865950488bfc7152aae870404f1036d5301eab587669
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 24, 2026.

Transparency log

Release history Release notifications | RSS feed

2.0.0

2 release files

This release

1.1.0 This release

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