Skip to main content

Python SDK for Finanfut Billing External API

Project description

Finanfut Billing Python SDK

Client oficial sincrònic per consumir la Finanfut Billing External API (/external/v1) amb models compatibles amb Pydantic v2, ara preparat per treballar amb Business Units.

Instal·lació

  • Pydantic 2.x: pip install finanfut-billing-sdk>=2.0
  • Pydantic 1.x: pip install finanfut-billing-sdk<2.0
  • Des del repositori local: pip install -e backend/sdk

Dependències principals:

  • pydantic>=2.0,<3.0
  • requests>=2.31

Configuració bàsica i Business Units

from finanfut_billing_sdk import FinanfutBillingClient

client = FinanfutBillingClient(
    base_url="https://api.finanfut-billing.com",
    api_key="sk_live_xxx",
    business_unit_id="bu_default",  # opcional: aplicada a serveis/factures/liquidacions per defecte
)

Com funciona business_unit_id

  • Global al client: passa business_unit_id al constructor i s'aplicarà automàticament a les operacions compatibles.
  • Per operació: pots sobreescriure-la en cada mètode (business_unit_id="bu_alt").
  • Endpoints sense BU: tax rates i partner payment methods són d'abast de companyia i ignoren la BU (l'SDK emet un avís si n'hi ha una definida).
  • Liquidacions (settlements): la BU és opcional però s'envia quan està disponible per enrutar payouts.
  • External API: serveis i factures externes accepten BU però actualment poden ignorar-la; l'SDK ja no la tracta com a obligatòria.

Exemples d'ús

Crear producte/servei amb BU

from decimal import Decimal
from finanfut_billing_sdk.models import ExternalServiceUpsertRequest

payload = ExternalServiceUpsertRequest(
    external_reference="service_abc",
    type="service",
    name="Monthly subscription",
    description="Access to premium content",
    price=Decimal("29.90"),
    vat_rate_code="vat_21",
)
service = client.upsert_service(payload)  # usa la BU global

Crear factura amb BU (sobre-escrivint la BU global)

from finanfut_billing_sdk.models import ExternalInvoiceCreateRequest, ExternalInvoiceLine

invoice = client.create_invoice(
    ExternalInvoiceCreateRequest(
        client_external_reference="client_123",
        currency="EUR",
        lines=[
            ExternalInvoiceLine(
                service_external_reference="service_abc",
                description="Premium plan",
                qty=1,
                price=29.90,
                vat_rate_id="tax_rate_uuid",
            ),
        ],
    ),
    business_unit_id="bu_sales",  # prioritat respecte la BU global
)

Operacions sense BU (àmbit de companyia)

# Els tax rates i partner payment methods ignoren la BU.
client.list_tax_rates()
client.partner_payment_methods.list_partner_payment_methods()

Idempotència en liquidacions

settlement = client.settlements.create_settlement(
    payload,
    idempotency_key="settlement-create-2024-12-31",
)

Enviar factura i registrar pagament

from finanfut_billing_sdk.models import ExternalInvoiceEmailRequest, ExternalPaymentCreateRequest

email = client.send_invoice_email(
    invoice.invoice_id,
    ExternalInvoiceEmailRequest(subject="La teva factura", body="Adjunt trobaràs el PDF"),
)

payment = client.register_payment(
    invoice.invoice_id,
    ExternalPaymentCreateRequest(amount=29.90, method="stripe"),
)

Checkout i onboarding de Stripe Connect

from finanfut_billing_sdk.models import ExternalCheckoutCreateRequest, ExternalConnectOnboardRequest

checkout = client.payments.create_checkout(
    "stripe",
    ExternalCheckoutCreateRequest(
        amount=29.90,
        currency="EUR",
        business_unit_id="bu_sales",
        provider_payload={"payment_method_types": ["card"]},
    ),
)

connect = client.payments.connect_onboard(
    "stripe",
    ExternalConnectOnboardRequest(
        provider_id="provider_uuid",
        return_url="https://app.example.com/connect/return",
        refresh_url="https://app.example.com/connect/refresh",
    ),
)

Checkout sessions de Stripe (external)

from finanfut_billing_sdk.models import ExternalCheckoutSessionCreateRequest

session = client.payments.create_checkout_session(
    ExternalCheckoutSessionCreateRequest(
        amount=49.90,
        currency="EUR",
        success_url="https://app.example.com/ok",
        cancel_url="https://app.example.com/cancel",
        description="Pagament",
    ),
    idempotency_key="checkout-session-2024-12-01",
)

Errors

from finanfut_billing_sdk.errors import (
    FinanfutBillingAuthError,
    FinanfutBillingServiceError,
    FinanfutBillingValidationError,
)

try:
    client.list_tax_rates()
except FinanfutBillingAuthError:
    print("API key incorrecta o sense permisos")
except FinanfutBillingValidationError as e:
    print("Error de validació:", e.payload)
except FinanfutBillingServiceError as e:
    print(f"Error de servei ({e.request_id}): {e.error}")

Els errors del backend inclouen sempre error, message i request_id.

Publicació a PyPI

El paquet està preparat per publicar-se a PyPI quan es creen tags v* al repositori. El workflow publish-sdk.yml valida la versió (__version__) i fa l'upload amb Twine.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finanfut_billing_sdk-2.1.8.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

finanfut_billing_sdk-2.1.8-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file finanfut_billing_sdk-2.1.8.tar.gz.

File metadata

  • Download URL: finanfut_billing_sdk-2.1.8.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for finanfut_billing_sdk-2.1.8.tar.gz
Algorithm Hash digest
SHA256 ff7f1185c3b6d76b66bb1e1d5e1b75fe0fc9690dd0723c0d7b85308c6ae7c33b
MD5 88ec6be3358af69f2a1e6c6c8164bbfc
BLAKE2b-256 398ab7057f78ae8bba02d2016cf1aa45c7fe1fb7123a57b68fd1647f9180618f

See more details on using hashes here.

File details

Details for the file finanfut_billing_sdk-2.1.8-py3-none-any.whl.

File metadata

File hashes

Hashes for finanfut_billing_sdk-2.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 e489b90f6f8568250783f9875a4620aba55cf2556a66dd5c0cbb2556975b9ae7
MD5 ed2855fb0f1cd2845284efe1b4b7fd7b
BLAKE2b-256 b1692b5d729e8e092a75fd55c1afe55e701cf9e406df34c252cfe800ab0a81da

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page