Émettre les codes d'achat
Émettre en masse les codes d'achat de la règle « code d'achat exigé », pour des pièces déjà créées ou au moment de la frappe d'un lot. Chaque code n'apparaît qu'une fois. Droit claim_codes:issue.
Sur cette page
Une marque peut exiger un code d'achat pour qu'un acheteur devienne propriétaire d'une pièce : c'est la règle « code d'achat exigé » (les règles de revendication). Le vendeur remet ce code court avec la pièce, sur le ticket ou la carte d'entretien. Posséder l'objet ne suffit plus.
Cette page s'adresse à la marque, ou au revendeur, qui a des centaines ou des milliers de pièces. Dans la console, le code s'émet pièce par pièce. Avec l'API, vous l'émettez pour une liste de pièces en un appel, ou en même temps que vous frappez un lot.
#Ce qu'il vous faut
- Une clef d'API qui porte le droit
claim_codes:issue. Ce droit n'est jamais coché par défaut : un code permet à celui qui le détient de revendiquer la pièce. Vous le cochez vous-même, dans la console, Paramètres puis Développeurs. - Une offre qui comprend l'accès API et l'identité des pièces. Une marque sur
l'offre Conformité reçoit
403avec le codeOFFER_EXCLUDES_IDENTITY(les deux offres). - Pour un revendeur, une clef revendeur : elle agit pour votre marque et pour chaque marque cliente de votre contrat.
- Votre serveur. Les codes ne doivent jamais passer par un navigateur.
#Ce qu'il faut savoir avant tout
Chaque code n'apparaît qu'une fois, dans la réponse. SealTrust n'en garde qu'une empreinte à clef, impossible à relire. Imprimez-le ou rangez-le tout de suite. Un code perdu se réémet : l'ancien cesse alors de marcher.
N'écrivez jamais un code dans un journal, ni dans un fichier que d'autres lisent. Envoyez-le seulement là où il sera imprimé, ou à l'acheteur.
#Les deux points d'entrée
Toutes les adresses existent aussi avec le préfixe /v1, qui est la forme
recommandée.
| Méthode et chemin | Ce qu'il fait | Droit |
|---|---|---|
POST /partner/claim-codes/brands/{brand_code}/issue | émet un code pour chaque pièce, et le montre une fois | claim_codes:issue |
POST /partner/claim-codes/brands/{brand_code}/status | dit si chaque pièce a un code en service, déjà utilisé, ou aucun | claim_codes:issue |
{brand_code} est le code public de la marque, dix caractères comme
7K3QXW9M2A. GET /partner/catalog/brands liste ceux que votre clef peut
servir.
#Émettre les codes
Nommez chaque pièce par son numéro de série (douze caractères, imprimé sous son QR code) ou par son numéro de jeton, jamais par un autre numéro. Au plus 500 pièces par appel.
POST /v1/partner/claim-codes/brands/7K3QXW9M2A/issue
Authorization: Bearer st_live_...
Content-Type: application/json
{
"pieces": [
{ "serial": "Y5T2VGGF2NP9" },
{ "token_id": "1000" }
]
}{
"brand_code": "7K3QXW9M2A",
"shown_once": true,
"items": [
{ "serial": "Y5T2VGGF2NP9", "token_id": "1000", "code": "7KQ4MZ2P", "previous_status": "none" }
]
}previous_status dit ce que la pièce avait avant :
none: aucun code ;live: un code en service, qui ne marche plus. Le papier déjà imprimé est à jeter ;used: un code qui a déjà servi. Voir plus bas.
C'est tout ou rien. Si une seule pièce pose problème, aucun code n'est émis.
#Lire l'état, jamais le code
POST /v1/partner/claim-codes/brands/7K3QXW9M2A/status
Content-Type: application/json
{ "pieces": [{ "serial": "Y5T2VGGF2NP9" }] }{
"brand_code": "7K3QXW9M2A",
"items": [
{ "serial": "Y5T2VGGF2NP9", "token_id": "1000", "status": "live", "issued_at": "2026-09-30T09:12:00+00:00", "used_at": null }
]
}status vaut none, live ou used. Le code lui-même n'est jamais renvoyé.
#Un code déjà utilisé
Un code utilisé est la trace qu'un acheteur a revendiqué la pièce. Il n'est
jamais remplacé sans que vous le demandiez : l'appel répond 409 avec le code
PURCHASE_CODE_ALREADY_USED et la liste des pièces en cause, et rien n'est
émis. Pour le remplacer quand même, par exemple après un retour, ajoutez
"replace_used": true. La réponse dit alors previous_status: "used", et le
journal d'audit de la marque le note.
#Au moment de la frappe
Vous pouvez demander les codes en même temps que vous frappez un lot. La clef
doit porter mint:batch et claim_codes:issue.
POST /v1/partner/mint/batch?issue_purchase_codes=trueLe code ne peut pas exister avant la pièce. Le lot garde donc votre demande, et les codes arrivent avec la liste des pièces du lot :
GET /v1/partner/mint/batch/{job_id}/itemsChaque ligne porte alors purchase_code et purchase_code_status. Le code
apparaît à la première lecture qui trouve la pièce frappée, puis null aux
lectures suivantes, avec l'état live. Imprimez-le à côté du lien de
print_url, qui est le QR code de la pièce. Une deuxième lecture ne remplace
jamais un code déjà remis.
Une clef sans claim_codes:issue qui lit ce lot voit l'état, jamais le code.
#Depuis la console
La frappe d'un lot dans la console propose la même option : « Émettre un code
d'achat pour chaque pièce ». Les codes arrivent dans l'archive des QR codes,
dans le fichier purchase_codes.csv, à côté du fichier QR de chaque pièce. Le
premier téléchargement les contient, les suivants disent seulement l'état.
#Depuis votre ERP
Les connecteurs n'envoient jamais de code à un outil tiers. Pour imprimer les codes depuis votre ERP ou votre outil d'étiquetage, faites-lui appeler ces points d'entrée avec votre clef.
#Ce qui est refusé
| Réponse | Pourquoi |
|---|---|
403 | droit claim_codes:issue absent, marque que la clef ne sert pas, ou offre Conformité (OFFER_EXCLUDES_IDENTITY) |
404 PIECE_NOT_FOUND | une pièce inconnue, ou d'une autre marque : la même réponse dans les deux cas |
409 PURCHASE_CODE_ALREADY_USED | le code d'une pièce a déjà servi, et replace_used n'est pas à true |
422 | une référence mal formée, une pièce nommée deux fois, plus de 500 pièces, un code de marque mal formé |
429 | trop d'appels, ou plus de 20 000 codes émis pour la marque dans l'heure (PURCHASE_CODE_BUDGET_EXCEEDED, avec Retry-After) |
Le journal d'audit de la marque note qui a émis des codes, et pour quels numéros de série. Il ne contient jamais les codes.
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.