Méthode GET/passport/01/{gtin}/10/{lot}/proof

Récupérer les preuves publiques du passeport d'un lot : empreinte du contenu, sceau, ancrage du document sur Base sans aucune frappe, état de l'attestation signée. Point d'entrée public.

Sur cette page

Vous récupérez les preuves publiques du passeport d'un lot de production. En quittant cette page, vous saurez demander ces preuves, vérifier vous-même que la version du lot est inscrite sur la chaîne, et comprendre pourquoi aucune frappe n'a été nécessaire.

Adresse complète :

HTTP
GET https://api.sealtrust.io/v1/passport/01/{gtin}/10/{lot}/proof

#Autorisation

Aucune, point d'entrée public. La réponse est la même pour tout le monde.

#Plafond d'appels

600 appels par fenêtre de 60 secondes, comptés par adresse IP appelante, commun à toutes les lectures (GET) dont l'adresse commence par /passport.

#Paramètres de chemin et de requête

NomTypeObligatoireDescription
gtinstringouiLe GTIN du modèle du lot. Sa clef de contrôle est vérifiée.
lotstringouiLe numéro du lot, comparé à l'identique, casse comprise.

Ce point d'entrée n'a aucun paramètre de requête.

#Corps de la requête

Aucun. Cette requête n'a pas de corps.

#Requête d'exemple

curl -i "https://api.sealtrust.io/v1/passport/01/03701234567891/10/LOT-26A/proof"

#Réponse d'exemple

Code HTTP 200OK

Code HTTP 200, pour une version déjà ancrée.

JSON
{
  "passport_version": 2,
  "data_hash": "9f2c1e7d4b8a6f0e3d5c2b1a9e8f7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e",
  "passport_anchor": {
    "type": "passport_anchor",
    "chain": "base",
    "chain_id": 8453,
    "tx_hash": "0x5e1f0c2d3b4a59687766554433221100ffeeddccbbaa99887766554433221100",
    "merkle_root": "0x0d1c2b3a49586776655443322110ffeeddccbbaa998877665544332211000f1e",
    "leaf": "0x7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e8f7a6b",
    "leaf_index": 3,
    "proof": ["0x1122334455667788990011223344556677889900112233445566778899001122"],
    "block_timestamp": "2026-09-26T09:00:02+00:00",
    "passport_version": 2,
    "data_hash_matches": true,
    "anchored": true,
    "proves": "content_existed_at_or_before_tx"
  },
  "seal": {"sealed": true, "linked": true, "chain_link_match": true},
  "vc": {"issued": false},
  "level": "batch",
  "gtin": "03701234567891",
  "batch_code": "LOT-26A"
}

Toutes les valeurs de cet exemple sont fictives, et la réponse réelle porte d'autres champs dans passport_anchor et seal, décrits sur GET /passport/01/{gtin}/proof.

Deux blocs sont absents, et leur absence est la réponse juste : anchor, qui date un exemplaire, et verifications, qui compte les lectures d'une étiquette physique. Un lot n'est ni l'un ni l'autre. Tant que la version n'a pas été prise par le balayage, passport_anchor est absent lui aussi, et seal suffit à rendre visible toute réécriture en attendant.

#Vérifier la preuve vous-même

La feuille vaut keccak256(abi.encode(uint256 passportId, uint256 passportVersion, bytes32 dataHash)), où passportId est le champ id de GET /passport/01/{gtin}/10/{lot}. En remontant la feuille avec chaque nœud de proof, deux à deux et dans l'ordre croissant des octets, vous retrouvez merkle_root. Le détail est sur Confiance et preuves.

#Erreurs

CodeConditionQue faire
400La clef de contrôle du GTIN ne correspond pas.Recopiez le GTIN depuis le code-barres.
404Aucun passeport publié pour ce lot, un lot d'une autre marque que celle du domaine appelé, ou un lot d'une autre marque que celle qui publie le passeport de modèle de ce GTIN.Vérifiez le numéro de lot, casse comprise, et la publication dans la console.
429Plus de 600 appels en 60 secondes depuis la même adresse IP.Attendez le nombre de secondes indiqué par Retry-After.

#Voir aussi

Votre réponse ouvre un courriel pré-rempli dans votre messagerie, à destination de contact@sealtrust.io. Vous le relisez avant de l'envoyer.

Proposer une correctionSignaler un problème