Reconcile your OVH SIP incoming blacklist with the Saracroche community list — Docker image + Python CLI.
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ovh_voip_spam_filter-0.2.0.tar.gz.
File metadata
- Download URL: ovh_voip_spam_filter-0.2.0.tar.gz
- Upload date:
- Size: 41.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
395a9169003d73f1d079fd5307dacbf37fba4750cf23d27faf6d377208b75e60
|
|
| MD5 |
210210b3aef7fd1c0b66dc88f660ea75
|
|
| BLAKE2b-256 |
d0d90868e5f729df6f020c5323768c0f59fd75c1c9b3e0517b6761518cac244f
|
Provenance
The following attestation bundles were made for ovh_voip_spam_filter-0.2.0.tar.gz:
Publisher:
release.yml on raedkit/ovh-voip-spam-filter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ovh_voip_spam_filter-0.2.0.tar.gz -
Subject digest:
395a9169003d73f1d079fd5307dacbf37fba4750cf23d27faf6d377208b75e60 - Sigstore transparency entry: 1583774269
- Sigstore integration time:
-
Permalink:
raedkit/ovh-voip-spam-filter@545605388e6bdfe525ae351f2307596a3804787f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/raedkit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@545605388e6bdfe525ae351f2307596a3804787f -
Trigger Event:
push
-
Statement type:
File details
Details for the file ovh_voip_spam_filter-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ovh_voip_spam_filter-0.2.0-py3-none-any.whl
- Upload date:
- Size: 34.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d20b8bfdf60f579cb74b1a671a1c74613574fd672595374c5c505032c362837a
|
|
| MD5 |
a5ae89d5057c94e0e09452cda343ccdd
|
|
| BLAKE2b-256 |
830253dbabd4549f0f5fce8c357638c89723a796291455c7d6d5cb3ec6250b4e
|
Provenance
The following attestation bundles were made for ovh_voip_spam_filter-0.2.0-py3-none-any.whl:
Publisher:
release.yml on raedkit/ovh-voip-spam-filter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ovh_voip_spam_filter-0.2.0-py3-none-any.whl -
Subject digest:
d20b8bfdf60f579cb74b1a671a1c74613574fd672595374c5c505032c362837a - Sigstore transparency entry: 1583774449
- Sigstore integration time:
-
Permalink:
raedkit/ovh-voip-spam-filter@545605388e6bdfe525ae351f2307596a3804787f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/raedkit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@545605388e6bdfe525ae351f2307596a3804787f -
Trigger Event:
push
-
Statement type: