API playground
Score a device in three calls
Your backend mints a short-lived context token, the device submits an encrypted payload with it, and your backend reads the assessment.
- 01Mint a context tokenYour server signs a short-lived token for this session with your secret key.Your backendHS256 JWT
- 02Submit the encrypted payloadThe device sends its encrypted signals with the token and gets an assessment ID back.
POST/v1/assessments - 03Read the assessmentYour server reads the risk level, score and recommendation for that ID.
GET/v1/assessments/{id}
Try the API
Pick a language and see the request your device sends and the response your backend reads.
01 · POST /v1/assessmentscurl -X POST \ https://api.devizescore.com/v1/assessments \ -H "Content-Type: application/json" \ -H "X-Context-Token: <context-token>" \ -d '{ "encryptedPayload": "...", "encryptedKey": "...", "iv": "...", "authTag": "...", "keyVersion": "v2026-10", "algorithm": "RSA-OAEP-256+AES-256-GCM+AAD1"}'
const submit = await fetch('https://api.devizescore.com/v1/assessments', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Context-Token': '<context-token>', }, body: JSON.stringify({ "encryptedPayload": "...", "encryptedKey": "...", "iv": "...", "authTag": "...", "keyVersion": "v2026-10", "algorithm": "RSA-OAEP-256+AES-256-GCM+AAD1" }),});const { assessment_id, status, token_id } = await submit.json(); // 202 Accepted
import requestssubmit = requests.post( "https://api.devizescore.com/v1/assessments", headers={ "Content-Type": "application/json", "X-Context-Token": "<context-token>", }, json={ "encryptedPayload": "...", "encryptedKey": "...", "iv": "...", "authTag": "...", "keyVersion": "v2026-10", "algorithm": "RSA-OAEP-256+AES-256-GCM+AAD1" },)accepted = submit.json() # 202 Accepted
envelope := `{ "encryptedPayload": "...", "encryptedKey": "...", "iv": "...", "authTag": "...", "keyVersion": "v2026-10", "algorithm": "RSA-OAEP-256+AES-256-GCM+AAD1"}`req, _ := http.NewRequest("POST", "https://api.devizescore.com/v1/assessments", strings.NewReader(envelope))req.Header.Set("Content-Type", "application/json")req.Header.Set("X-Context-Token", "<context-token>")resp, _ := http.DefaultClient.Do(req) // 202 Accepted
202 Accepted
{ "assessment_id": "asm_k7r2m9p4x8c1v6b3n5q0w2e4t7y", "status": "PENDING", "token_id": "q4Hn2vX8sK1pL6mR9tY3wA" }Payload before encryption
q4Hn2vX8sK1pL6mR9tY3wAPlatformModelIP address
"signals": { "platform": "android", "model": "Pixel 7", "os_version": "14", "ip_address": "203.0.113.42", "network_type": "wifi", "risk_hints": { "is_emulator": false, "is_vpn": false }}
Sample 200 OK
- Risk level
- LOW
- Risk score
- 15
- Recommendation
- ALLOW
Trusted device, low risk
02 · GET /v1/assessments/asm_k7r2m9p4x8c1v6b3n5q0w2e4t7yALLOW{ "assessment_id": "asm_k7r2m9p4x8c1v6b3n5q0w2e4t7y", "status": "COMPLETED", "created_at": "2026-10-14T09:12:03.120Z", "completed_at": "2026-10-14T09:12:03.151Z", "token_id": "q4Hn2vX8sK1pL6mR9tY3wA", "token_conflict": false, "result": { "device_id": "dev_m3x9k2p7r4c8v1b6n0q5w2e4ty", "is_new_device": false, "recommendation": "ALLOW", "overall_risk_score": 15, "overall_risk_level": "LOW", "device_risk_score": 15, "behavioral_risk_score": 4, "reason_codes": [] }}
Sample responses. Keys and tokens are redacted.Security and compliance
One API for every surface
The Android, Web and React Native SDKs ship today. iOS and Flutter are coming.
Android
iOSComing
Web
React Native
FlutterComing
Server
Fields you get back
Persistent device identityDevice ID
device_idNew deviceis_new_deviceBehavioral biometricsPointer events
pointer_eventsAccelerometer intervalsaccel_intervalsGyroscope intervalsgyro_intervalsKey presseskey_press_eventsPlatform attestationPlay Integrity token
play_integrity_tokenApp Attest assertionapp_attest_assertionDeviceCheck tokendevice_check_tokenDevice farm detectionEmulator
is_emulatorReason codesreason_codesConfigurable enforcementBlock threshold
hard_block_thresholdStep-up thresholdstep_up_thresholdCross-platform coveragePlatform
platformSDK versionsdk_versionUser agentuser_agentFraud-ring clusteringReason codes
reason_codesRecommendationrecommendationAudit-ready decision contextRisk level
overall_risk_levelReason codesreason_codesRecommendationrecommendationReady to score your first device?
Get started with the DevizeScore API. Explore the documentation or talk to our team about your use case.