Méthode GET/partner-portal/products/{identifier}

Retrouver un produit d'une marque qui vous a accrédité, à partir de ce qui est écrit sur l'objet, et lire son passeport filtré sur les seules accréditations que cette marque vous a reconnues.

Sur cette page

Vous retrouvez un produit à partir de l'identifiant lu sur l'objet, et vous recevez son passeport filtré sur les accréditations que cette marque vous a reconnues, et sur elles seules. En quittant cette page, vous saurez quels identifiants ce point d'entrée accepte, ce que contient la réponse, et quelles erreurs il renvoie.

Ce point d'entrée appartient au portail partenaire. Il est réservé aux comptes réparateur et recycleur, et il s'authentifie avec la session du compte. La clef d'API de la marque n'a pas cours ici.

Adresse complète :

HTTP
GET https://api.sealtrust.io/v1/partner-portal/products/{identifier}

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

#Autorisation

Session d'un compte partenaire. Vous ouvrez cette session avec POST /v1/auth/login, qui rend un jeton d'accès et pose aussi un cookie de session. Vous présentez ensuite le jeton dans l'en-tête Authorization, au format Bearer. Il vaut 60 minutes.

Vous devez remplir trois conditions, dans cet ordre.

  1. Votre session est valide et votre compte est actif. Sinon la réponse est 401.
  2. Votre compte est de type réparateur ou recycleur. Un compte d'un autre type reçoit 403.
  3. Au moins une marque vous a accrédité, et cette accréditation est active. Sans cela, la réponse est 403 avant même toute recherche de produit.

L'API cherche uniquement parmi les marques qui vous ont accrédité. Elle ne vous rend jamais un produit d'une autre marque.

Le portail est prévu pour l'application partenaire. L'API accepte aussi un appel serveur à serveur qui porte le jeton dans l'en-tête Authorization.

L'API refuse en 403 un appel qui s'appuie sur le cookie de session et qui vient d'une origine que l'API n'accepte pas.

#Plafond d'appels

Un plafond d'appels s'applique à ce point d'entrée. Il est réglé pour l'usage normal du portail, où vous cherchez un produit puis enregistrez une intervention.

Au-delà, l'API répond 429. Le refus porte un en-tête Retry-After qui donne le nombre de secondes à attendre. Attendez ce délai, puis rappelez.

Le plafond couvre l'ensemble du portail partenaire. Alterner entre les points d'entrée ne vous redonne donc pas de marge. Espacez vos appels au lieu de les envoyer en rafale.

La valeur du plafond n'est pas un engagement et peut changer sans préavis. N'inscrivez aucun seuil en dur dans votre code, appuyez-vous sur Retry-After.

#Paramètres de chemin et de requête

NomTypeObligatoireDescription
identifierstringouiCe qui identifie le produit. L'API accepte quatre formes, voir ci-dessous.

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

L'API essaie les quatre formes dans cet ordre.

FormeÀ quoi elle ressembleRemarque
Empreinte d'identifiant physiquecommence par 0xLa casse est ignorée.
Numéro de jetonuniquement des chiffresLe numéro attribué au produit sur la chaîne.
Numéro de certificattel qu'il figure sur le certificatComparé à l'identique, sans tolérance de casse.
Numéro de série12 caractères, celui imprimé sur l'objetVoir la tolérance de saisie ci-dessous.

Le numéro de série est la seule forme qu'un humain a sous les yeux. Il est écrit dans un alphabet qui exclut les caractères que l'oeil confond. À la lecture, l'API met la saisie en majuscules, puis elle ramène I et L sur 1, et O sur 0. Vous pouvez donc saisir la lettre I, l'API la lit comme le chiffre 1. Un opérateur qui recopie une étiquette n'est pas puni pour une confusion de caractère. L'API ne traite comme numéro de série qu'une chaîne de 12 caractères exactement, tous pris dans cet alphabet.

L'API ne résout pas un produit détruit, ni un produit que la marque a retiré du catalogue. La réponse est alors 404.

#En-têtes

