Skip to main content

Python interface for the KSEF API

Project description

Open in Dev Containers

ksef

NOT PRODUCTION READY

A python library for Polish KSEF (National e-invoice system, original: Krajowy System e-Faktur) system.

The official KSEF API documentation can be found at https://github.com/CIRFMF/ksef-docs/tree/main.

IMPORTANT Currently the project is not even in alpha stage, I barely started working on it. Initially it will support my personal needs only, but I plan to gradually implement new and more complex features.

Using

To add and install this package as a dependency of your project, run uv add ksef (or pip install ksef).

Authentication Setup

The library supports two authentication methods for KSEF API v2:

KSeF Token Authentication

A KSeF token can be generated via the KSeF web portal or obtained through the API after XAdES authentication.

from ksef.auth.token import TokenAuthorization
from ksef.client import Client
from ksef.constants import Environment

auth = TokenAuthorization(
    token="your-ksef-token",
    environment=Environment.TEST,
)
tokens = auth.authorize(nip="1234567890")

client = Client(authorization=auth, environment=Environment.TEST)

XAdES Certificate Authentication

Requires a qualified certificate from a trusted CA, or a KSeF-issued certificate. Provide PEM-encoded certificate and private key bytes.

from pathlib import Path

from ksef.auth.xades import XadesAuthorization
from ksef.client import Client
from ksef.constants import Environment

auth = XadesAuthorization(
    signing_cert=Path("cert.pem").read_bytes(),
    private_key=Path("key.pem").read_bytes(),
    environment=Environment.TEST,
)
tokens = auth.authorize(nip="1234567890")

client = Client(authorization=auth, environment=Environment.TEST)

Environments

  • Environment.PRODUCTIONhttps://api.ksef.mf.gov.pl/api/v2/
  • Environment.DEMOhttps://api-demo.ksef.mf.gov.pl/api/v2/
  • Environment.TESThttps://api-test.ksef.mf.gov.pl/api/v2/

Integration Tests

Integration tests connect to the live KSEF test environment using real credentials. They are excluded from the default test run and must be invoked explicitly:

source .env
uv run pytest -m integration

Credentials are provided via environment variables. Tests with missing variables are skipped automatically. See tests/integration/README.md for the full list of variables and per-method usage.

Contributing

Prerequisites
1. Set up Git to use SSH
  1. Generate an SSH key and add the SSH key to your GitHub account.
  2. Configure SSH to automatically load your SSH keys:
    cat << EOF >> ~/.ssh/config
    Host *
      AddKeysToAgent yes
      IgnoreUnknown UseKeychain
      UseKeychain yes
    EOF
    
2. Install Docker
  1. Install Docker Desktop.
3. Install VS Code or PyCharm
  1. Install VS Code and VS Code's Dev Containers extension. Alternatively, install PyCharm.
  2. Optional: install a Nerd Font such as FiraCode Nerd Font and configure VS Code or configure PyCharm to use it.
Development environments

The following development environments are supported:

  1. ⭐️ GitHub Codespaces: click on Code and select Create codespace to start a Dev Container with GitHub Codespaces.
  2. ⭐️ Dev Container (with container volume): click on Open in Dev Containers to clone this repository in a container volume and create a Dev Container with VS Code.
  3. Dev Container: clone this repository, open it with VS Code, and run Ctrl/⌘ + + PDev Containers: Reopen in Container.
  4. PyCharm: clone this repository, open it with PyCharm, and configure Docker Compose as a remote interpreter with the dev service.
  5. Terminal: clone this repository, open it with your terminal, and run docker compose up --detach dev to start a Dev Container in the background, and then run docker compose exec dev zsh to open a shell prompt in the Dev Container.
Developing
  • This project follows the Conventional Commits standard to automate Semantic Versioning and Keep A Changelog with Commitizen.
  • Run poe from within the development environment to print a list of Poe the Poet tasks available to run on this project.
  • Run poetry add {package} from within the development environment to install a run time dependency and add it to pyproject.toml and poetry.lock. Add --group test or --group dev to install a CI or development dependency, respectively.
  • Run poetry update from within the development environment to upgrade all dependencies to the latest versions allowed by pyproject.toml.
  • Run cz bump to bump the package's version, update the CHANGELOG.md, and create a git tag.

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

ksef-0.2.5.tar.gz (702.2 kB view details)

Uploaded Source

Built Distribution

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

ksef-0.2.5-py3-none-any.whl (28.4 kB view details)

Uploaded Python 3

File details

Details for the file ksef-0.2.5.tar.gz.

File metadata

  • Download URL: ksef-0.2.5.tar.gz
  • Upload date:
  • Size: 702.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.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}

File hashes

Hashes for ksef-0.2.5.tar.gz
Algorithm Hash digest
SHA256 0c9586cbb068ccd60c66785525ec0fb3778d3cde290a557e6503859de07ecb33
MD5 366264d959c14f4779d98ddab69449f6
BLAKE2b-256 d3a67d7e7f028bf9e5d0d97a63e53f05e1d471c2386d7bb095f9ff4fcc75cd14

See more details on using hashes here.

File details

Details for the file ksef-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: ksef-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 28.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.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}

File hashes

Hashes for ksef-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 79ff47460fe38e2197d109622c7740cb446d654d4c414485b666dd66c1674891
MD5 1cde2e458d5fa568c2a96e4ac27bf9e1
BLAKE2b-256 0efc13e1add00f26e9c78cd0e7f6bc961da356726ee4d59b95388462a474a469

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