TDS Risk
Products
Trust Score โ€” ยฃ0.35/check Mobile KYC โ€” ยฃ0.45/check
Use cases
Consumer Lending Insurance Fintech & Payments iGaming Lead Generation Lead buying Affiliate Networks Account Creation
Developers
Getting Started Reason Codes Rule Studio Postman Collection Changelog System Status
Company
Pricing About Us Enterprise Contact Case Studies ROI Calculator Security & Compliance FAQ Trust Centre Sign up free โ†’
Getting Started

Make your first TDS Risk API request

From creating an account to receiving a live carrier-derived Trust Score โ€” this guide walks you through every step. No prior knowledge needed.

1
Create your account
โฑ ~2 minutes

Go to thedatasupermarket.com and click Sign up free. You'll need a work email address and your business details. No credit card required at this stage.

No sales call required. Account creation is entirely self-serve. You'll be in the dashboard within 3 minutes of landing on the signup page.
โœ“Enter your work email address
โœ“Set a password
โœ“Verify your email address
โœ“Confirm your business details
2
Generate your API key
โฑ ~3 minutes

In the dashboard, navigate to Settings โ†’ API Keys โ†’ Create new key. You'll need to declare your legal basis and use case. TDS Risk validates these automatically and generates your GDPR-compliant policy wording.

What is a legal basis? This is the GDPR Article 6 basis on which you're processing the data. For most fraud prevention use cases, this is Legitimate Interest (Art. 6(1)(f)). If you're not sure, choose Legitimate Interest โ€” it's the most common for fraud screening.
Privacy policy required. Before your key is activated, you'll need to paste your privacy policy URL. TDS Risk scans it automatically to verify the required disclosures are present. Use the generated wording TDS Risk provides โ€” it's already compliant.
โœ“Select product: Trust Score or Mobile KYC
โœ“Select legal basis (Legitimate Interest for most use cases)
โœ“Select your declared use case
โœ“Copy the generated privacy policy wording into your policy
โœ“Paste your policy URL โ€” automated scan verifies compliance
โœ“ Your API key is generated on pass.
3
Top up your credits
โฑ ~1 minute

In the dashboard, go to Billing โ†’ Add credits. Enter your debit or credit card. Credits appear in your account instantly. Trust Score checks cost ยฃ0.35 each, Mobile KYC ยฃ0.45 each.

Credits never expire. Top up as much or as little as you like. There's no minimum. Credits roll over indefinitely โ€” no pressure to use them by a deadline.
โœ“Navigate to Billing in the dashboard
โœ“Enter debit or credit card details
โœ“Select credit amount (start small โ€” you can top up anytime)
โœ“Credits appear in your balance immediately
โœ“Your invoice will be generated instantly upon successful top-up
4
Make your first API call
โฑ ~2 minutes

Copy your API key from the dashboard and use it in the header of your request. Replace the phone number with a real UK mobile number to get a live result.

Trust Score โ€” POST /api/trust-score
curl
JavaScript
Python
curl -X POST "https://www.thedatasupermarket.com/api/trust-score" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "customerReference": "my-first-check-001", "leadSourceId": "WEB_FORM_001", "phoneNumber": "447911123456", "country": "GB", "details": true }'
// Node.js / fetch const response = await fetch('https://www.thedatasupermarket.com/api/trust-score', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ customerReference: 'my-first-check-001', leadSourceId: 'WEB_FORM_001', phoneNumber: '447911123456', country: 'GB', details: true }) }); const data = await response.json(); console.log(data.response.trustScore); // e.g. 820
import requests response = requests.post( 'https://www.thedatasupermarket.com/api/trust-score', headers={ 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }, json={ 'customerReference': 'my-first-check-001', 'leadSourceId': 'WEB_FORM_001', 'phoneNumber': '447911123456', 'country': 'GB', 'details': True } ) data = response.json() print(data['response']['trustScore']) # e.g. 820
customerReference must be unique per call. Use a UUID, your internal transaction ID, or any unique string. The customerReference is recorded in the audit trail for every check. leadSourceId is optional โ€” it tags the check with where the lead came from (e.g. a form name or campaign ID) so it can be filtered on later; it defaults to "API" if omitted.
5
Understand the response
โฑ ~2 minutes reading

