Méthode GET/passport/01/{gtin}

Lire le passeport numérique publié pour un modèle de produit, à partir de son GTIN. Aucune clef d'API pour le niveau public.

Sur cette page

Vous lisez le passeport numérique publié pour un modèle de produit, à partir de son GTIN. Le GTIN, Global Trade Item Number, est le numéro d'article commercial imprimé sous le code-barres. En quittant cette page, vous saurez récupérer le contenu du passeport, son numéro de version, son empreinte et sa copie IPFS, et vous saurez demander un niveau d'accès plus large que le niveau public.

Adresse complète :

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

Le même point d'entrée répond aussi sans le préfixe /v1, à https://api.sealtrust.io/passport/01/{gtin}. Les deux adresses appellent le même code. Utilisez la forme /v1 pour une nouvelle intégration.

#Autorisation

Aucune pour le niveau public, qui est le niveau par défaut. Ce point d'entrée répond sans clef d'API.

Les niveaux public et end_user répondent sans compte. Les niveaux repairer, recycler, upstream et authority exigent un compte. Vous demandez un niveau par le paramètre access_tier décrit plus bas. Vous vous authentifiez par un jeton de session présenté en Authorization: Bearer <jeton>, ou par le cookie de session posé lors de la connexion.

Une clef d'API partenaire ne donne accès à aucun de ces niveaux. Elle n'est pas un jeton de session, elle est ignorée ici, et la réponse est celle d'un appelant anonyme.

Niveau demandéQui l'obtient
publictout le monde, sans compte
end_usertout le monde, sans compte
repairerles comptes de la marque du produit, les partenaires portant une accréditation de réparateur active délivrée par cette marque, et les autorités de surveillance du marché
recyclerles comptes de la marque du produit, les partenaires portant une accréditation de recycleur active délivrée par cette marque, et les autorités de surveillance du marché
upstreamles comptes de la marque du produit et les autorités de surveillance du marché
authorityles comptes portant le rôle d'autorité de surveillance du marché

#Plafond d'appels

60 appels par fenêtre de 60 secondes, comptés par adresse IP appelante.

Ce compteur est commun à toutes les adresses qui commencent par /passport. Les appels que vous faites sur le passeport d'un exemplaire et sur les résumés de preuve entament donc le même budget.

Chaque réponse porte trois en-têtes qui décrivent ce compteur.

En-têteContenu
X-RateLimit-Limitle plafond appliqué sur la fenêtre
X-RateLimit-Remainingce qu'il vous reste dans la fenêtre en cours
X-RateLimit-Resetl'horodatage de fin de la fenêtre, en secondes

Ce compteur est indépendant du quota quotidien d'une clef d'API. Cet appel n'entame ni ce quota quotidien, ni le quota mensuel de produits de votre offre.

#Paramètres de chemin et de requête

NomTypeObligatoireDescription
gtinstringouiLe GTIN du modèle, aux formats GTIN-8, GTIN-12, GTIN-13 ou GTIN-14, séparateurs compris. Son dernier chiffre doit être la clef de contrôle des chiffres qui le précèdent. La valeur est ramenée à quatorze chiffres avant la recherche.
access_tierstringnonLe niveau d'accès aux données, au sens du règlement ESPR. Valeur par défaut public. Les six valeurs acceptées sont public, end_user, repairer, recycler, upstream et authority. Toute autre valeur renvoie 422.

#Écrire le GTIN

Le GTIN que vous envoyez est ramené à sa forme canonique de 14 chiffres avant la recherche. Tous les caractères qui ne sont pas des chiffres sont retirés, puis le résultat est complété par des zéros à gauche jusqu'à 14 chiffres.

Ces trois écritures désignent donc le même modèle : 3701234567890, 03701234567890 et 3-701234-567890. Elles donnent toutes la même forme canonique, 03701234567890. Une valeur qui ne contient aucun chiffre, ou qui en contient plus de quatorze, renvoie 404.

Le dernier chiffre d'un GTIN est une clef de contrôle, calculée à partir de ceux qui le précèdent. Nous la vérifions, et un GTIN dont le dernier chiffre ne correspond pas renvoie 400. Recopiez le code imprimé sur le produit, chiffre pour chiffre.

La recherche retrouve le modèle même si la marque a enregistré son GTIN sous une forme plus courte, en GTIN-8, GTIN-12 ou GTIN-13.

#Choisir le niveau d'accès

access_tier sélectionne les sections du passeport que vous recevez. Ces niveaux forment six destinataires distincts. Un réparateur et un recycleur reçoivent des sections différentes, décidées par le métier de chacun.

