Méthode GET/products /{uid} /public
Lire les informations publiques d'un produit à partir de son identifiant : nom, marque, image, jeton, transaction, état et déclaration de vol. Aucune clef d'API.
Sur cette page
Vous lisez les informations publiques d'un produit à partir de son identifiant. En quittant cette page, vous saurez récupérer son nom, le nom et le logo de sa marque, une image, son numéro de jeton, sa transaction d'inscription, son état, et savoir s'il est déclaré volé.
Adresse complète :
GET https://api.sealtrust.io/v1/products/{uid}/publicLe même point d'entrée répond aussi sans le préfixe /v1, à
https://api.sealtrust.io/products/{uid}/public. Les deux adresses appellent
le même code. Utilisez la forme /v1 pour une nouvelle intégration.
#Autorisation
Aucune, point d'entrée public. Ce point d'entrée ne lit aucune clef d'API,
aucun jeton et aucun cookie. Le serveur ne regarde jamais l'en-tête
Authorization que vous envoyez ici, et il vous renvoie la même réponse avec
ou sans lui.
#Plafond d'appels
600 appels par fenêtre de 60 secondes, comptés par adresse réseau
appelante. Le plafond est large parce que des centaines de visiteurs d'un salon
ou d'un réseau mobile partagent souvent une même adresse. Ce compteur est
propre à cette lecture. Le préfixe /v1 ne crée pas un second budget :
/products/{uid}/public et /v1/products/{uid}/public partagent le même
compteur.
Chaque réponse porte trois en-têtes.
#Paramètres de chemin et de requête
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
uid | string | oui | L'identifiant du produit, sous l'une des quatre formes acceptées : l'empreinte de sa puce (0x suivi de 64 caractères hexadécimaux), son identifiant de jeton, le numéro de série imprimé sur l'article, ou son numéro de certificat. |
lang | string | non | La langue du nom de catégorie : fr ou en. À défaut, le serveur lit l'en-tête Accept-Language, puis retombe sur en. |
Les quatre formes sont celles de GET /resolve/{identifiant}, décrites en
détail sur la page de ce point d'entrée. Le serveur essaie l'empreinte de puce
d'abord, puis l'identifiant de jeton, puis le numéro de série, puis le numéro de
certificat, et rend le premier produit trouvé.
Vous pouvez envoyer l'empreinte de puce avec ou sans le préfixe 0x, en
majuscules ou en minuscules. Le serveur retire les espaces de début et de fin
avant de chercher, met la valeur en minuscules et ajoute le préfixe 0x s'il
manque. Ces écritures désignent donc toutes le même produit. Le numéro de série
est lui aussi accepté en majuscules comme en minuscules.
Un seul paramètre de requête, lang, et il est optionnel. Il ne change qu'une
chose dans la réponse : la langue de category_name. Tout le reste est identique
quelle que soit sa valeur.
Le serveur choisit la langue dans cet ordre : le paramètre lang s'il vaut fr
ou en, sinon le premier tag reconnu de l'en-tête Accept-Language, sinon en.
Une valeur que le serveur ne reconnaît pas est ignorée sans erreur : vous
obtenez en, et non un 422.
#En-têtes
Aucun en-tête n'est obligatoire.
#Corps de la requête
Aucun. Cette requête n'a pas de corps.
#Requête d'exemple
Lecture du produit dont l'identifiant est
0x1111111111111111111111111111111111111111111111111111111111111111.
curl -i "https://api.sealtrust.io/v1/products/0x1111111111111111111111111111111111111111111111111111111111111111/public"const uid =
"0x1111111111111111111111111111111111111111111111111111111111111111";
const response = await fetch(
`https://api.sealtrust.io/v1/products/${encodeURIComponent(uid)}/public`,
{ method: "GET" },
);
if (!response.ok) {
throw new Error(`SealTrust a répondu ${response.status}`);
}
const produit = await response.json();
console.log(produit.product_name, produit.brand_name);
console.log(produit.is_verified, produit.declared_stolen);import requests
from urllib.parse import quote
uid = "0x1111111111111111111111111111111111111111111111111111111111111111"
response = requests.get(
f"https://api.sealtrust.io/v1/products/{quote(uid, safe='')}/public",
timeout=30,
)
print(response.status_code)
print(response.json())#Réponse d'exemple
Code HTTP 200OK
Code HTTP 200.
{
"product_name": "Sac Modèle Exemple",
"brand_name": "Exemple SAS",
"brand_logo_url": "https://exemple-sas.test/logo.png",
"brand_hide_powered_by": false,
"image_url": "https://exemple-sas.test/media/sac-modele-exemple.jpg",
"category_name": "Maroquinerie",
"token_id": "11111111111111111111111111111111111111111111111111111111111111111111111111111",
"tx_hash": "0x2222222222222222222222222222222222222222222222222222222222222222",
"status": "written",
"declared_stolen": false,
"is_verified": true,
"registered_at": "2026-03-04T10:22:31.481000+00:00",
"verified_at": "2026-03-04T10:22:31.481000+00:00",
"certificate_status": "active",
"contract_address": "0x3333333333333333333333333333333333333333",
"chain": null
}La réponse compte seize champs et rien d'autre.
| Champ | Type | Description |
|---|---|---|
product_name | string | null | Le nom du produit. null quand aucun nom n'a été enregistré. |
brand_name | string | null | Le nom de la marque propriétaire du produit. null quand le produit n'est rattaché à aucune marque. |
brand_logo_url | string | null | L'adresse du logo de la marque. null quand la marque n'en a pas déposé. |
brand_hide_powered_by | boolean | true quand la mention « Powered by SealTrust » doit disparaître. Deux conditions, et il faut les deux : l'offre de la marque comprend la marque blanche et la marque a choisi de masquer la mention dans sa console. Par défaut la mention reste affichée, y compris pour une marque qui vient de souscrire à l'offre Inside sans rien avoir décoché. |
image_url | string | null | L'adresse publique de l'image de couverture. Elle est cherchée dans cet ordre : une image attachée directement à l'exemplaire, puis l'image principale de son modèle, puis les médias du modèle. null seulement quand aucune de ces trois pistes n'aboutit. C'est la copie allégée de la photo (WebP, 800 pixels au plus sur le grand côté, 100 Ko au plus, sans données EXIF) quand elle existe, sinon l'original. Une adresse d'un autre site est rendue telle quelle. |
category_name | string | null | Le nom de la catégorie du produit, dans la langue de l'appelant. La langue se donne par le paramètre lang (fr ou en) ou, à défaut, par l'en-tête Accept-Language. Une catégorie dont la traduction manque retombe sur son nom anglais, jamais sur une chaîne vide. null quand aucune catégorie n'est rattachée. |
token_id | string | null | Le numéro du jeton sur la chaîne, écrit en base dix, dans une chaîne de caractères. Ce nombre est trop grand pour un entier ordinaire, donc lisez-le comme du texte et jamais comme un nombre de votre langage. null tant que l'inscription sur la chaîne n'est pas confirmée. |
tx_hash | string | null | L'empreinte de la transaction qui a inscrit le produit sur la chaîne. null tant qu'aucune transaction n'a été enregistrée. |
status | string | L'état technique du produit. Voir ci-dessous. |
declared_stolen | boolean | true quand une déclaration de vol est ouverte sur ce produit. |
is_verified | boolean | true quand status vaut mined ou written. false dans tous les autres cas. |
registered_at | string | null | Date et heure de création de l'enregistrement du produit chez nous, au format ISO 8601. null quand elle est inconnue. Ajouté le 30 septembre 2026. |
verified_at | string | null | La même valeur que registered_at, sous un nom trompeur. Gardé pour les intégrations qui le lisent déjà. Voir l'avertissement ci-dessous. |
certificate_status | string | null | L'état du certificat d'authenticité en vigueur de ce produit : active, ou null quand le produit n'a aucun certificat en vigueur. C'est la même lecture que le champ certificate.status de GET /resolve/{identifier}, faite par la même fonction du serveur. Ajouté le 30 septembre 2026. |
contract_address | string | L'adresse du contrat qui porte le jeton. |
chain | null | Ce champ vaut toujours null aujourd'hui. Voir ci-dessous. |
#Lire l'état d'un produit
status porte une valeur technique. Cette page en documente deux, parce que
le reste de la réponse en dépend : mined et written sont les deux seules
valeurs pour lesquelles is_verified vaut true.
Lisez is_verified et declared_stolen plutôt que d'interpréter status
vous-même. declared_stolen existe justement pour cela : status porte la
valeur stolen au moment d'une déclaration fraîche, puis reprend la valeur
written dès que le dossier de vol est clos, alors que declared_stolen dit
dans un champ à lui si une déclaration est ouverte.
#Erreurs
Le corps d'une réponse d'erreur porte un champ detail.
| Code | Condition | Que faire |
|---|---|---|
| 404 | Aucun produit ne correspond à cet identifiant, dans aucune des quatre formes. detail vaut Product not found. | Le serveur cherche d'abord votre identifiant nettoyé, passé en minuscules et préfixé de 0x, puis votre chaîne brute telle que vous l'avez envoyée, puis l'identifiant de jeton, le numéro de série et le numéro de certificat. Vérifiez la valeur envoyée. Si l'article a été détruit, remplacé ou retiré du catalogue, seule l'empreinte de sa puce le retrouve. |
| 404 | L'appel arrive sur le nom de domaine vérifié d'une marque, et le produit appartient à une autre marque. detail vaut Product not found. | Appelez cette adresse sur le domaine de la marque concernée, ou sur api.sealtrust.io. Le message est le même que pour un identifiant inconnu, pour ne pas confirmer qu'il existe. |
| 429 | Plus de 600 appels en 60 secondes depuis votre adresse. detail vaut Rate limit exceeded: 600 requests per 60s. La réponse porte l'en-tête Retry-After, en secondes. | Attendez le nombre de secondes indiqué par Retry-After, puis réessayez. Répartissez vos appels au lieu de les envoyer en rafale. |
| 500 | Une erreur inattendue s'est produite pendant le traitement de votre appel. detail vaut Internal Server Error. La réponse porte un en-tête X-Request-Id. | Réessayez. Si l'erreur persiste, contactez le support en indiquant cet identifiant de requête et l'heure de l'appel. |
Ce point d'entrée est public : il ne renvoie ni 401, ni 403.
#Voir aussi
GET /resolve/{identifier}, lire en un appel tout ce qu'une page produit affiche.GET /timeline/{identifier}, lire l'historique public d'un produit.GET /certificate/{identifier}, lire le certificat d'authenticité d'un article.- Notions de base, distinguer modèle, lot et article avant de commander la moindre étiquette.
Cette page vous a-t-elle été utile ?
Votre réponse ouvre un courriel pré-rempli dans votre messagerie, à destination de contact@sealtrust.io. Vous le relisez avant de l'envoyer.