NomTypeObligatoireDescription
AuthorizationstringnonBearer suivi du jeton de session rendu par la connexion. Nécessaire si votre appel ne porte pas le cookie de session.

#Corps de la requête

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

#Requête d'exemple

Recherche du produit dont le numéro de série imprimé est EXEMPLE00001. Remplacez VOTRE_JETON_DE_SESSION par le jeton d'accès que la connexion vous a rendu.

Le SDK TypeScript ne couvre pas cette surface, l'onglet TypeScript montre donc un appel fetch direct.

curl -i https://api.sealtrust.io/v1/partner-portal/products/EXEMPLE00001 \
  -H "Authorization: Bearer VOTRE_JETON_DE_SESSION"

#Réponse d'exemple

Code HTTP 200OK

Code HTTP 200.

JSON
{
  "product": {
    "product_id": 4821,
    "token_id": "1029384756",
    "uid_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "product_name": "Sac Modèle A",
    "brand_id": 12,
    "brand_name": "Exemple SAS",
    "category_name": "Maroquinerie",
    "status": "written"
  },
  "passport": {
    "available": true,
    "access_tier": "recycler",
    "passport_version": 3,
    "data": {
      "product_identity": {
        "gtin": "03701234567890",
        "model": "Modèle A",
        "brand": "Exemple SAS",
        "made_in": "FR"
      },
      "materials": {
        "primary": { "name": "Cuir pleine fleur", "percentage": 70, "origin": "IT" },
        "certified_organic": false
      },
      "circularity": {
        "repairability_index": 7.8,
        "expected_lifetime_years": 15,
        "disassembly_instructions_url": "https://exemple-sas.test/demontage/modele-a"
      },
      "compliance": {
        "eu_espr": true,
        "reach": true
      }
    }
  },
  "allowed_event_types": [
    "after_sale_service",
    "maintenance",
    "reconditioning",
    "repair"
  ]
}

La réponse compte trois champs de premier niveau.

ChampTypeDescription
productobjectLe produit retrouvé. Huit champs, voir ci-dessous.
passportobjectLe passeport, filtré pour votre niveau d'accès. Quatre champs, voir ci-dessous.
allowed_event_typesstring[]Les types d'intervention que vos accréditations sur cette marque vous permettent d'enregistrer. Liste triée par ordre alphabétique.

#Le bloc product

ChampTypeDescription
product_idintegerLe numéro du produit. C'est lui qui relie vos interventions à cet objet.
token_idstring ou nullLe numéro du jeton sur la chaîne. Vaut null tant que la frappe n'est pas confirmée.
uid_hashstring ou nullL'empreinte de l'identifiant physique.
product_namestring ou nullLe nom du produit.
brand_idinteger ou nullLe numéro de la marque propriétaire.
brand_namestring ou nullLe nom de la marque. Vaut null si la marque n'est plus lisible.
category_namestring ou nullLe nom de la catégorie. Vaut null si le produit n'a pas de catégorie.
statusstring ou nullL'état du produit. Voir la liste ci-dessous.

status prend l'une de ces valeurs : draft, minting, mined, written, burn_submitted, burned, superseded, archived, stolen, revoked. Les états superseded et archived sortent le produit du catalogue. Ce point d'entrée ne rend jamais un produit dans l'un de ces deux états, ni un produit détruit.

#Le bloc passport

ChampTypeDescription
availablebooleantrue quand ce produit a un passeport publié.
access_tierstringLes métiers réellement servis, joints par un + et rangés par ordre alphabétique : recycler, ou repairer+recycler pour un partenaire qui porte les deux accréditations sur cette marque. Vaut public quand la marque ne vous en a reconnu aucune, et le passeport est alors filtré au niveau public.
passport_versioninteger ou nullLe numéro de version du passeport rendu. Vaut null quand il n'y a pas de passeport.
dataobject ou nullLe contenu du passeport, filtré. Vaut null quand il n'y a pas de passeport.

Quand l'API ne trouve aucun passeport, le bloc vaut {"available": false, "access_tier": "public", "passport_version": null, "data": null}. L'API rend le reste de la réponse normalement. Vous pouvez enregistrer une intervention sur un produit sans passeport.