Les niveaux repairer, recycler et upstream donnent chacun les sections de leur métier, et rien de plus. Ce sont des publics distincts, et aucun ne contient les autres : une accréditation de recycleur n'ouvre pas ce que voit le réparateur, et n'ouvre pas non plus la fabrication ni la chaîne d'approvisionnement du fournisseur amont.

ValeurCe qu'elle ajoute
publicidentification du produit, conformité déclarée, taux de recyclabilité et de contenu recyclé, étiquettes libres de la marque (labels), spécification générale pour une batterie
end_usertout le niveau public, plus impact environnemental, circularité complète, matière principale, mention de matière certifiée biologique (materials.certified_organic), durabilité, efficacité énergétique, empreinte carbone
repairertout le niveau end_user, plus nomenclature des composants, notice de démontage, indice de réparabilité, état de santé pour une batterie
recyclertout le niveau end_user, plus composition des matériaux, substances préoccupantes, notice de démontage, état de santé pour une batterie
upstreamtout le niveau end_user, plus composition des matériaux, substances préoccupantes, données de fabrication et de chaîne d'approvisionnement
authorityl'intégralité du passeport, sans filtrage

Une marque peut redéfinir ces règles pour ses propres produits. Le tableau ci-dessus donne le comportement par défaut, appliqué tant qu'une marque n'a rien redéfini.

#En-têtes de requête

Aucun en-tête n'est obligatoire pour le niveau public.

En-têteObligatoireDescription
AuthorizationnonBearer <jeton de session>. Obligatoire seulement pour les niveaux repairer, recycler, upstream et authority.

#Corps de la requête

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

#Requête d'exemple

Lecture du passeport de référence publié pour le GTIN 03701234567890, au niveau public.

curl -i "https://api.sealtrust.io/v1/passport/01/03701234567890?access_tier=public"

Pour un niveau qui exige un compte, ajoutez l'en-tête d'autorisation et changez la valeur du paramètre.

curl -i \
  -H "Authorization: Bearer votre-jeton-de-session" \
  "https://api.sealtrust.io/v1/passport/01/03701234567890?access_tier=recycler"

#Réponse d'exemple

Code HTTP 200OK

Code HTTP 200.

JSON
{
  "id": 4821,
  "product_id": null,
  "product_model_id": 317,
  "gtin": "03701234567890",
  "level": "model",
  "brand_id": 12,
  "schema_version": "1.0",
  "passport_version": 3,
  "data": {
    "product_identity": {
      "gtin": "03701234567890",
      "model": "Sac Modèle Exemple",
      "brand": "Exemple SAS",
      "made_in": "FR",
      "production_facility": "Atelier Exemple, Nantes"
    },
    "compliance": {
      "eu_espr": true,
      "reach": true,
      "ce_marking": true
    },
    "circularity": {
      "recyclability_percentage": 62,
      "recycled_content_percentage": 0
    }
  },
  "data_hash": "4444444444444444444444444444444444444444444444444444444444444444",
  "ipfs_uri": null,
  "visibility": "public",
  "published_at": "2026-05-14T09:12:44.201000+00:00",
  "product_name": "Sac Modèle Exemple",
  "brand_name": "Exemple SAS"
}

Quand plusieurs versions publiées et publiques coexistent pour ce modèle, c'est celle qui porte le plus grand numéro de version qui vous est rendue.

La réponse compte quinze champs et rien d'autre.

ChampTypeDescription
idintegerLe numéro de cette version de passeport.
product_idnullCe champ vaut toujours null ici. Un passeport de référence n'est rattaché à aucun exemplaire.
product_model_idintegerLe numéro du modèle auquel ce passeport est rattaché. Ce point d'entrée ne cherche que parmi les passeports rattachés à un modèle, donc ce champ n'est jamais null ici.
gtinstringLe GTIN que vous avez demandé, ramené à quatorze chiffres.
levelstringVaut toujours model sur ce point d'entrée.
brand_idintegerLe numéro de la marque qui publie ce passeport.
schema_versionstringLa version du schéma de données du passeport.
passport_versionintegerLe numéro de version du passeport. Une correction se publie sous un numéro de version plus grand, et la version déjà publiée reste telle quelle.
dataobjectLe contenu du passeport, filtré selon le niveau demandé. Voir plus bas.
data_hashstring | nullL'empreinte SHA-256 du contenu complet du passeport, en hexadécimal. null quand aucune empreinte n'a été enregistrée pour cette version.
ipfs_uristring | nullL'adresse ipfs:// de la copie publiée du passeport. Toujours null aux niveaux public et end_user, qui ne reçoivent pas cette adresse. null aussi quand aucune copie n'a été déposée.
visibilitystringVaut toujours public ici. Ce point d'entrée ne sert que les passeports dont la visibilité est publique.
published_atstringDate et heure de publication de cette version, au format ISO 8601. Ce point d'entrée ne sert que des passeports publiés, donc ce champ n'est jamais null ici.
product_namestringLe nom du modèle qui porte ce GTIN.
brand_namestringLe nom de la marque qui publie ce passeport.

