costfluent
Python client for the Costfluent Public API: every operation with typed models, sync and async, plus retries, idempotency keys, pagination and errors handled for you.
pip install costfluent
It needs Python 3.11 or later and an API token, created under Settings, API tokens, on a plan that includes API access. Give the token only the capabilities your script needs.
Quick start
import os
from costfluent import create_client, paginate
from costfluent.api.workspaces import list_workspaces
client = create_client(os.environ["COSTFLUENT_API_TOKEN"])
for workspace in paginate(list_workspaces.sync, client=client, limit=100):
print(workspace.id, workspace.name)
Each operation is a module under costfluent.api.<tag> named after the operation, with four
functions: sync returns the parsed model, sync_detailed the status, headers and model, and
asyncio and asyncio_detailed are their async twins. Request and response models are under
costfluent.models. create_client takes base_url, timeout (seconds, per request) and
max_retries.
from costfluent.api.folders import create_folder
from costfluent.models.create_folder_request import CreateFolderRequest
folder = create_folder.sync(client=client, body=CreateFolderRequest(workspace_id="wsp_...", title="Finance"))
Pagination
A list answers one page with links and data. paginate (and apaginate for the async
functions) yields every item, following links.next until it is empty. The next page is always
requested from the client's own base URL, so the token goes nowhere else.
Money
Amounts are strings holding the exact decimal the API computed, such as "1234.56789012", never
floats. Convert with decimal.Decimal(amount) to calculate with them.
Errors and retries
Any error status raises CostfluentError once retries are spent. It carries status, the API's
code (not_found, validation_failed, idempotency_key_reused and so on), detail,
field_errors, trace_id and the request_id to quote to support, with is_not_found,
is_rate_limited and is_idempotency_key_reused for the common checks.
- A 429 is retried for every method, after the
Retry-AfterorRateLimit-Resetthe API sends. - A 5xx, a connection error, or a 404 that is not the API's own problem details (a proxy's) is
retried for GET, HEAD, PUT, DELETE and creates, but not for other POSTs, which trigger work, nor
for a request with
If-Match. - Retries back off exponentially from one second with jitter, at most three times. A wait over 60 seconds is not waited out: the error is raised at once. A timeout is not retried.
Every create sends a fresh Idempotency-Key and resends it on each retry, so a retried create is
answered with the first response instead of creating twice. Pass idempotency_key= to choose the
key yourself, for example to make a scheduled job's create safe to run again.
Versions
Releases are 1.MINOR.PATCH, numbered with the Costfluent Go and TypeScript clients. The major is
the API's path version, v1, which only grows; the minor rises with each release that carries a
newer API contract, the patch is a fix to the client alone. costfluent.CONTRACT_SHA256 is the
SHA-256 of the API document a release was generated from.
Development
The modules under costfluent/api and costfluent/models, client.py, errors.py, types.py
and _contract.py are generated by openapi-python-client with openapi-python-client.yaml;
the rest is written by hand.
python3 -m venv .venv
.venv/bin/pip install --require-hashes -r requirements-dev.txt
PYTHONPATH=src .venv/bin/python -m unittest discover -s tests -t .
.venv/bin/ruff check . && .venv/bin/ruff format --check .
License
Apache-2.0, see LICENSE.
Metadata
Release files for costfluent 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| costfluent-1.0.0.tar.gz | 147.5 kB | With provenance | Details for costfluent-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| costfluent-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for costfluent-1.0.0-py3-none-any.whl |
Total release size: 619.5 kB
Release files / costfluent-1.0.0.tar.gz
| Download URL | costfluent-1.0.0.tar.gz |
|---|---|
| Size | 147.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3314901e8f7c5cebee1d56e7461168843a2477f88f33be1dcebddd4bb24d3d44
|
|
BLAKE2b-256 checksum How to use checksums |
6e44b8adfe53d9f92ef3c46612265a07d0f575aa6e6d7945cab3ab53d538c0b3
|
| 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 Oct 29, 2026.
Transparency logRelease files / costfluent-1.0.0-py3-none-any.whl
| Download URL | costfluent-1.0.0-py3-none-any.whl |
|---|---|
| Size | 471.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e4eda380858ad10bdde80d06a5c284473d9e122114938eb38d5885ef5f7519c0
|
|
BLAKE2b-256 checksum How to use checksums |
1a0f170a6ddd463a5d7f08da31d6b6e984f71c5f83834269d5cb35b2c72e1459
|
| 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 Oct 29, 2026.
Transparency logSecurity for costfluent 1.0.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for costfluent-1.0.0.tar.gz
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 Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.