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.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 1.0.0
File Size Uploaded
twila_parcelemais-1.0.0.tar.gz 31.6 kB Details

Built distribution (wheel)

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

Total release size: 63.8 kB

Release files / twila_parcelemais-1.0.0.tar.gz

Download URL twila_parcelemais-1.0.0.tar.gz
Size 31.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c76b6584b40b414d48eee5c029765f24a0f55e5dac6f1ce202894fe19990ba11
BLAKE2b-256 checksum
How to use checksums
147153cff17145d6a0ee45ba576033df003883b2ed8c42f8767679f95e7c7d18
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 13, 2026.

Transparency log

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

Download URL twila_parcelemais-1.0.0-py3-none-any.whl
Size 32.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2735eab40fdbcd5f987e482f4b3ed0617f8d98a90d92ee633a477602718bbce3
BLAKE2b-256 checksum
How to use checksums
733152d241bd149123fe6fbd58517eb7287a6115063307492d19ba952f6cb633
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 13, 2026.

Transparency log

Release history Release notifications | RSS feed

2.0.0

2 release files

1.1.0

2 release files

This release

1.0.0 This release

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