Trois règles décident du passeport rendu.

  • L'API ne rend qu'un passeport publié, en visibilité publique ou réservée au propriétaire. Elle ne rend pas un brouillon, ni un passeport que la marque garde pour son usage interne.
  • L'API cherche d'abord le passeport propre à l'exemplaire que vous avez résolu. À défaut, et si le produit est rattaché à un modèle, elle rend le passeport de référence de ce modèle. Un exemplaire sans passeport propre est donc décrit par la référence de son modèle. Les données par unité que vous lisez portent toujours sur l'exemplaire que vous avez résolu.
  • Quand plusieurs versions existent, l'API rend la plus élevée.

#Le bloc allowed_event_types

Ces valeurs sont exactement celles que POST /v1/partner-portal/interventions accepte pour ce produit. Ce point d'entrée refuse en 422 tout type absent de cette liste.

Type d'accréditationTypes d'intervention rendus
Réparateurafter_sale_service, maintenance, reconditioning, repair
Recycleurdestruction, end_of_life, recycling, return

Un compte qui détient les deux accréditations actives sur la même marque reçoit les huit valeurs. L'API calcule cette liste marque par marque. Un même compte peut donc recevoir une liste différente pour un produit d'une autre marque.

#Erreurs

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

CodeConditionQue faire
401Vous ne présentez aucune session : ni en-tête Authorization, ni cookie de session. detail vaut Not authenticated. La réponse porte aussi WWW-Authenticate: Bearer.Connectez-vous, puis présentez le jeton rendu.
401Le jeton est illisible, mal signé ou expiré. detail vaut Invalid JWT token.Renouvelez votre session. Un jeton d'accès vaut 60 minutes.
401Le jeton que vous présentez n'est pas un jeton de session. detail vaut Invalid token.Utilisez le jeton d'accès rendu par la connexion.
401Le jeton que vous présentez est celui d'une connexion arrêtée à l'étape de vérification en deux temps. detail vaut MFA verification required.Terminez la vérification en deux temps, puis utilisez le jeton rendu à la fin.
401Une déconnexion ou un changement de mot de passe a révoqué ce jeton. detail vaut Token has been revoked.Reconnectez-vous.
401Le jeton ne porte pas d'adresse de compte. detail vaut Invalid token: missing email.Reconnectez-vous.
401Votre compte n'est plus actif. detail vaut Account disabled.Contactez la marque qui vous a accrédité.
403Votre appel porte le cookie de session, sans annoncer ni Origin ni Referer. detail vaut Origin or Referer header required.Appelez depuis l'application partenaire, ou présentez le jeton dans l'en-tête Authorization au lieu du cookie.
403Votre appel ne porte pas de jeton dans l'en-tête Authorization, et il annonce une origine que l'API n'accepte pas. detail vaut Forbidden origin.Appelez depuis l'application partenaire, ou depuis votre serveur en présentant le jeton dans l'en-tête Authorization.
403Votre compte n'est ni réparateur ni recycleur. detail vaut Partner account required (repairer or recycler).Ce chemin ne s'adresse pas à ce type de compte.
403Aucune marque ne vous a accrédité, ou vos accréditations ne sont plus actives. detail vaut Aucune accréditation active.Demandez à la marque de réactiver votre accréditation.
403Vos accréditations ne vous permettent pas d'agir sur ce produit.Demandez une accréditation à la marque concernée.
404Cet identifiant ne désigne aucun produit que vos accréditations vous permettent d'atteindre. detail vaut Produit introuvable.Vérifiez la saisie. Un produit détruit ou retiré du catalogue donne la même réponse.
404Le compte lié au jeton n'existe plus. detail vaut User not found.Reconnectez-vous. Si l'erreur persiste, contactez la marque qui vous a accrédité.
429Vous avez dépassé le plafond d'appels. La réponse porte un en-tête Retry-After.Attendez le nombre de secondes indiqué par Retry-After, puis réessayez. Répartissez vos appels au lieu de les envoyer en rafale.
500Une 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 la valeur de X-Request-Id.

#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