Pretix Event Person Forwarder
The Pretix Event Person Forwarder is a Python library that enables programmatic forwarding of event, order, and question data from Pretix to external systems via HTTP. Forward attendee registrations, order updates, and survey responses to webhooks, CRM systems, custom APIs or other Pretix systems.
Requirements
- Python 3.8 or later
- Running Pretix instance with HTTPS enabled
- Valid Pretix API token for authentication
Installation
Install the package via pip:
pip install pretix-event-person-forwarder
Optional: Enable HTTP/2 support:
pip install pretix-event-person-forwarder[http2]
Quick Start
Get started in under a minute:
from pretix_event_person_forwarder import Forwarder
forwarder = Forwarder(
api_url="https://your-pretix-instance.com/api/",
api_token="your-api-token"
)
For detailed usage and advanced configuration, see the documentation.
Core Features
The library provides several key components:
- Forwarder — Main orchestration class that manages event, order, and question forwarding from Pretix to external systems
- Orders — Forward order creation, modification, and payment status changes
- Events — Forward event data and updates to your endpoints
- Questions — Forward survey question responses and collected data
- Models — Strongly-typed data models for all request and response payloads
Configuration & Authentication
API Token
To authenticate, you need a valid Pretix API token:
- Log in to your Pretix admin panel
- Navigate to Settings → API → API tokens
- Create a new token or use an existing one with appropriate permissions
- Pass the token to Forwarder:
api_token="your-token-here"
URL Format
The API URL must include the /api/ path:
# Correct ✓
api_url = "https://your-pretix-instance.com/api/"
# Incorrect ✗
api_url = "https://your-pretix-instance.com"
Connection Options
Customize connection behavior via Forwarder constructor parameters:
timeout— Request timeout in seconds (default: 30)http2— Enable HTTP/2 support (requires http2 extra dependency)connection_pool_size— Simultaneous connections (default: 10)retries— Number of automatic retries on transient failures (default: 3)follow_redirects— Follow HTTP redirects (default: True)
Integration Tests
Integration tests require a running Pretix instance with HTTPS. The easiest way to set one up locally is via pretix-docker-compose, checked out as a sibling directory (../pretix-docker-compose).
Quick Setup
Run the setup script to generate certificates, start Docker, and create test data:
chmod +x scripts/setup-integration-tests.sh
./scripts/setup-integration-tests.sh
The script prints the exact export commands to run before executing the tests.
Environment Variables
| Variable | Description | Default |
|---|---|---|
PRETIX_HOST |
URL of the Pretix API | https://localhost |
PRETIX_TOKEN |
API token for the test user | required |
PRETIX_CA_BUNDLE |
Path to test CA certificate | SSL verification skipped if unset |
Troubleshooting
SSL: CERTIFICATE_VERIFY_FAILED — Verify PRETIX_CA_BUNDLE is exported, points to an absolute path, and the file is readable.
Connection Refused — Check that containers are running (docker compose ps) and port 443 is available. Inspect logs with docker compose logs -f pretix_app.
Organizer not found — Rerun the setup script or manually execute docker exec -i pretix_app pretix shell < tests/integrationtest/setup_testdata.py and check for errors.
Subject Alternative Name does not match — Regenerate certificates. Verify SANs with:
openssl x509 -in ../pretix-docker-compose/docker/pretix/files/config/ssl/domain.crt \
-text -noout | grep -A1 "Subject Alternative Name"
Cleanup
cd ../pretix-docker-compose
docker compose down # stop containers
docker compose down -v # stop and remove volumes
Development
Setup
This project uses uv for dependency management. To set up a development environment:
# Install uv if not already installed
pip install uv
# Create virtual environment and install dependencies
uv sync --all-extras
Running Tests
Unit Tests:
pytest tests/unittests
Coverage must be 80% or higher.
Integration Tests:
See the Integration Tests section above for setup instructions. Once configured:
pytest tests/integrationtest
Building Documentation
Documentation is built with mkdocs and mkdocs-material:
# Install docs dependencies
uv sync --extra docs
# Serve locally at http://localhost:8000
mkdocs serve
# Build static site
mkdocs build
Code Quality
Code is linted with Ruff:
ruff check src tests
ruff format src tests
To automatically fix issues:
ruff check --fix src tests
ruff format src tests
Contributing
If you would like to contribute something, have an improvement request, or want to make a change inside the code, please open a pull request.
Support
If you need support, or you encounter a bug, please don't hesitate to open an issue.
Donations
If you want to support my work, I ask you to take an unusual action inside the open source community. Donate the money to a non-profit organization like Doctors Without Borders or the Children's Cancer Aid. I will continue to build tools because I like them, and I am passionate about developing and sharing applications.
License
This product is available under the Apache 2.0 license.
Release files for pretix-event-person-forwarder 1.0.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 | |
|---|---|---|---|
| pretix_event_person_forwarder-1.0.2.tar.gz | 137.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pretix_event_person_forwarder-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 153.8 kB
Release files / pretix_event_person_forwarder-1.0.2.tar.gz
| Download URL | pretix_event_person_forwarder-1.0.2.tar.gz |
|---|---|
| Size | 137.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b3e9468316dd567786211dd35ec071838b01011f620331627204b1d90fb0873a
|
|
BLAKE2b-256 checksum How to use checksums |
accc33333439051f2681ed8672ef5e6de4ffde023e107612e1d7441f1a27eb76
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jul 19, 2026.
Transparency logRelease files / pretix_event_person_forwarder-1.0.2-py3-none-any.whl
| Download URL | pretix_event_person_forwarder-1.0.2-py3-none-any.whl |
|---|---|
| Size | 16.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c9a83367baaef7f62e970a005d3dca1c6831515973bda6e0b8e54502937c1af
|
|
BLAKE2b-256 checksum How to use checksums |
0bd84dc3f718b86f4dc603a962252f2ef88ae387ab76ccc9d356a5dfda35dae1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jul 19, 2026.
Transparency log