ff-iii-luciferin
ff-iii-luciferin is an async Python client and a small set of domain helpers for working with Firefly III transactions. It fetches transactions and categories, exposes simplified models, and updates a transaction's description, notes, tags, or category.
Python 3.12 or newer is required.
Install
pip install ff-iii-luciferin
Quickstart
Set FIREFLY_URL to the instance root (without /api/v1) and
FIREFLY_TOKEN to a personal access token. The client does not read environment
variables itself; this example passes them explicitly.
import asyncio
import os
from ff_iii_luciferin.api import FireflyClient
async def main() -> None:
client = FireflyClient(
base_url=os.environ["FIREFLY_URL"],
token=os.environ["FIREFLY_TOKEN"],
)
try:
about = await client.get_about()
print(f"Firefly III: {about.version}")
transactions = await client.fetch_transactions(max_pages=1)
for tx in transactions:
print(tx.id, tx.date, tx.amount, tx.description, tx.external_id)
finally:
await client.close()
asyncio.run(main())
fetch_transactions() defaults to withdrawals; pass tx_type for
another Firefly III transaction type. Multipart and invalid transactions are
skipped during listing, while get_transaction() raises FireflyAPIError for
an unsupported multipart transaction.
Documentation
The full documentation covers setup, transaction updates, matching semantics, and the public API reference. The OpenAPI-generated transport models are implementation details and are not part of that reference.
Local development
With Docker and Python 3 installed, start an isolated Firefly III demo and run a read-only example:
bash scripts/demo/start.sh
set -a; source .firefly-demo/env; set +a
uv run python examples/min_usage_search.py
The demo listens on http://127.0.0.1:18080 and seeds accounts, categories,
withdrawals, a deposit, and a transfer in SQLite. Repeated starts reuse the
data without duplicating seed records. bash scripts/demo/stop.sh stops the
container while keeping the database. .firefly-demo/ contains a token and
app key; keep it private. New containers use fireflyiii/core:latest; set
FIREFLY_DEMO_IMAGE=fireflyiii/core:version-6.7.4 to pin an image before the
first start. An existing container keeps its image until recreated.
To run the live test against an isolated instance, set FIREFLY_E2E_URL and
FIREFLY_E2E_TOKEN, then run uv run pytest tests/test_firefly_e2e.py.
Without those variables, the test is skipped. The GitHub Actions E2E workflow
starts its own disposable instance.
Build the documentation locally with:
uv sync --locked --group docs
uv run --group docs mkdocs build --strict
See LICENSE for the MIT license.
Metadata
Release files for ff-iii-luciferin 1.2.2
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 |
|---|---|---|---|---|
| ff_iii_luciferin-1.2.2.tar.gz | 102.2 kB | Without provenance | Details for ff_iii_luciferin-1.2.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ff_iii_luciferin-1.2.2-py3-none-any.whl | Python 3 | none | any | Details for ff_iii_luciferin-1.2.2-py3-none-any.whl |
Total release size: 547.1 kB
Release files / ff_iii_luciferin-1.2.2.tar.gz
| Download URL | ff_iii_luciferin-1.2.2.tar.gz |
|---|---|
| Size | 102.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c9e415633fbbfc32fca3c674698d35d4eeb67bf8ba788102764401051a9013d
|
|
BLAKE2b-256 checksum How to use checksums |
bc92e22191d1ca2e4d0d3b739a08832612b2557f0d4a704cd9247e8668069f02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ff_iii_luciferin-1.2.2-py3-none-any.whl
| Download URL | ff_iii_luciferin-1.2.2-py3-none-any.whl |
|---|---|
| Size | 444.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
87e5934d5917173da6f3c23704dbc51a7e399dd2aeb86f129a3ff5a5e28f5f83
|
|
BLAKE2b-256 checksum How to use checksums |
cf340d5cc289357e6fd0c2121108f89dde54e17bd769447b8b34f8a07c834758
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for ff-iii-luciferin 1.2.2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A 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.