#En-têtes de la réponse

Une réponse 200 porte X-DPP-Access-Tier, en plus de Cache-Control, X-Request-Id et de la famille X-RateLimit-* que porte toute réponse.

En-têteContenu
X-DPP-Access-Tierle niveau d'accès qui a servi à filtrer la réponse
Cache-Controlno-store, max-age=0, quel que soit le niveau servi. Ne placez cette réponse derrière aucun cache partagé.

Seul X-DPP-Access-Tier est propre à la réponse 200. Une réponse d'erreur ne le porte pas. Cache-Control, X-Request-Id et la famille X-RateLimit-* accompagnent aussi les réponses d'erreur.

#Lire le champ data

data porte le contenu du passeport, sous forme de sections nommées. Les sections présentes dépendent du niveau demandé, des règles définies par la marque, et de ce que la marque a réellement renseigné. Une section absente du passeport n'apparaît pas, et une section que votre niveau ne couvre pas n'apparaît pas non plus.

Le filtrage descend à l'intérieur des sections. Dans l'exemple ci-dessus, la section compliance est présente au niveau public, mais elle ne montre que les mentions de conformité ouvertes à ce niveau. Ne concluez jamais qu'un champ n'existe pas parce qu'il est absent de votre réponse.

#Erreurs

Le corps d'une réponse d'erreur porte un champ detail.

CodeConditionQue faire
400Le dernier chiffre du GTIN envoyé n'est pas la clef de contrôle des chiffres qui le précèdent. detail vaut Invalid GTIN: the check digit does not match. C'est la seule cause de ce code sur ce point d'entrée : une valeur sans aucun chiffre, ou de plus de quatorze chiffres, renvoie 404 et non 400.Recopiez le code imprimé sur le produit, chiffre pour chiffre, sans en ajouter ni en omettre.
401Vous demandez access_tier=authority sans être authentifié. detail vaut Authority-tier access requires authentication.Présentez un jeton de session valide dans l'en-tête Authorization.
401Vous demandez access_tier=repairer, recycler ou upstream sans être authentifié. detail vaut Professional-tier access requires authentication.Présentez un jeton de session valide dans l'en-tête Authorization. Une clef d'API partenaire ne convient pas ici.
403Vous demandez access_tier=authority avec un compte qui ne porte pas le rôle d'autorité. detail vaut Authority-tier access is restricted to market surveillance authorities.Demandez un niveau qui correspond à votre compte.
403Vous demandez un niveau professionnel avec un compte qui n'y a pas droit sur cette marque. detail commence par This tier is restricted to the product's brand.Demandez à la marque du produit une accréditation active du métier correspondant, puis réessayez.
404detail vaut Unknown GS1 Digital Link. Trois situations donnent cette même réponse : le GTIN envoyé ne contient aucun chiffre ou en contient plus de quatorze, aucun modèle ne porte ce GTIN, ou aucun passeport de référence public n'est publié pour ce modèle.Vérifiez le GTIN. Si le GTIN est bon, demandez à la marque de publier le passeport de référence de ce modèle. La réponse est volontairement identique dans les trois cas, donc elle ne vous dira pas laquelle s'applique.
422La valeur de access_tier ne fait pas partie des six valeurs acceptées. detail porte la liste des erreurs de validation, avec le nom du paramètre en cause.Corrigez la valeur du paramètre.
429Le plafond de 60 appels par 60 secondes sur les adresses /passport est dépassé. detail vaut Rate limit exceeded: 60 requests per 60s. La réponse porte Retry-After et la famille X-RateLimit-*.Attendez le nombre de secondes indiqué par Retry-After, puis réessayez.
500Une erreur inattendue s'est produite pendant le traitement de votre appel. detail vaut Internal Server Error.Réessayez. Si l'erreur persiste, contactez le support en indiquant l'heure de l'appel et la valeur de l'en-tête X-Request-Id, que porte cette réponse comme toutes les autres.

#Ordre des contrôles

Le contrôle du niveau authority a lieu avant la recherche du passeport. Un appel access_tier=authority sans authentification renvoie donc 401, même si le GTIN est inconnu.

Les contrôles des niveaux professionnels ont lieu après la recherche. Un appel access_tier=recycler sur un GTIN inconnu renvoie donc 404, et jamais 401.

#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