# TwoCaptcha Python Library
A simple Python client for the [2captcha solving service](https://2captcha.com/api-docs) - Bypass reCAPTCHA, Cloudflare Turnstile, FunCaptcha, GeeTest and solve any other captchas.
## Installation
```bash
pip install twocaptcha-python
```
```bash
uv add twocaptcha-python
```
**Note**: You can use any task configuration directly from the [2Captcha API documentation](https://2captcha.com/api-docs). Just copy the task object from their examples and pass it to `solve_captcha()`.
## Supported Captcha Types
- **Normal CAPTCHA** - `ImageToTextTask`
- **reCAPTCHA V2** - `RecaptchaV2TaskProxyless`, `RecaptchaV2Task`
- **reCAPTCHA V3** - `RecaptchaV3TaskProxyless`, `RecaptchaV3Task`
- **reCAPTCHA Enterprise** - `RecaptchaV2EnterpriseTaskProxyless`, `RecaptchaV3EnterpriseTaskProxyless`
- **Arkose Labs CAPTCHA** - `FunCaptchaTaskProxyless`, `FunCaptchaTask`
- **GeeTest CAPTCHA** - `GeeTestTaskProxyless`, `GeeTestTask`
- **Cloudflare Turnstile** - `TurnstileTaskProxyless`, `TurnstileTask`
- **Capy Puzzle CAPTCHA** - `CapyTaskProxyless`, `CapyTask`
- **Lemin CAPTCHA** - `LeminTaskProxyless`, `LeminTask`
- **Amazon CAPTCHA** - `AmazonTaskProxyless`, `AmazonTask`
- **Text CAPTCHA** - `TextCaptchaTask`
- **Rotate CAPTCHA** - `RotateTask`
- **Click CAPTCHA** - `CoordinatesTask`
- **Draw Around** - `DrawAroundTask`
- **Grid CAPTCHA** - `GridTask`
- **Audio CAPTCHA** - `AudioTask`
- **MTCaptcha** - `MtCaptchaTaskProxyless`, `MtCaptchaTask`
- **DataDome CAPTCHA** - `DataDomeTaskProxyless`, `DataDomeTask`
- **Friendly Captcha** - `FriendlyCaptchaTaskProxyless`, `FriendlyCaptchaTask`
- **Bounding box** - `BoundingBoxTask`
- **Cutcaptcha** - `CutCaptchaTaskProxyless`, `CutCaptchaTask`
- **atbCAPTCHA** - `AtbCaptchaTaskProxyless`, `AtbCaptchaTask`
- **Tencent** - `TencentTaskProxyless`, `TencentTask`
- **Prosopo Procaptcha** - `ProsopoTaskProxyless`, `ProsopoTask`
- **CaptchaFox** - `CaptchaFoxTaskProxyless`, `CaptchaFoxTask`
- **VK Captcha** - `VKTaskProxyless`, `VKTask`
- **Temu Captcha** - `TemuTaskProxyless`, `TemuTask`
## Usage Examples
### Synchronous Client
```python
from TwoCaptcha import SyncTwoCaptcha, TwoCaptchaError
client = SyncTwoCaptcha(api_key="YOUR_API_KEY")
def auto_solve_captcha():
"""Auto solve captcha using 2captcha api."""
try:
task = {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://2captcha.com/demo/recaptcha-v2",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
}
balance = client.balance()
print(f"Balance: {balance}")
result = client.solve_captcha(task)
print(f"Result: {result}")
except TwoCaptchaError as e:
print(f"TwoCaptcha Error: {e}")
def manual_solve_captcha():
"""Manual solve captcha using 2captcha api."""
try:
task = {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://2captcha.com/demo/recaptcha-v2",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
}
create_result = client.create_task(task)
task_id = create_result["taskId"]
print(f"Created task with ID: {task_id}")
task_result = client.get_task_result(task_id)
print(f"Task result: {task_result}")
except TwoCaptchaError as e:
print(f"TwoCaptcha Error: {e}")
# Run examples
auto_solve_captcha()
manual_solve_captcha()
```
### Asynchronous Client
```python
from TwoCaptcha import AsyncTwoCaptcha, TwoCaptchaError
import asyncio
async def auto_solve_captcha():
"""Auto solve captcha using 2captcha api."""
client = AsyncTwoCaptcha(api_key="YOUR_API_KEY")
try:
task = {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://2captcha.com/demo/recaptcha-v2",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
}
balance = await client.balance()
print(f"Balance: {balance}")
result = await client.solve_captcha(task)
print(f"Result: {result}")
except TwoCaptchaError as e:
print(f"TwoCaptcha Error: {e}")
finally:
await client.close()
async def manual_solve_captcha():
"""Manual solve captcha using 2captcha api."""
client = AsyncTwoCaptcha(api_key="YOUR_API_KEY")
try:
task = {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://2captcha.com/demo/recaptcha-v2",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
}
create_result = await client.create_task(task)
task_id = create_result["taskId"]
print(f"Created task with ID: {task_id}")
task_result = await client.get_task_result(task_id)
print(f"Task result: {task_result}")
except TwoCaptchaError as e:
print(f"TwoCaptcha Error: {e}")
finally:
await client.close()
async def context_manager_example():
"""Context manager example."""
async with AsyncTwoCaptcha(api_key="YOUR_API_KEY") as client:
balance = await client.balance()
print(f"Context manager balance: {balance}")
async def multiple_tasks_example():
"""Multiple tasks example."""
client = AsyncTwoCaptcha(api_key="YOUR_API_KEY")
try:
tasks = [
{
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://2captcha.com/demo/recaptcha-v2",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
},
{
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://2captcha.com/demo/recaptcha-v2",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
},
]
print("Solving multiple captchas concurrently...")
results = await asyncio.gather(
*[client.solve_captcha(task) for task in tasks], return_exceptions=True
)
for i, result in enumerate(results):
if isinstance(result, Exception):
print(f"Task {i+1} failed: {result}")
else:
print(f"Task {i+1} solved: {result['solution']['gRecaptchaResponse'][:30]}...")
except Exception as e:
print(f"Error in multiple tasks: {e}")
finally:
await client.close()
# Run examples
asyncio.run(auto_solve_captcha())
asyncio.run(manual_solve_captcha())
asyncio.run(context_manager_example())
asyncio.run(multiple_tasks_example())
```
### Different Captcha Types
#### reCAPTCHA v2 (Proxyless)
```python
task = {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u"
}
result = client.solve_captcha(task)
```
#### reCAPTCHA v2 (With Proxy)
```python
task = {
"type": "RecaptchaV2Task",
"websiteURL": "https://example.com",
"websiteKey": "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": "8080",
"proxyLogin": "user",
"proxyPassword": "pass"
}
result = client.solve_captcha(task)
```
#### reCAPTCHA v3
```python
task = {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "https://example.com",
"websiteKey": "6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu",
"minScore": 0.9,
"pageAction": "submit"
}
result = client.solve_captcha(task)
```
#### Normal Image Captcha
```python
task = {
"type": "ImageToTextTask",
"body": "base64_encoded_image_data"
}
result = client.solve_captcha(task)
```
#### Check Balance
```python
balance = client.balance()
print(f"Balance: ${balance['balance']}")
```
## Response Format
```json
{
"errorId": 0,
"status": "ready",
"solution": {
"gRecaptchaResponse": "03ADUVZw...UWxTAe6ncIa",
"token": "03ADUVZw...UWxTAe6ncIa"
},
"cost": "0.00299",
"ip": "1.2.3.4",
"createTime": 1692863536,
"endTime": 1692863556,
"solveCount": 1
}
```
## Error Handling
```python
from twocaptcha import TwoCaptchaError
try:
result = client.solve_captcha(task)
except TwoCaptchaError as e:
print(f"Error: {e}")
```
## API Methods
- `client.solve_captcha(task)` - Solve captcha and wait for result
- `client.balance()` - Check account balance
- `client.create_task.create_task(task)` - Create task only
- `client.get_task_result.get_task_result(task_id)` - Get task result
- `client.get_balance.get_balance()` - Check account balance (alternative)
## Configuration
```python
client = TwoCaptcha(
api_key="YOUR_API_KEY",
timeout=120, # Max wait time in seconds
polling_interval=5 # Check interval in seconds
)
```
## Documentation
For complete API documentation and task parameters, visit [2captcha.com/api-docs](https://2captcha.com/api-docs).
Raw data
{
"_id": null,
"home_page": null,
"name": "twocaptcha-python",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "Sujit Biswas <ssujitxx@gmail.com>",
"keywords": "2captcha, 2captcha api, 2captcha api python, 2captcha api python client, api, automation, captcha bypass, captcha solver, captcha solving service, client, cloudflare turnstile, funcaptcha, geetest, hcaptcha, image-captcha, python, recaptcha, recaptcha bypass, text-captcha, twocaptcha",
"author": null,
"author_email": "Sujit Biswas <ssujitxx@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/90/5a/d0df728e4d224d59d49e0ed1e675f87ee57136b8356a496cad10354cba1d/twocaptcha_python-0.0.3.tar.gz",
"platform": null,
"description": "# TwoCaptcha Python Library\n\nA simple Python client for the [2captcha solving service](https://2captcha.com/api-docs) - Bypass reCAPTCHA, Cloudflare Turnstile, FunCaptcha, GeeTest and solve any other captchas.\n\n## Installation\n\n```bash\npip install twocaptcha-python\n```\n\n```bash\nuv add twocaptcha-python\n```\n\n**Note**: You can use any task configuration directly from the [2Captcha API documentation](https://2captcha.com/api-docs). Just copy the task object from their examples and pass it to `solve_captcha()`.\n\n## Supported Captcha Types\n\n- **Normal CAPTCHA** - `ImageToTextTask`\n- **reCAPTCHA V2** - `RecaptchaV2TaskProxyless`, `RecaptchaV2Task`\n- **reCAPTCHA V3** - `RecaptchaV3TaskProxyless`, `RecaptchaV3Task`\n- **reCAPTCHA Enterprise** - `RecaptchaV2EnterpriseTaskProxyless`, `RecaptchaV3EnterpriseTaskProxyless`\n- **Arkose Labs CAPTCHA** - `FunCaptchaTaskProxyless`, `FunCaptchaTask`\n- **GeeTest CAPTCHA** - `GeeTestTaskProxyless`, `GeeTestTask`\n- **Cloudflare Turnstile** - `TurnstileTaskProxyless`, `TurnstileTask`\n- **Capy Puzzle CAPTCHA** - `CapyTaskProxyless`, `CapyTask`\n- **Lemin CAPTCHA** - `LeminTaskProxyless`, `LeminTask`\n- **Amazon CAPTCHA** - `AmazonTaskProxyless`, `AmazonTask`\n- **Text CAPTCHA** - `TextCaptchaTask`\n- **Rotate CAPTCHA** - `RotateTask`\n- **Click CAPTCHA** - `CoordinatesTask`\n- **Draw Around** - `DrawAroundTask`\n- **Grid CAPTCHA** - `GridTask`\n- **Audio CAPTCHA** - `AudioTask`\n- **MTCaptcha** - `MtCaptchaTaskProxyless`, `MtCaptchaTask`\n- **DataDome CAPTCHA** - `DataDomeTaskProxyless`, `DataDomeTask`\n- **Friendly Captcha** - `FriendlyCaptchaTaskProxyless`, `FriendlyCaptchaTask`\n- **Bounding box** - `BoundingBoxTask`\n- **Cutcaptcha** - `CutCaptchaTaskProxyless`, `CutCaptchaTask`\n- **atbCAPTCHA** - `AtbCaptchaTaskProxyless`, `AtbCaptchaTask`\n- **Tencent** - `TencentTaskProxyless`, `TencentTask`\n- **Prosopo Procaptcha** - `ProsopoTaskProxyless`, `ProsopoTask`\n- **CaptchaFox** - `CaptchaFoxTaskProxyless`, `CaptchaFoxTask`\n- **VK Captcha** - `VKTaskProxyless`, `VKTask`\n- **Temu Captcha** - `TemuTaskProxyless`, `TemuTask`\n\n## Usage Examples\n\n### Synchronous Client\n\n```python\nfrom TwoCaptcha import SyncTwoCaptcha, TwoCaptchaError\n\nclient = SyncTwoCaptcha(api_key=\"YOUR_API_KEY\")\n\ndef auto_solve_captcha():\n \"\"\"Auto solve captcha using 2captcha api.\"\"\"\n try:\n task = {\n \"type\": \"RecaptchaV2TaskProxyless\",\n \"websiteURL\": \"https://2captcha.com/demo/recaptcha-v2\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\",\n }\n balance = client.balance()\n print(f\"Balance: {balance}\")\n result = client.solve_captcha(task)\n print(f\"Result: {result}\")\n\n except TwoCaptchaError as e:\n print(f\"TwoCaptcha Error: {e}\")\n\ndef manual_solve_captcha():\n \"\"\"Manual solve captcha using 2captcha api.\"\"\"\n try:\n task = {\n \"type\": \"RecaptchaV2TaskProxyless\",\n \"websiteURL\": \"https://2captcha.com/demo/recaptcha-v2\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\",\n }\n\n create_result = client.create_task(task)\n task_id = create_result[\"taskId\"]\n print(f\"Created task with ID: {task_id}\")\n\n task_result = client.get_task_result(task_id)\n print(f\"Task result: {task_result}\")\n\n except TwoCaptchaError as e:\n print(f\"TwoCaptcha Error: {e}\")\n\n# Run examples\nauto_solve_captcha()\nmanual_solve_captcha()\n```\n\n### Asynchronous Client\n\n```python\nfrom TwoCaptcha import AsyncTwoCaptcha, TwoCaptchaError\nimport asyncio\n\nasync def auto_solve_captcha():\n \"\"\"Auto solve captcha using 2captcha api.\"\"\"\n client = AsyncTwoCaptcha(api_key=\"YOUR_API_KEY\")\n try:\n task = {\n \"type\": \"RecaptchaV2TaskProxyless\",\n \"websiteURL\": \"https://2captcha.com/demo/recaptcha-v2\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\",\n }\n balance = await client.balance()\n print(f\"Balance: {balance}\")\n result = await client.solve_captcha(task)\n print(f\"Result: {result}\")\n\n except TwoCaptchaError as e:\n print(f\"TwoCaptcha Error: {e}\")\n finally:\n await client.close()\n\nasync def manual_solve_captcha():\n \"\"\"Manual solve captcha using 2captcha api.\"\"\"\n client = AsyncTwoCaptcha(api_key=\"YOUR_API_KEY\")\n try:\n task = {\n \"type\": \"RecaptchaV2TaskProxyless\",\n \"websiteURL\": \"https://2captcha.com/demo/recaptcha-v2\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\",\n }\n\n create_result = await client.create_task(task)\n task_id = create_result[\"taskId\"]\n print(f\"Created task with ID: {task_id}\")\n\n task_result = await client.get_task_result(task_id)\n print(f\"Task result: {task_result}\")\n\n except TwoCaptchaError as e:\n print(f\"TwoCaptcha Error: {e}\")\n finally:\n await client.close()\n\nasync def context_manager_example():\n \"\"\"Context manager example.\"\"\"\n async with AsyncTwoCaptcha(api_key=\"YOUR_API_KEY\") as client:\n balance = await client.balance()\n print(f\"Context manager balance: {balance}\")\n\nasync def multiple_tasks_example():\n \"\"\"Multiple tasks example.\"\"\"\n client = AsyncTwoCaptcha(api_key=\"YOUR_API_KEY\")\n try:\n tasks = [\n {\n \"type\": \"RecaptchaV2TaskProxyless\",\n \"websiteURL\": \"https://2captcha.com/demo/recaptcha-v2\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\",\n },\n {\n \"type\": \"RecaptchaV2TaskProxyless\",\n \"websiteURL\": \"https://2captcha.com/demo/recaptcha-v2\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\",\n },\n ]\n\n print(\"Solving multiple captchas concurrently...\")\n results = await asyncio.gather(\n *[client.solve_captcha(task) for task in tasks], return_exceptions=True\n )\n\n for i, result in enumerate(results):\n if isinstance(result, Exception):\n print(f\"Task {i+1} failed: {result}\")\n else:\n print(f\"Task {i+1} solved: {result['solution']['gRecaptchaResponse'][:30]}...\")\n\n except Exception as e:\n print(f\"Error in multiple tasks: {e}\")\n finally:\n await client.close()\n\n# Run examples\nasyncio.run(auto_solve_captcha())\nasyncio.run(manual_solve_captcha())\nasyncio.run(context_manager_example())\nasyncio.run(multiple_tasks_example())\n```\n\n### Different Captcha Types\n\n#### reCAPTCHA v2 (Proxyless)\n\n```python\ntask = {\n \"type\": \"RecaptchaV2TaskProxyless\",\n \"websiteURL\": \"https://example.com\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\"\n}\nresult = client.solve_captcha(task)\n```\n\n#### reCAPTCHA v2 (With Proxy)\n\n```python\ntask = {\n \"type\": \"RecaptchaV2Task\",\n \"websiteURL\": \"https://example.com\",\n \"websiteKey\": \"6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u\",\n \"proxyType\": \"http\",\n \"proxyAddress\": \"1.2.3.4\",\n \"proxyPort\": \"8080\",\n \"proxyLogin\": \"user\",\n \"proxyPassword\": \"pass\"\n}\nresult = client.solve_captcha(task)\n```\n\n#### reCAPTCHA v3\n\n```python\ntask = {\n \"type\": \"RecaptchaV3TaskProxyless\",\n \"websiteURL\": \"https://example.com\",\n \"websiteKey\": \"6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu\",\n \"minScore\": 0.9,\n \"pageAction\": \"submit\"\n}\nresult = client.solve_captcha(task)\n```\n\n#### Normal Image Captcha\n\n```python\ntask = {\n \"type\": \"ImageToTextTask\",\n \"body\": \"base64_encoded_image_data\"\n}\nresult = client.solve_captcha(task)\n```\n\n#### Check Balance\n\n```python\nbalance = client.balance()\nprint(f\"Balance: ${balance['balance']}\")\n```\n\n## Response Format\n\n```json\n{\n \"errorId\": 0,\n \"status\": \"ready\",\n \"solution\": {\n \"gRecaptchaResponse\": \"03ADUVZw...UWxTAe6ncIa\",\n \"token\": \"03ADUVZw...UWxTAe6ncIa\"\n },\n \"cost\": \"0.00299\",\n \"ip\": \"1.2.3.4\",\n \"createTime\": 1692863536,\n \"endTime\": 1692863556,\n \"solveCount\": 1\n}\n```\n\n## Error Handling\n\n```python\nfrom twocaptcha import TwoCaptchaError\n\ntry:\n result = client.solve_captcha(task)\nexcept TwoCaptchaError as e:\n print(f\"Error: {e}\")\n```\n\n## API Methods\n\n- `client.solve_captcha(task)` - Solve captcha and wait for result\n- `client.balance()` - Check account balance\n- `client.create_task.create_task(task)` - Create task only\n- `client.get_task_result.get_task_result(task_id)` - Get task result\n- `client.get_balance.get_balance()` - Check account balance (alternative)\n\n## Configuration\n\n```python\nclient = TwoCaptcha(\n api_key=\"YOUR_API_KEY\",\n timeout=120, # Max wait time in seconds\n polling_interval=5 # Check interval in seconds\n)\n```\n\n## Documentation\n\nFor complete API documentation and task parameters, visit [2captcha.com/api-docs](https://2captcha.com/api-docs).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Python client for 2captcha solving service - Bypass reCAPTCHA, Cloudflare Turnstile, FunCaptcha, GeeTest and solve any other captchas",
"version": "0.0.3",
"project_urls": {
"Bug Tracker": "https://github.com/SSujitX/twocaptcha-python/issues",
"Documentation": "https://github.com/SSujitX/twocaptcha-python#readme",
"Homepage": "https://github.com/SSujitX/twocaptcha-python",
"Issues": "https://github.com/SSujitX/twocaptcha-python/issues",
"Repository": "https://github.com/SSujitX/twocaptcha-python"
},
"split_keywords": [
"2captcha",
" 2captcha api",
" 2captcha api python",
" 2captcha api python client",
" api",
" automation",
" captcha bypass",
" captcha solver",
" captcha solving service",
" client",
" cloudflare turnstile",
" funcaptcha",
" geetest",
" hcaptcha",
" image-captcha",
" python",
" recaptcha",
" recaptcha bypass",
" text-captcha",
" twocaptcha"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "965e92cdbd79f0cb0c3c8c933733adf0708ef72d9005e40dd3f41304cebbd683",
"md5": "f94c39d0f436bebf848965c1338eef2b",
"sha256": "8a96148d22dc30de9dfbeb7504f06c09f9234e106620d1694d8f3c721f8c7c0d"
},
"downloads": -1,
"filename": "twocaptcha_python-0.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f94c39d0f436bebf848965c1338eef2b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 10525,
"upload_time": "2025-10-14T11:29:40",
"upload_time_iso_8601": "2025-10-14T11:29:40.023221Z",
"url": "https://files.pythonhosted.org/packages/96/5e/92cdbd79f0cb0c3c8c933733adf0708ef72d9005e40dd3f41304cebbd683/twocaptcha_python-0.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "905ad0df728e4d224d59d49e0ed1e675f87ee57136b8356a496cad10354cba1d",
"md5": "ef4c1325027e50c92902411dbd08395c",
"sha256": "45654e9a033191feceba3c851a737283643bb0c24c306ddff488ac0eddc1c097"
},
"downloads": -1,
"filename": "twocaptcha_python-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "ef4c1325027e50c92902411dbd08395c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 12072,
"upload_time": "2025-10-14T11:29:41",
"upload_time_iso_8601": "2025-10-14T11:29:41.569911Z",
"url": "https://files.pythonhosted.org/packages/90/5a/d0df728e4d224d59d49e0ed1e675f87ee57136b8356a496cad10354cba1d/twocaptcha_python-0.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-14 11:29:41",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "SSujitX",
"github_project": "twocaptcha-python",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "twocaptcha-python"
}