API di Verifica Certificati
L'API di verifica certificati permette di verificare l'autenticità di certificati, libretti formativi e attestati di corsi attraverso il loro codice univoco blockchain.
Endpoint
| GET https://bc.formedil.it/api/verify/:code
|
Autenticazione
Richiede autenticazione tramite API token.
Parametri URL
| Parametro |
Tipo |
Descrizione |
Obbligatorio |
| code |
string |
Codice di verifica nel formato TXID-TIPO-CODICEID |
Sì |
Il parametro code deve essere nel formato: TXID-TIPO-CODICEID dove:
TXID: Identificativo della transazione blockchain (40 caratteri esadecimali)
TIPO: Tipo di documento (libretto, libretto_formatori o persona_corso)
CODICEID: Identificativo SHA-1 univoco del documento (40 caratteri esadecimali)
Esempio: 7a89f023cbd4e7a59378ceba27f8654a12f8b987-libretto-5d41402abc4b2a76b9719d911017c592
Risposta
Proprietà della risposta
| Campo |
Tipo |
Descrizione |
| code |
string |
Codice di verifica inviato nella richiesta |
| result |
object o null |
Risultato della verifica (vedi dettaglio sotto) |
| error |
object o null |
Dettagli dell'errore, se presente |
Struttura dell'oggetto result
| Campo |
Tipo |
Descrizione |
| verifyStatus |
string |
Stato della verifica: 'certified', 'different', 'none', 'bad_txID', 'error' |
| txID |
string |
Identificativo della transazione blockchain |
| digest |
string |
Digest SHA-1 del record |
| type |
string |
Tipo di documento (libretto, libretto_formatori, persona_corso) |
| sequence |
number |
Numero sequenziale del record |
| createdAt |
string |
Data di creazione del record |
| updatedAt |
string |
Data di ultimo aggiornamento del record |
Valori possibili per verifyStatus
| Valore |
Descrizione |
| certified |
Il documento è verificato e autentico |
| different |
Il documento esiste ma il contenuto è stato alterato |
| none |
Il documento non è certificato |
| bad_txID |
Il TXID fornito non corrisponde a quello registrato nel DB |
| error |
Si è verificato un errore durante la verifica |
Esempi di risposta
Certificato valido
1
2
3
4
5
6
7
8
9
10
11
12
13 | {
"code": "7a89f023cbd4e7a59378ceba27f8654a12f8b987-libretto-5d41402abc4b2a76b9719d911017c592",
"result": {
"verifyStatus": "certified",
"txID": "7a89f023cbd4e7a59378ceba27f8654a12f8b987",
"digest": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
"type": "libretto",
"sequence": 1,
"createdAt": "2024-05-15T10:30:00.000Z",
"updatedAt": "2024-05-15T10:30:00.000Z"
},
"error": null
}
|
Certificato alterato
1
2
3
4
5
6
7
8
9
10
11
12
13 | {
"code": "7a89f023cbd4e7a59378ceba27f8654a12f8b987-libretto-5d41402abc4b2a76b9719d911017c592",
"result": {
"verifyStatus": "different",
"txID": "7a89f023cbd4e7a59378ceba27f8654a12f8b987",
"digest": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
"type": "libretto",
"sequence": 1,
"createdAt": "2024-05-15T10:30:00.000Z",
"updatedAt": "2024-05-15T10:30:00.000Z"
},
"error": null
}
|
TXID non valido
1
2
3
4
5
6
7
8
9
10
11
12
13 | {
"code": "wrongtxid-libretto-5d41402abc4b2a76b9719d911017c592",
"result": {
"verifyStatus": "bad_txID",
"txID": "wrongtxid",
"digest": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
"type": "libretto",
"sequence": 0,
"createdAt": null,
"updatedAt": null
},
"error": null
}
|
Errore - Codice non valido
| {
"code": "invalid-code",
"result": null,
"error": {
"statusCode": 400,
"message": "Invalid check token format, expected 3 parts"
}
}
|
Errore - Certificato non trovato
| {
"code": "7a89f023cbd4e7a59378ceba27f8654a12f8b987-libretto-nonexistent",
"result": null,
"error": {
"statusCode": 404,
"message": "Il soggetto nonexistent non è stato trovato"
}
}
|
Codici di stato HTTP
| Codice |
Descrizione |
| 200 |
Richiesta completata con successo |
| 400 |
Richiesta non valida (formato del codice errato) |
| 401 |
Autenticazione fallita |
| 404 |
Certificato non trovato |
| 500 |
Errore del server |
Implementazione di esempio
| async function verificaCertificato(code) {
const response = await fetch(`https://bc.formedil.it/api/verify/${code}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
}
});
return await response.json();
}
|
Per ulteriori esempi di implementazione, consultare la guida agli esempi.