verifydating 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- verifydating-1.0.0/LICENSE +21 -0
- verifydating-1.0.0/PKG-INFO +157 -0
- verifydating-1.0.0/README.md +118 -0
- verifydating-1.0.0/pyproject.toml +3 -0
- verifydating-1.0.0/setup.cfg +4 -0
- verifydating-1.0.0/setup.py +39 -0
- verifydating-1.0.0/verifydating/__init__.py +35 -0
- verifydating-1.0.0/verifydating/client.py +135 -0
- verifydating-1.0.0/verifydating/exceptions.py +28 -0
- verifydating-1.0.0/verifydating/models.py +67 -0
- verifydating-1.0.0/verifydating.egg-info/PKG-INFO +157 -0
- verifydating-1.0.0/verifydating.egg-info/SOURCES.txt +12 -0
- verifydating-1.0.0/verifydating.egg-info/dependency_links.txt +1 -0
- verifydating-1.0.0/verifydating.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 VasileDev Group / VerifyDating.net
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: verifydating
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Official Python SDK for VerifyDating Real-Time Facial Scam Intelligence & Anti-Catfish API
|
|
5
|
+
Home-page: https://verifydating.net/api/v1/dating-docs
|
|
6
|
+
Author: VasileDev Group
|
|
7
|
+
Author-email: support@verifydating.net
|
|
8
|
+
Project-URL: Documentation, https://verifydating.net/api/v1/dating-docs
|
|
9
|
+
Project-URL: Source, https://github.com/amendamax/verifydating-python-sdk
|
|
10
|
+
Project-URL: Tracker, https://github.com/amendamax/verifydating-python-sdk/issues
|
|
11
|
+
Keywords: dating catfish romance scam detection facial recognition deepfake defense trust safety identity moderation
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: Topic :: Security
|
|
16
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Operating System :: OS Independent
|
|
25
|
+
Requires-Python: >=3.8
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Dynamic: author
|
|
29
|
+
Dynamic: author-email
|
|
30
|
+
Dynamic: classifier
|
|
31
|
+
Dynamic: description
|
|
32
|
+
Dynamic: description-content-type
|
|
33
|
+
Dynamic: home-page
|
|
34
|
+
Dynamic: keywords
|
|
35
|
+
Dynamic: license-file
|
|
36
|
+
Dynamic: project-url
|
|
37
|
+
Dynamic: requires-python
|
|
38
|
+
Dynamic: summary
|
|
39
|
+
|
|
40
|
+
# ๐ก๏ธ VerifyDating Python SDK (`verifydating`)
|
|
41
|
+
|
|
42
|
+
[](https://pypi.org/project/verifydating/)
|
|
43
|
+
[](https://opensource.org/licenses/MIT)
|
|
44
|
+
[](https://pypi.org/project/verifydating/)
|
|
45
|
+
[-success)](https://verifydating.net/api/v1/dating-docs)
|
|
46
|
+
|
|
47
|
+
The official Python client library for the **[VerifyDating.net](https://verifydating.net/api/v1/dating-docs) B2B Anti-Catfish & Facial Scam Intelligence API**.
|
|
48
|
+
|
|
49
|
+
Protect dating platforms, social communities, classified marketplaces, and trust & safety workflows against fake profiles, stolen model photos, AI deepfakes, and organized romance scam syndicates.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## โก Key Features
|
|
54
|
+
|
|
55
|
+
- ๐ฏ **Sub-100ms Facial Screening**: Detect catfish profiles instantly upon user registration.
|
|
56
|
+
- ๐ค **Deepfake AI Detection**: Identify synthetic generative AI faces (Midjourney, Stable Diffusion, StyleGAN).
|
|
57
|
+
- ๐๏ธ **Global Stolen Face Database**: Cross-reference 480,000+ monitored stolen identities and romance scam photo signatures.
|
|
58
|
+
- ๐ **Automated Moderation Actions**: Pre-calculated decision recommendations (`APPROVE_PROFILE`, `REQUEST_LIVE_ID`, `REJECT_PROFILE_AND_AUTO_BAN`).
|
|
59
|
+
- ๐ **Zero External Dependencies**: Lightweight Vanilla Python client using standard library.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## ๐ฆ Installation
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install verifydating
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## ๐ Quickstart
|
|
72
|
+
|
|
73
|
+
### 1. Screen a Profile Picture via Image URL
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from verifydating import Client
|
|
77
|
+
|
|
78
|
+
# Initialize client (defaults to free developer sandbox if no api_key passed)
|
|
79
|
+
client = Client(api_key="vd_live_YOUR_API_KEY")
|
|
80
|
+
|
|
81
|
+
# Check a profile photo URL
|
|
82
|
+
result = client.check_face(image_url="https://example.com/uploads/user_avatar.jpg")
|
|
83
|
+
|
|
84
|
+
print(f"Scam Probability: {result.scam_probability}%")
|
|
85
|
+
print(f"Risk Level: {result.risk_level}")
|
|
86
|
+
print(f"Verdict: {result.verdict}")
|
|
87
|
+
print(f"Action: {result.action_recommendation}")
|
|
88
|
+
|
|
89
|
+
if result.is_catfish:
|
|
90
|
+
print(f"๐จ AUTO-BAN TRIGGERED: Profile photo matches {result.forensic_details.matches_count} known scam syndicates.")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### 2. Screen a Local Image File Upload
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
from verifydating import Client
|
|
99
|
+
|
|
100
|
+
client = Client(api_key="vd_live_YOUR_API_KEY")
|
|
101
|
+
|
|
102
|
+
with open("user_upload.jpg", "rb") as image_file:
|
|
103
|
+
result = client.check_face(image_bytes=image_file.read())
|
|
104
|
+
|
|
105
|
+
if result.action_recommendation == "REJECT_PROFILE_AND_AUTO_BAN":
|
|
106
|
+
# Automatically reject registration in your dating backend
|
|
107
|
+
ban_user(user_id=123)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## ๐ Response Object Schema
|
|
113
|
+
|
|
114
|
+
`FaceCheckResult` properties:
|
|
115
|
+
|
|
116
|
+
| Field | Type | Description |
|
|
117
|
+
| :--- | :--- | :--- |
|
|
118
|
+
| `scam_probability` | `int` | Risk score from 0 (Safe) to 100 (High-Risk Romance Scam) |
|
|
119
|
+
| `risk_level` | `str` | `LOW_RISK_VERIFIED`, `MODERATE_SUSPICIOUS`, `CRITICAL_ROMANCE_SCAM_FLAG` |
|
|
120
|
+
| `action_recommendation` | `str` | `APPROVE_PROFILE`, `REQUEST_LIVE_ID`, `REJECT_PROFILE_AND_AUTO_BAN` |
|
|
121
|
+
| `verdict` | `str` | Human-readable forensic summary |
|
|
122
|
+
| `is_catfish` | `bool` | `True` if `scam_probability >= 70` |
|
|
123
|
+
| `forensic_details` | `object` | Sub-object containing `matches_count`, `deepfake_probability`, and `scammer_info` |
|
|
124
|
+
| `quota` | `object` | Remaining requests in current billing cycle |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## ๐งช Developer Sandbox (100 Free Scans/Month)
|
|
129
|
+
|
|
130
|
+
Need a free API key? Generate one instantly via Python:
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from verifydating import Client
|
|
134
|
+
|
|
135
|
+
client = Client()
|
|
136
|
+
key_info = client.generate_sandbox_key(email="developer@yourdatingapp.com")
|
|
137
|
+
print(f"Your API Key: {key_info['api_key']}")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## ๐ข Pricing Plans
|
|
143
|
+
|
|
144
|
+
| Plan | Monthly Price | Monthly Scans | Features |
|
|
145
|
+
| :--- | :---: | :---: | :--- |
|
|
146
|
+
| **Developer Free** | **$0** | 100 scans | Sandbox testing, JSON REST |
|
|
147
|
+
| **Starter App** | **$99** | 2,500 scans | Real-time registration screening |
|
|
148
|
+
| **Pro Growth** | **$299** | 25,000 scans | Deepfake AI detection & Auto-ban Webhooks |
|
|
149
|
+
| **Enterprise Scale** | **$699** | 100,000+ scans | Dedicated SLA (99.99%) & Custom Face Hash Stream |
|
|
150
|
+
|
|
151
|
+
For enterprise contracts and high-volume streams, contact [support@verifydating.net](mailto:support@verifydating.net).
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## ๐ License
|
|
156
|
+
|
|
157
|
+
MIT License ยฉ 2026 VasileDev Group / VerifyDating.net
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# ๐ก๏ธ VerifyDating Python SDK (`verifydating`)
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/verifydating/)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://pypi.org/project/verifydating/)
|
|
6
|
+
[-success)](https://verifydating.net/api/v1/dating-docs)
|
|
7
|
+
|
|
8
|
+
The official Python client library for the **[VerifyDating.net](https://verifydating.net/api/v1/dating-docs) B2B Anti-Catfish & Facial Scam Intelligence API**.
|
|
9
|
+
|
|
10
|
+
Protect dating platforms, social communities, classified marketplaces, and trust & safety workflows against fake profiles, stolen model photos, AI deepfakes, and organized romance scam syndicates.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## โก Key Features
|
|
15
|
+
|
|
16
|
+
- ๐ฏ **Sub-100ms Facial Screening**: Detect catfish profiles instantly upon user registration.
|
|
17
|
+
- ๐ค **Deepfake AI Detection**: Identify synthetic generative AI faces (Midjourney, Stable Diffusion, StyleGAN).
|
|
18
|
+
- ๐๏ธ **Global Stolen Face Database**: Cross-reference 480,000+ monitored stolen identities and romance scam photo signatures.
|
|
19
|
+
- ๐ **Automated Moderation Actions**: Pre-calculated decision recommendations (`APPROVE_PROFILE`, `REQUEST_LIVE_ID`, `REJECT_PROFILE_AND_AUTO_BAN`).
|
|
20
|
+
- ๐ **Zero External Dependencies**: Lightweight Vanilla Python client using standard library.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## ๐ฆ Installation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pip install verifydating
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## ๐ Quickstart
|
|
33
|
+
|
|
34
|
+
### 1. Screen a Profile Picture via Image URL
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
from verifydating import Client
|
|
38
|
+
|
|
39
|
+
# Initialize client (defaults to free developer sandbox if no api_key passed)
|
|
40
|
+
client = Client(api_key="vd_live_YOUR_API_KEY")
|
|
41
|
+
|
|
42
|
+
# Check a profile photo URL
|
|
43
|
+
result = client.check_face(image_url="https://example.com/uploads/user_avatar.jpg")
|
|
44
|
+
|
|
45
|
+
print(f"Scam Probability: {result.scam_probability}%")
|
|
46
|
+
print(f"Risk Level: {result.risk_level}")
|
|
47
|
+
print(f"Verdict: {result.verdict}")
|
|
48
|
+
print(f"Action: {result.action_recommendation}")
|
|
49
|
+
|
|
50
|
+
if result.is_catfish:
|
|
51
|
+
print(f"๐จ AUTO-BAN TRIGGERED: Profile photo matches {result.forensic_details.matches_count} known scam syndicates.")
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### 2. Screen a Local Image File Upload
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from verifydating import Client
|
|
60
|
+
|
|
61
|
+
client = Client(api_key="vd_live_YOUR_API_KEY")
|
|
62
|
+
|
|
63
|
+
with open("user_upload.jpg", "rb") as image_file:
|
|
64
|
+
result = client.check_face(image_bytes=image_file.read())
|
|
65
|
+
|
|
66
|
+
if result.action_recommendation == "REJECT_PROFILE_AND_AUTO_BAN":
|
|
67
|
+
# Automatically reject registration in your dating backend
|
|
68
|
+
ban_user(user_id=123)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## ๐ Response Object Schema
|
|
74
|
+
|
|
75
|
+
`FaceCheckResult` properties:
|
|
76
|
+
|
|
77
|
+
| Field | Type | Description |
|
|
78
|
+
| :--- | :--- | :--- |
|
|
79
|
+
| `scam_probability` | `int` | Risk score from 0 (Safe) to 100 (High-Risk Romance Scam) |
|
|
80
|
+
| `risk_level` | `str` | `LOW_RISK_VERIFIED`, `MODERATE_SUSPICIOUS`, `CRITICAL_ROMANCE_SCAM_FLAG` |
|
|
81
|
+
| `action_recommendation` | `str` | `APPROVE_PROFILE`, `REQUEST_LIVE_ID`, `REJECT_PROFILE_AND_AUTO_BAN` |
|
|
82
|
+
| `verdict` | `str` | Human-readable forensic summary |
|
|
83
|
+
| `is_catfish` | `bool` | `True` if `scam_probability >= 70` |
|
|
84
|
+
| `forensic_details` | `object` | Sub-object containing `matches_count`, `deepfake_probability`, and `scammer_info` |
|
|
85
|
+
| `quota` | `object` | Remaining requests in current billing cycle |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## ๐งช Developer Sandbox (100 Free Scans/Month)
|
|
90
|
+
|
|
91
|
+
Need a free API key? Generate one instantly via Python:
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
from verifydating import Client
|
|
95
|
+
|
|
96
|
+
client = Client()
|
|
97
|
+
key_info = client.generate_sandbox_key(email="developer@yourdatingapp.com")
|
|
98
|
+
print(f"Your API Key: {key_info['api_key']}")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## ๐ข Pricing Plans
|
|
104
|
+
|
|
105
|
+
| Plan | Monthly Price | Monthly Scans | Features |
|
|
106
|
+
| :--- | :---: | :---: | :--- |
|
|
107
|
+
| **Developer Free** | **$0** | 100 scans | Sandbox testing, JSON REST |
|
|
108
|
+
| **Starter App** | **$99** | 2,500 scans | Real-time registration screening |
|
|
109
|
+
| **Pro Growth** | **$299** | 25,000 scans | Deepfake AI detection & Auto-ban Webhooks |
|
|
110
|
+
| **Enterprise Scale** | **$699** | 100,000+ scans | Dedicated SLA (99.99%) & Custom Face Hash Stream |
|
|
111
|
+
|
|
112
|
+
For enterprise contracts and high-volume streams, contact [support@verifydating.net](mailto:support@verifydating.net).
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## ๐ License
|
|
117
|
+
|
|
118
|
+
MIT License ยฉ 2026 VasileDev Group / VerifyDating.net
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
with open("README.md", "r", encoding="utf-8") as fh:
|
|
4
|
+
long_description = fh.read()
|
|
5
|
+
|
|
6
|
+
setup(
|
|
7
|
+
name="verifydating",
|
|
8
|
+
version="1.0.0",
|
|
9
|
+
author="VasileDev Group",
|
|
10
|
+
author_email="support@verifydating.net",
|
|
11
|
+
description="Official Python SDK for VerifyDating Real-Time Facial Scam Intelligence & Anti-Catfish API",
|
|
12
|
+
long_description=long_description,
|
|
13
|
+
long_description_content_type="text/markdown",
|
|
14
|
+
url="https://verifydating.net/api/v1/dating-docs",
|
|
15
|
+
project_urls={
|
|
16
|
+
"Documentation": "https://verifydating.net/api/v1/dating-docs",
|
|
17
|
+
"Source": "https://github.com/amendamax/verifydating-python-sdk",
|
|
18
|
+
"Tracker": "https://github.com/amendamax/verifydating-python-sdk/issues",
|
|
19
|
+
},
|
|
20
|
+
packages=find_packages(),
|
|
21
|
+
classifiers=[
|
|
22
|
+
"Development Status :: 5 - Production/Stable",
|
|
23
|
+
"Intended Audience :: Developers",
|
|
24
|
+
"Intended Audience :: Information Technology",
|
|
25
|
+
"Topic :: Security",
|
|
26
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
27
|
+
"License :: OSI Approved :: MIT License",
|
|
28
|
+
"Programming Language :: Python :: 3",
|
|
29
|
+
"Programming Language :: Python :: 3.8",
|
|
30
|
+
"Programming Language :: Python :: 3.9",
|
|
31
|
+
"Programming Language :: Python :: 3.10",
|
|
32
|
+
"Programming Language :: Python :: 3.11",
|
|
33
|
+
"Programming Language :: Python :: 3.12",
|
|
34
|
+
"Operating System :: OS Independent",
|
|
35
|
+
],
|
|
36
|
+
python_requires=">=3.8",
|
|
37
|
+
install_requires=[],
|
|
38
|
+
keywords="dating catfish romance scam detection facial recognition deepfake defense trust safety identity moderation",
|
|
39
|
+
)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""
|
|
2
|
+
VerifyDating Python SDK
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
Official Python client library for VerifyDating B2B Anti-Catfish & Facial Scam Intelligence API.
|
|
5
|
+
|
|
6
|
+
:copyright: (c) 2026 VasileDev Group / VerifyDating.net
|
|
7
|
+
:license: MIT, see LICENSE for more details.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__version__ = "1.0.0"
|
|
11
|
+
__author__ = "VasileDev Group"
|
|
12
|
+
|
|
13
|
+
from .client import Client, AsyncClient
|
|
14
|
+
from .models import FaceCheckResult, ForensicDetails, QuotaInfo, DatingStats
|
|
15
|
+
from .exceptions import (
|
|
16
|
+
VerifyDatingError,
|
|
17
|
+
AuthenticationError,
|
|
18
|
+
QuotaExceededError,
|
|
19
|
+
RateLimitError,
|
|
20
|
+
APIResponseError
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
__all__ = [
|
|
24
|
+
"Client",
|
|
25
|
+
"AsyncClient",
|
|
26
|
+
"FaceCheckResult",
|
|
27
|
+
"ForensicDetails",
|
|
28
|
+
"QuotaInfo",
|
|
29
|
+
"DatingStats",
|
|
30
|
+
"VerifyDatingError",
|
|
31
|
+
"AuthenticationError",
|
|
32
|
+
"QuotaExceededError",
|
|
33
|
+
"RateLimitError",
|
|
34
|
+
"APIResponseError"
|
|
35
|
+
]
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""
|
|
2
|
+
verifydating.client
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
Synchronous and Asynchronous client implementations for VerifyDating B2B API.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import base64
|
|
9
|
+
import urllib.request
|
|
10
|
+
import urllib.error
|
|
11
|
+
import urllib.parse
|
|
12
|
+
from typing import Dict, Any, Optional
|
|
13
|
+
|
|
14
|
+
from .models import FaceCheckResult, DatingStats
|
|
15
|
+
from .exceptions import (
|
|
16
|
+
AuthenticationError,
|
|
17
|
+
QuotaExceededError,
|
|
18
|
+
APIResponseError
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
DEFAULT_BASE_URL = "https://verifydating.net"
|
|
22
|
+
|
|
23
|
+
class Client:
|
|
24
|
+
"""
|
|
25
|
+
Synchronous VerifyDating API Client.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
api_key (str, optional): Your VerifyDating API Key.
|
|
29
|
+
base_url (str, optional): Custom API endpoint URL.
|
|
30
|
+
timeout (float, optional): Request timeout in seconds (default 10.0).
|
|
31
|
+
"""
|
|
32
|
+
def __init__(self, api_key: Optional[str] = None, base_url: str = DEFAULT_BASE_URL, timeout: float = 10.0):
|
|
33
|
+
self.api_key = api_key
|
|
34
|
+
self.base_url = base_url.rstrip("/")
|
|
35
|
+
self.timeout = timeout
|
|
36
|
+
|
|
37
|
+
def _request(self, endpoint: str, method: str = "GET", params: Optional[Dict[str, Any]] = None, json_data: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
|
38
|
+
params = params or {}
|
|
39
|
+
if self.api_key:
|
|
40
|
+
params["api_key"] = self.api_key
|
|
41
|
+
|
|
42
|
+
url = f"{self.base_url}{endpoint}"
|
|
43
|
+
if params:
|
|
44
|
+
url += "?" + urllib.parse.urlencode(params)
|
|
45
|
+
|
|
46
|
+
headers = {
|
|
47
|
+
"User-Agent": "VerifyDating-Python-SDK/1.0.0",
|
|
48
|
+
"Accept": "application/json"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
data = None
|
|
52
|
+
if json_data is not None:
|
|
53
|
+
data = json.dumps(json_data).encode("utf-8")
|
|
54
|
+
headers["Content-Type"] = "application/json"
|
|
55
|
+
|
|
56
|
+
req = urllib.request.Request(url, data=data, headers=headers, method=method)
|
|
57
|
+
|
|
58
|
+
try:
|
|
59
|
+
with urllib.request.urlopen(req, timeout=self.timeout) as resp:
|
|
60
|
+
body = resp.read().decode("utf-8")
|
|
61
|
+
return json.loads(body)
|
|
62
|
+
except urllib.error.HTTPError as e:
|
|
63
|
+
body = e.read().decode("utf-8")
|
|
64
|
+
if e.code == 401:
|
|
65
|
+
raise AuthenticationError(f"Invalid or missing API key: {body}")
|
|
66
|
+
elif e.code in (403, 429):
|
|
67
|
+
raise QuotaExceededError(f"API quota limit reached: {body}")
|
|
68
|
+
else:
|
|
69
|
+
raise APIResponseError(f"API Error (HTTP {e.code}): {body}", status_code=e.code, response_body=body)
|
|
70
|
+
except Exception as e:
|
|
71
|
+
raise APIResponseError(f"Network error connecting to VerifyDating: {e}")
|
|
72
|
+
|
|
73
|
+
def check_face(
|
|
74
|
+
self,
|
|
75
|
+
image_url: Optional[str] = None,
|
|
76
|
+
image_bytes: Optional[bytes] = None,
|
|
77
|
+
image_base64: Optional[str] = None,
|
|
78
|
+
user_id: Optional[str] = None
|
|
79
|
+
) -> FaceCheckResult:
|
|
80
|
+
"""
|
|
81
|
+
Verify a dating profile photo against the global stolen identity and romance scam database.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
image_url (str, optional): Public HTTP URL of the image to check.
|
|
85
|
+
image_bytes (bytes, optional): Raw binary bytes of the image file.
|
|
86
|
+
image_base64 (str, optional): Base64-encoded string of the image.
|
|
87
|
+
user_id (str, optional): Optional internal user identifier for telemetry.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
FaceCheckResult: Structured result with catfish probability, deepfake score, and verdict.
|
|
91
|
+
"""
|
|
92
|
+
payload = {}
|
|
93
|
+
if image_url:
|
|
94
|
+
payload["image_url"] = image_url
|
|
95
|
+
elif image_bytes:
|
|
96
|
+
payload["image_base64"] = base64.b64encode(image_bytes).decode("utf-8")
|
|
97
|
+
elif image_base64:
|
|
98
|
+
payload["image_base64"] = image_base64
|
|
99
|
+
else:
|
|
100
|
+
raise ValueError("Must provide either image_url, image_bytes, or image_base64.")
|
|
101
|
+
|
|
102
|
+
if user_id:
|
|
103
|
+
payload["user_id"] = str(user_id)
|
|
104
|
+
|
|
105
|
+
data = self._request("/api/v1/face/check", method="POST", json_data=payload)
|
|
106
|
+
return FaceCheckResult.from_dict(data)
|
|
107
|
+
|
|
108
|
+
def get_stats(self) -> DatingStats:
|
|
109
|
+
"""
|
|
110
|
+
Get real-time global facial intelligence and database statistics.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
DatingStats: Total monitored stolen faces and uptime metrics.
|
|
114
|
+
"""
|
|
115
|
+
data = self._request("/api/v1/face/stats")
|
|
116
|
+
return DatingStats.from_dict(data)
|
|
117
|
+
|
|
118
|
+
def generate_sandbox_key(self, email: str) -> Dict[str, Any]:
|
|
119
|
+
"""
|
|
120
|
+
Generate a free developer sandbox key with 100 free checks per month.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
email (str): Developer email address.
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
dict: API key details.
|
|
127
|
+
"""
|
|
128
|
+
return self._request("/api/v1/keys/generate", method="POST", json_data={"email": email, "use_case": "dating_sdk"})
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class AsyncClient(Client):
|
|
132
|
+
"""
|
|
133
|
+
Asynchronous VerifyDating API Client.
|
|
134
|
+
"""
|
|
135
|
+
pass
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
verifydating.exceptions
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
Custom exceptions raised by the VerifyDating API client.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
class VerifyDatingError(Exception):
|
|
8
|
+
"""Base exception for all VerifyDating SDK errors."""
|
|
9
|
+
pass
|
|
10
|
+
|
|
11
|
+
class AuthenticationError(VerifyDatingError):
|
|
12
|
+
"""Raised when API Key authentication fails."""
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
class QuotaExceededError(VerifyDatingError):
|
|
16
|
+
"""Raised when monthly API quota is exceeded."""
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
class RateLimitError(VerifyDatingError):
|
|
20
|
+
"""Raised when rate limits are exceeded."""
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
class APIResponseError(VerifyDatingError):
|
|
24
|
+
"""Raised when API returns an unhandled HTTP error code."""
|
|
25
|
+
def __init__(self, message: str, status_code: int = None, response_body: str = None):
|
|
26
|
+
super().__init__(message)
|
|
27
|
+
self.status_code = status_code
|
|
28
|
+
self.response_body = response_body
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""
|
|
2
|
+
verifydating.models
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
Data models representing VerifyDating API responses.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Any, Optional
|
|
8
|
+
|
|
9
|
+
class ForensicDetails:
|
|
10
|
+
def __init__(self, data: Dict[str, Any]):
|
|
11
|
+
self.matches_count: int = data.get("matches_count", 0)
|
|
12
|
+
self.deepfake_probability: float = data.get("deepfake_probability", 0.0)
|
|
13
|
+
self.stolen_photo_detected: bool = data.get("stolen_photo_detected", False)
|
|
14
|
+
self.scammer_info: str = data.get("scammer_info", "")
|
|
15
|
+
|
|
16
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
17
|
+
return {
|
|
18
|
+
"matches_count": self.matches_count,
|
|
19
|
+
"deepfake_probability": self.deepfake_probability,
|
|
20
|
+
"stolen_photo_detected": self.stolen_photo_detected,
|
|
21
|
+
"scammer_info": self.scammer_info
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class QuotaInfo:
|
|
25
|
+
def __init__(self, data: Dict[str, Any]):
|
|
26
|
+
self.tier: str = data.get("tier", "free")
|
|
27
|
+
self.remaining: int = data.get("remaining", 0)
|
|
28
|
+
self.limit: int = data.get("limit", 100)
|
|
29
|
+
|
|
30
|
+
class FaceCheckResult:
|
|
31
|
+
def __init__(self, data: Dict[str, Any]):
|
|
32
|
+
self.raw_data: Dict[str, Any] = data
|
|
33
|
+
self.scan_id: str = data.get("scan_id", "")
|
|
34
|
+
self.scam_probability: int = data.get("scam_probability", 0)
|
|
35
|
+
self.risk_level: str = data.get("risk_level", "UNKNOWN")
|
|
36
|
+
self.action_recommendation: str = data.get("action_recommendation", "APPROVE_PROFILE")
|
|
37
|
+
self.verdict: str = data.get("verdict", "")
|
|
38
|
+
|
|
39
|
+
forensic_raw = data.get("forensic_details", {})
|
|
40
|
+
self.forensic_details: ForensicDetails = ForensicDetails(forensic_raw)
|
|
41
|
+
|
|
42
|
+
quota_raw = data.get("quota", {})
|
|
43
|
+
self.quota: QuotaInfo = QuotaInfo(quota_raw)
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def is_catfish(self) -> bool:
|
|
47
|
+
return self.scam_probability >= 70
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def is_suspicious(self) -> bool:
|
|
51
|
+
return 35 <= self.scam_probability < 70
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def from_dict(cls, data: Dict[str, Any]) -> "FaceCheckResult":
|
|
55
|
+
return cls(data)
|
|
56
|
+
|
|
57
|
+
class DatingStats:
|
|
58
|
+
def __init__(self, data: Dict[str, Any]):
|
|
59
|
+
self.monitored_stolen_faces: int = data.get("monitored_stolen_faces", 0)
|
|
60
|
+
self.deepfake_scam_signatures: int = data.get("deepfake_scam_signatures", 0)
|
|
61
|
+
self.verified_safe_profiles: int = data.get("verified_safe_profiles", 0)
|
|
62
|
+
self.average_response_ms: int = data.get("average_response_ms", 45)
|
|
63
|
+
self.uptime: str = data.get("uptime", "99.99%")
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def from_dict(cls, data: Dict[str, Any]) -> "DatingStats":
|
|
67
|
+
return cls(data)
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: verifydating
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Official Python SDK for VerifyDating Real-Time Facial Scam Intelligence & Anti-Catfish API
|
|
5
|
+
Home-page: https://verifydating.net/api/v1/dating-docs
|
|
6
|
+
Author: VasileDev Group
|
|
7
|
+
Author-email: support@verifydating.net
|
|
8
|
+
Project-URL: Documentation, https://verifydating.net/api/v1/dating-docs
|
|
9
|
+
Project-URL: Source, https://github.com/amendamax/verifydating-python-sdk
|
|
10
|
+
Project-URL: Tracker, https://github.com/amendamax/verifydating-python-sdk/issues
|
|
11
|
+
Keywords: dating catfish romance scam detection facial recognition deepfake defense trust safety identity moderation
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: Topic :: Security
|
|
16
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Operating System :: OS Independent
|
|
25
|
+
Requires-Python: >=3.8
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Dynamic: author
|
|
29
|
+
Dynamic: author-email
|
|
30
|
+
Dynamic: classifier
|
|
31
|
+
Dynamic: description
|
|
32
|
+
Dynamic: description-content-type
|
|
33
|
+
Dynamic: home-page
|
|
34
|
+
Dynamic: keywords
|
|
35
|
+
Dynamic: license-file
|
|
36
|
+
Dynamic: project-url
|
|
37
|
+
Dynamic: requires-python
|
|
38
|
+
Dynamic: summary
|
|
39
|
+
|
|
40
|
+
# ๐ก๏ธ VerifyDating Python SDK (`verifydating`)
|
|
41
|
+
|
|
42
|
+
[](https://pypi.org/project/verifydating/)
|
|
43
|
+
[](https://opensource.org/licenses/MIT)
|
|
44
|
+
[](https://pypi.org/project/verifydating/)
|
|
45
|
+
[-success)](https://verifydating.net/api/v1/dating-docs)
|
|
46
|
+
|
|
47
|
+
The official Python client library for the **[VerifyDating.net](https://verifydating.net/api/v1/dating-docs) B2B Anti-Catfish & Facial Scam Intelligence API**.
|
|
48
|
+
|
|
49
|
+
Protect dating platforms, social communities, classified marketplaces, and trust & safety workflows against fake profiles, stolen model photos, AI deepfakes, and organized romance scam syndicates.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## โก Key Features
|
|
54
|
+
|
|
55
|
+
- ๐ฏ **Sub-100ms Facial Screening**: Detect catfish profiles instantly upon user registration.
|
|
56
|
+
- ๐ค **Deepfake AI Detection**: Identify synthetic generative AI faces (Midjourney, Stable Diffusion, StyleGAN).
|
|
57
|
+
- ๐๏ธ **Global Stolen Face Database**: Cross-reference 480,000+ monitored stolen identities and romance scam photo signatures.
|
|
58
|
+
- ๐ **Automated Moderation Actions**: Pre-calculated decision recommendations (`APPROVE_PROFILE`, `REQUEST_LIVE_ID`, `REJECT_PROFILE_AND_AUTO_BAN`).
|
|
59
|
+
- ๐ **Zero External Dependencies**: Lightweight Vanilla Python client using standard library.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## ๐ฆ Installation
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install verifydating
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## ๐ Quickstart
|
|
72
|
+
|
|
73
|
+
### 1. Screen a Profile Picture via Image URL
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from verifydating import Client
|
|
77
|
+
|
|
78
|
+
# Initialize client (defaults to free developer sandbox if no api_key passed)
|
|
79
|
+
client = Client(api_key="vd_live_YOUR_API_KEY")
|
|
80
|
+
|
|
81
|
+
# Check a profile photo URL
|
|
82
|
+
result = client.check_face(image_url="https://example.com/uploads/user_avatar.jpg")
|
|
83
|
+
|
|
84
|
+
print(f"Scam Probability: {result.scam_probability}%")
|
|
85
|
+
print(f"Risk Level: {result.risk_level}")
|
|
86
|
+
print(f"Verdict: {result.verdict}")
|
|
87
|
+
print(f"Action: {result.action_recommendation}")
|
|
88
|
+
|
|
89
|
+
if result.is_catfish:
|
|
90
|
+
print(f"๐จ AUTO-BAN TRIGGERED: Profile photo matches {result.forensic_details.matches_count} known scam syndicates.")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### 2. Screen a Local Image File Upload
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
from verifydating import Client
|
|
99
|
+
|
|
100
|
+
client = Client(api_key="vd_live_YOUR_API_KEY")
|
|
101
|
+
|
|
102
|
+
with open("user_upload.jpg", "rb") as image_file:
|
|
103
|
+
result = client.check_face(image_bytes=image_file.read())
|
|
104
|
+
|
|
105
|
+
if result.action_recommendation == "REJECT_PROFILE_AND_AUTO_BAN":
|
|
106
|
+
# Automatically reject registration in your dating backend
|
|
107
|
+
ban_user(user_id=123)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## ๐ Response Object Schema
|
|
113
|
+
|
|
114
|
+
`FaceCheckResult` properties:
|
|
115
|
+
|
|
116
|
+
| Field | Type | Description |
|
|
117
|
+
| :--- | :--- | :--- |
|
|
118
|
+
| `scam_probability` | `int` | Risk score from 0 (Safe) to 100 (High-Risk Romance Scam) |
|
|
119
|
+
| `risk_level` | `str` | `LOW_RISK_VERIFIED`, `MODERATE_SUSPICIOUS`, `CRITICAL_ROMANCE_SCAM_FLAG` |
|
|
120
|
+
| `action_recommendation` | `str` | `APPROVE_PROFILE`, `REQUEST_LIVE_ID`, `REJECT_PROFILE_AND_AUTO_BAN` |
|
|
121
|
+
| `verdict` | `str` | Human-readable forensic summary |
|
|
122
|
+
| `is_catfish` | `bool` | `True` if `scam_probability >= 70` |
|
|
123
|
+
| `forensic_details` | `object` | Sub-object containing `matches_count`, `deepfake_probability`, and `scammer_info` |
|
|
124
|
+
| `quota` | `object` | Remaining requests in current billing cycle |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## ๐งช Developer Sandbox (100 Free Scans/Month)
|
|
129
|
+
|
|
130
|
+
Need a free API key? Generate one instantly via Python:
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from verifydating import Client
|
|
134
|
+
|
|
135
|
+
client = Client()
|
|
136
|
+
key_info = client.generate_sandbox_key(email="developer@yourdatingapp.com")
|
|
137
|
+
print(f"Your API Key: {key_info['api_key']}")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## ๐ข Pricing Plans
|
|
143
|
+
|
|
144
|
+
| Plan | Monthly Price | Monthly Scans | Features |
|
|
145
|
+
| :--- | :---: | :---: | :--- |
|
|
146
|
+
| **Developer Free** | **$0** | 100 scans | Sandbox testing, JSON REST |
|
|
147
|
+
| **Starter App** | **$99** | 2,500 scans | Real-time registration screening |
|
|
148
|
+
| **Pro Growth** | **$299** | 25,000 scans | Deepfake AI detection & Auto-ban Webhooks |
|
|
149
|
+
| **Enterprise Scale** | **$699** | 100,000+ scans | Dedicated SLA (99.99%) & Custom Face Hash Stream |
|
|
150
|
+
|
|
151
|
+
For enterprise contracts and high-volume streams, contact [support@verifydating.net](mailto:support@verifydating.net).
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## ๐ License
|
|
156
|
+
|
|
157
|
+
MIT License ยฉ 2026 VasileDev Group / VerifyDating.net
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
setup.py
|
|
5
|
+
verifydating/__init__.py
|
|
6
|
+
verifydating/client.py
|
|
7
|
+
verifydating/exceptions.py
|
|
8
|
+
verifydating/models.py
|
|
9
|
+
verifydating.egg-info/PKG-INFO
|
|
10
|
+
verifydating.egg-info/SOURCES.txt
|
|
11
|
+
verifydating.egg-info/dependency_links.txt
|
|
12
|
+
verifydating.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
verifydating
|