POST
/api/v1/verifications/photoVerifica da foto
Invia una foto per age assurance low-friction. Il sistema stima la fascia di età, valuta liveness passiva, rileva spoof e media sintetici, e restituisce una decisione a soglia. È il flusso più veloce e meno invasivo.
Headers obbligatori
| Authorization | Bearer {token} |
| X-Channel-Id | {channel_id} |
| X-Api-Key | {api_key} |
Content-Type: multipart/form-data
Parametri richiesta
| Nome | Tipo | Req. | Note |
|---|---|---|---|
| photo | file | obbligatorio | jpeg, png, webp — max 10 MB |
Requisiti media
photo
Formati:JPEG, PNG, WebPMax:10 MBRisoluzione min:200×200 px
- ›Volto frontale ben centrato, occhi aperti
- ›Buona illuminazione — evita controluce o ombre sul viso
- ›No occhiali da sole, cappelli o altro che copre il viso
- ›Sfondo neutro preferibile, foto nitida e non mossa
Campi risposta (200 / 201)
| Campo | Tipo | Descrizione |
|---|---|---|
| id | uuid | ID della verifica generata |
| mode | string | "photo" |
| decision | string | "pass" | "fail" | "review_required" |
| review_required | boolean | true se la decisione è ambigua |
| estimated_age | float | stima numerica dell'età [0–100] — non è una certezza, MAE ~4.5 anni |
| age_band | string | es. "18-24" — fascia stimata, non età esatta |
| confidence | float | affidabilità della fascia [0–1] |
| reasons | array | cause della decisione (es. low_liveness_score) |
| document_fallback_available | boolean | se il doc fallback è abilitato per l'account |
| receipt_id | uuid | ID della receipt firmata |
| completed_at | ISO8601 | timestamp completamento |
Codici di errore
402Crediti insufficienti
403Mode "photo" non abilitato per questo account
422File mancante o formato non valido
503AI service temporaneamente non raggiungibile
Esempio cURL
curl -X POST https://api.proofage.eu/api/v1/verifications/photo \
-H "Authorization: Bearer {token}" \
-H "X-Channel-Id: {channel_id}" \
-H "X-Api-Key: {api_key}" \
-F "photo=@/path/to/selfie.jpg"Regole ProofAge EU/UK
- Le decisioni sono sempre pass / fail / review_required
- age_band è una stima a soglia — non espone l'età esatta come certezza
- Synthetic/deepfake risk sono segnali antifrode, non prove assolute
- Soglie: liveness ≥ 70% · spoof/synthetic ≤ 40% · deepfake ≤ 50%
- Nessun dato biometrico esce dai container — processing 100% locale