A successful Trust Score response looks like this. Here's what each field means and how to act on it.

Example Trust Score response
200 OK
"status": 0, "ipMatch": true, "customerReference": "my-first-check-001", "leadSource": "WEB_FORM_001", "requestId": "TDS68ba778a51ccb", "signature": "b5ed745afd02bd32a70f82dafc6fb2a41394e579206f39efa5", "response": { "trustScore": 820, // 0โ€“1000. Higher = more trusted "indicators": ["PT"], // PT = ported ยท info "callDivert": false, // Not call-forwarded โœ“ "phoneRisk": false, // Not on shared fraud lists โœ“ "details": { "riskLevel": 4, // 4 = no SIM swap in 720+ hours โœ“ "simTimestamp": "2023-05-22T03:48:21Z" // Last SIM event }, "troubleshootingId": "7c179940-d14b-477f-8a5e-123456789abc", "numberInfo": { "carrier": "EE", "lineType": "mobile", // Not VoIP, not landline โœ“ "countryCode": "GB" } }, "audit_url": "https://www.thedatasupermarket.com/tds-verify/audit-summary/7c179940-d14b-477f-8a5e-123456789abc", "policy_version": "1.1", "policy_hash": "abc123", "latency_ms": 1150
status
0 = success. Any non-zero value means the check failed โ€” see the error reference for what each code means.
0 = success โœ“
ipMatch
true = the request's source IP is consistent with the phone number's registered country. Useful signal against proxied/VPN submissions.
true = consistent โœ“
leadSource
Echoes back the leadSourceId you sent (or "API" if you didn't send one). Lets you filter checks by source in Verification History.
"WEB_FORM_001"
requestId
Unique identifier for this API call. Use this when contacting support or cross-referencing audit logs.
Unique ID per call
signature
Cryptographic signature for this specific response. Pass it along with requestId to the Risk Recall endpoint to retrieve the frozen original result later.
Per-call signature
trustScore
0โ€“1000 composite risk score. Most teams gate at 600โ€“700: above = proceed, below = review or reject. Tune to your own fraud rate.
820 = high trust โœ“
indicators
Array of reason codes explaining the score. PT = ported number (informational). D1 = the number's text messages are exposed publicly (block). See full reason code reference.
["PT"] = informational
callDivert
true = the number currently has call forwarding active. Can indicate the SIM has been compromised or reassigned.
false = not diverted โœ“
phoneRisk
true = number appears on public shared fraud lists. Block if true โ€” these are never genuine submissions.
false = clean โœ“
riskLevel
SIM swap recency. 1 = swapped in last 24 hrs (block). 4 = no swap in 720+ hrs (safe). -1 = carrier data unavailable.
4 = low risk โœ“
simTimestamp
ISO 8601 timestamp of the last SIM swap event for this number. Use this to calculate how long ago the SIM changed.
Last SIM event date
lineType
If not "mobile", consider blocking. fixedvoip and nonfixedvoip are associated with fraud. landline can't receive OTPs.
"mobile" = valid โœ“
audit_url
Permanent link to the immutable, signed audit record for this check. ICO-admissible evidence.
Permanent URL
policy_version
The privacy policy version that was in effect for this check, taken from your API key's linked policy scan. Proves which consent terms applied at the time.
"1.1"
policy_hash
The privacy policy hash that was in effect for this check, taken from your API key's linked policy scan. Proves which consent terms applied at the time.
"abc123"
latency_ms
Time in milliseconds taken to return the carrier response. Typically under 2 seconds for live checks.
1150 ms โœ“
6
Go live
โฑ You're ready

Once you've tested with real numbers in your sandbox environment and are happy with your decision logic, switch your base URL to production and you're live. Every check from this point produces a live carrier-derived result and a signed audit record.

You're live. Every check now queries live UK carrier data in real time. Responses arrive in under 2 seconds. Each check deducts from your credit balance and produces a permanent, signed audit record.
Production base URL
// Switch from sandbox to production // Sandbox: https://www.thedatasupermarket.com/api/sandbox/trust-score // Production: https://www.thedatasupermarket.com/api/trust-score // Everything else stays the same // Same headers, same request body, same response shape
What to explore next