A Python library for validating Cloudflare Turnstile tokens with async and sync support
Project description
PyTurnstile
A Python library for validating Cloudflare Turnstile tokens with both async and sync support.
Features
- 🔄 Async & Sync Support
- 🚀 Simple & Intuitive API
- ✅ Type-safe response handling
- 🛡️ Enhanced security validation
What is PyTurnstile?
PyTurnstile simplifies Cloudflare Turnstile token validation. It handles all communication with Cloudflare's API.
Learn more at: https://developers.cloudflare.com/turnstile/
Installation
Install the package using your preferred dependency manager.
uv
uv add pyturnstile
pip
pip install pyturnstile
Usage
💡 TIP
You can follow this documentation and create your own Turnstile secret key at the Cloudflare Turnstile dashboard.
Quick Start
PyTurnstile provides two ways to validate tokens:
1. Using the Turnstile class (Recommended)
from pyturnstile import Turnstile
turnstile = Turnstile(secret="your-secret-key")
response = turnstile.validate(token="user-token-from-frontend")
# or validate asynchronously
# response = turnstile.async_validate(token="user-token-from-frontend")
if response.success:
print("✅ Token is valid!")
2. Using functions directly
from pyturnstile import validate, async_validate
response = validate(
token="user-token-from-frontend",
secret="your-secret-key"
)
# or validate asynchronously
# response = await async_validate(
# token="user-token-from-frontend",
# secret="your-secret-key"
# )
if response.success:
print("✅ Token is valid!")
Optional Parameters
ℹ️ NOTE
For more details on all available parameters, see the Cloudflare documentation
response = turnstile.validate(
token="user-token", # The token from the client-side widget
idempotency_key="unique-uuid", # Optional: UUID for retry protection
expected_remoteip="203.0.113.1", # Optional: The visitor's IP address that the challenge response must match
expected_hostname="example.com", # Optional: The hostname that the challenge response must match
expected_action="submit_form", # Optional: The action identifier that the challenge must match
timeout=10 # Optional: request timeout in seconds
)
Response Object
ℹ️ NOTE
For more details on all response fields, see the Cloudflare documentation
The TurnstileResponse object contains:
response.success # bool: Whether validation succeeded
response.error_codes # list[TurnstileErrorCodes]: Error codes (if any)
response.challenge_ts # str: ISO timestamp of challenge completion
response.hostname # str: Hostname where challenge was served
response.action # str: Custom action identifier
response.cdata # str: Custom data payload from client-side
response.metadata["ephemeral_id"] # Device fingerprint ID (Enterprise only)
Contributing
Any contributions are greatly appreciated. If you have a suggestion that would make this project better, please fork the repo and create a Pull Request. You can also open an issue.
License
Published under the MIT License.
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
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 pyturnstile-0.5.2.tar.gz.
File metadata
- Download URL: pyturnstile-0.5.2.tar.gz
- Upload date:
- Size: 368.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c3b051fef7c9cae6c5c616ed8b8ee5af99fdb96349ab76efe1a3ffeab5f1f0d
|
|
| MD5 |
1995b1484860b84d01b6c93c04b20f3e
|
|
| BLAKE2b-256 |
53c163eb8af66b6a108496cac9cc52d17afd17eccfae783c8930991aea6b9f68
|
File details
Details for the file pyturnstile-0.5.2-py3-none-any.whl.
File metadata
- Download URL: pyturnstile-0.5.2-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34d8c2cf942f7059fe4dbc7ff64ee196c6cdcf463aef2d8f930a0c725888b1cd
|
|
| MD5 |
b713e6965d4ffa9a11b4bf60a782c5ab
|
|
| BLAKE2b-256 |
0e390abd76f1ec07d098b602e61e8a071573b392c3532cb44b7e5e8df0a35bdb
|