ovh-voip-spam-filter
🇬🇧 English · 🇫🇷 Français
Reconcile your OVH SIP incoming blacklist with Saracroche, the community-driven blocklist of ~16 million French telemarketing numbers.
📖 Full documentation: raedkit.github.io/ovh-voip-spam-filter
[!WARNING] Use the API (
sync), not the CSV. The OVH Manager's CSV import fails past ~80 entries (empirically confirmed). This project exists to push the same data through the OVH API one prefix at a time, throttled and idempotent. The CSV mode is kept for completeness but is not the recommended path.
Quickstart
docker run --rm \
-e OVH_APPLICATION_KEY=... \
-e OVH_APPLICATION_SECRET=... \
-e OVH_CONSUMER_KEY=... \
-e OVH_BILLING_ACCOUNT=... \
-e OVH_SERVICE_NAME=... \
ghcr.io/raedkit/ovh-voip-spam-filter:latest sync
Or via PyPI:
pip install ovh-voip-spam-filter
ovh-voip-spam-filter sync
Generate an OVH token with this pre-filled URL (minimum scopes pre-checked).
Full setup walkthrough: docs/quickstart.
Why this exists
OVH's Manager UI offers a CSV import for the incoming blacklist, but it POSTs each row internally without rate-limiting. The Saracroche list is 643 prefixes — the import returns HTTP 429 after ~80. This tool does the same job correctly: signed API requests, client-side throttle, exponential backoff on 429, auto-adaptation if OVH tightens the quota. One bootstrap run takes ~13 minutes; subsequent runs are idempotent and take seconds.
How it works
┌────────────────────────────┐
│ Saracroche live API │
│ (~643 block-only prefixes)│
└─────────────┬──────────────┘
│ fallback when down
▼
┌────────────────────────────┐
│ Hard-coded ARCEP fallback │
│ (23 prefixes, additive) │
└─────────────┬──────────────┘
▼
┌────────────────────────────┐
│ Diff vs current OVH state │
│ (GET-first reconciliation)│
└─────────────┬──────────────┘
▼
┌────────────────────────────┐
│ Signed OVH API push │
│ (throttled, 429-aware) │
└────────────────────────────┘
- Normal mode (Saracroche reachable) — strict sync: adds missing prefixes, removes the ones Saracroche removed.
- Degraded mode (Saracroche unreachable) — uses the hard-coded ARCEP fallback, additive only, never deletes. Anti-regression guarantee.
Details: reconciliation semantics.
Acknowledgments
🙏 This project would not exist without Saracroche by Camille Bouvat.
Saracroche is an open-source community blocklist of ~16 million French telemarketing and spam numbers, maintained solo and pro bono since 2020. We consume the french-list-arcep-operators endpoint as our primary source of truth, with no caching on the redistribution side — the freshness you get is whatever Saracroche has right now.
If this tool saved you from a spam call, please support Camille:
- 💛 Liberapay (preferred)
- 💳 Stripe / one-shot
- 🐙 GitHub Sponsors
Saracroche source:
- 📱 Apps: iOS · Android
- 🦊 Code: Codeberg (android) · GitHub (legacy)
Documentation
Full docs at raedkit.github.io/ovh-voip-spam-filter:
- Quickstart — token generation, discover, sync
- Configuration — env vars, CLI flags, Kubernetes
- Docker — image details, multi-arch, CronJob sketch
- PyPI — install + library usage
- Reconciliation — normal vs degraded mode
- API reference
- Roadmap
Contributing
PRs welcome. See CONTRIBUTING.md for setup and the PR checklist. By participating you agree to the Code of Conduct.
Security issues: see SECURITY.md. Please don't open public issues for credential-handling bugs.
License
GPL-3.0-or-later — matches Saracroche.
Metadata
Release files for ovh-voip-spam-filter 0.2.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 | |
|---|---|---|---|
| ovh_voip_spam_filter-0.2.0.tar.gz | 41.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ovh_voip_spam_filter-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 75.2 kB
Release files / ovh_voip_spam_filter-0.2.0.tar.gz
| Download URL | ovh_voip_spam_filter-0.2.0.tar.gz |
|---|---|
| Size | 41.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
395a9169003d73f1d079fd5307dacbf37fba4750cf23d27faf6d377208b75e60
|
|
BLAKE2b-256 checksum How to use checksums |
d0d90868e5f729df6f020c5323768c0f59fd75c1c9b3e0517b6761518cac244f
|
| 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 May 20, 2026.
Transparency logRelease files / ovh_voip_spam_filter-0.2.0-py3-none-any.whl
| Download URL | ovh_voip_spam_filter-0.2.0-py3-none-any.whl |
|---|---|
| Size | 34.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d20b8bfdf60f579cb74b1a671a1c74613574fd672595374c5c505032c362837a
|
|
BLAKE2b-256 checksum How to use checksums |
830253dbabd4549f0f5fce8c357638c89723a796291455c7d6d5cb3ec6250b4e
|
| 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 May 20, 2026.
Transparency log