Skip to main content

stapel-billing

CI coverage pypi downloads python license llms.txt

Payments and billing: per-user credit wallets held as expiry-aware credit lots over an immutable ledger, reservations (hold/capture/release) for work priced only after it runs, one-off credit packages and subscription plans, Stripe-backed checkout and customer portal, idempotent webhooks and a service-to-service debit endpoint.

Part of the Stapel framework — composable Django apps that deploy as a monolith or as microservices without changing module code.

Install

pip install stapel-billing

At a glance

Fact Value
Version 0.9.1
Python >=3.11 (3.11, 3.12, 3.13, 3.14)
HTTP operations 10
Config axes 1
Usage surface 25
Extension points 5
Error codes 55
Fleet dependencies stapel-auth (optional) · stapel-core

Documentation

Errors: English · Español · Русский · OpenAPI · capabilities.json · llms.txt (for agents)

Quick start

# settings.py
INSTALLED_APPS = [
    ...
    'stapel_billing',
]

from stapel_billing.tasks import get_billing_beat_schedule

CELERY_BEAT_SCHEDULE = {
    **get_billing_beat_schedule(),   # credit expiry, hold sweep, reconcile
}

Register the beat schedule (or run the three callables in stapel_billing.tasks from your own cron): credits granted with an expiry only expire because something runs. System check stapel_billing.W105 says so if nothing does.

Wallets are lots

A wallet is a set of CreditLot rows — each one knows where its credits came from (purchase, subscription, grant, adjustment, hold_release) and when they die (expires_at, NULL = never). Spend walks the lots expiring-soonest first, so a subscription bundle is used before the non-expiring credits a customer paid cash for. Wallet.balance is a maintained cache of that total, recomputed from the lots inside the same row lock as every mutation.

from stapel_billing import credit, debit, hold, capture, release
from stapel_billing.models import LotSource, TransactionType

credit(user=user, credits=3000, type=TransactionType.SUBSCRIPTION_BONUS,
       source=LotSource.SUBSCRIPTION, expires_at=sub.current_period_end)

held = hold(user=user, credits=15, type=TransactionType.AI_CHARGE,
            idempotency_key=f"mic:{recording_id}")
try:
    used = do_the_work()
except Exception:
    release(hold_id=held.id)      # credits go back with their original expiry
else:
    capture(hold_id=held.id, actual_credits=used)

Bus events

Emits

| payment.completed | schema | A payment transaction completed successfully. | | subscription.changed | schema | User subscription plan or status changed. |

Consumes

| user.deleted | schema | | user.deletion_initiated | schema |

License

MIT — see LICENSE.


This page is assembled by stapel-readme from docs/readme.md plus the contract artifacts in docs/. Edit the prose in docs/readme.md; the badges, facts and links above and below it are generated — do not hand-edit README.md.

Release files for stapel-billing 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for stapel-billing 0.9.1
File Size Uploaded
stapel_billing-0.9.1.tar.gz 137.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for stapel-billing 0.9.1
File Interpreter ABI Platform
stapel_billing-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 251.0 kB

Release files / stapel_billing-0.9.1.tar.gz

Download URL stapel_billing-0.9.1.tar.gz
Size 137.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a3a2ac6caa8c04a3531dadd004e4bad70406adfdc7cf5d19408281f02b64466d
BLAKE2b-256 checksum
How to use checksums
bebb1ea93c596b5586bcbf5636e61b2a32da897f22eacb0787fe52d4765f989c
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 Aug 23, 2026.

Transparency log

Release files / stapel_billing-0.9.1-py3-none-any.whl

Download URL stapel_billing-0.9.1-py3-none-any.whl
Size 113.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3031165eff19e4d3a2ba1105b4c6b735695a6542d4e9dd18b18a16a9627c43ef
BLAKE2b-256 checksum
How to use checksums
e37f641238b909a46a061bad7558d4807826ac99aeb8ba899b1a19aae12cce78
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 Aug 23, 2026.

Transparency log

Release history Release notifications | RSS feed

0.21.3

2 release files

0.21.1

2 release files

0.21.0

2 release files

0.20.2

2 release files

0.20.1

2 release files

0.19.0

2 release files

0.18.2

2 release files

0.18.1

2 release files

0.18.0

2 release files

0.17.1

2 release files

0.17.0

2 release files

0.16.1

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

This release

0.9.1 This release

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.16

2 release files

0.4.15

2 release files

0.4.12

2 release files

0.4.11

2 release files

0.4.10

2 release files

0.4.9

2 release files

0.4.4

2 release files

0.4.1

2 release files

0.4.0

1 release file

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