GTIN Data Hub
Documentation

L’API — votre première requête en cinq minutes.

REST, JSON, une seule clé. Chaque point de terminaison ci-dessous est actif et les exemples montrent la forme réelle de la réponse.

Par quelles étapes passe un appel ?l’ordre réel dans src/app.ts
CléAuthorizationen-tête401 unauthorizedLimite de débitpar minutequota de requêtes429 rate_limitContrôle de quotapostes mensuelsquota402 kota_dolduValidationformat + modulo 10clé de contrôle200 + INVALIDRéponseJSON ouCSVCHAQUE APPEL SUIT CET ORDRELigne pointillée : le code renvoyé lorsqu’une étape échoue. Pas de résultat partiel — si le quota est insuffisant, la tâche est entièrement rejetée.

Les étapes s’exécutent dans cet ordre : une requête dont l’identité ne peut être résolue ne touche jamais au quota, et une requête à court de quota n’atteint jamais la validation. Il n’y a pas de résultat partiel — une tâche de 100 postes dont il reste 40 est entièrement rejetée ; renvoyer un demi-résultat comme s’il était complet serait le pire.

1 · Obtenir une clé

Connectez-vous au tableau de bord et générez-la depuis l’écran API Anahtarları générez-la. La clé brute est affichée une seule fois ; la base de données ne conserve que le hachage SHA-256, et en cas de perte, une nouvelle est générée.

Générer une clé administrateur requiert des droits d’administrateur. Une nouvelle clé ne peut pas être générée avec une clé API — afin qu’une seule clé divulguée ne se transforme pas en un nombre infini de clés permanentes.

2 · Authentification

Envoyez la clé avec l’un des deux en-têtes.

HTTPEn-tête de requête
x-api-key: gtin_live_XXXXXXXXXXXX
— ou —
Authorization: Bearer gtin_live_XXXXXXXXXXXX
Une requête sans clé renvoie 401. Les requêtes depuis le tableau de bord utilisent le cookie de session ; aucune clé n’est nécessaire.

3 · Numéro unique

La réponse sépare la validation mathématique de l’état de la source produit.

GET/api/v1/gtins/{gtin}
{
  "valid": true,
  "status": "UNVERIFIED",
  "type": "GTIN-13",
  "gtin14": "04006381333931",
  "checkDigit": "1",
  "expectedCheckDigit": "1",
  "product": null
}

Les champs d’attribution externes ne sont pas publiés sans validation de licence. UNVERIFIED signifie que le contrôle mathématique est réussi sans correspondance produit.

4 · Validation par lot

Une liste JSON ou un corps CSV brut. Jusqu’à 10 000 numéros par tâche.

POST/api/v1/batches
Content-Type: application/json

{ "gtins": ["4006381333931", "8690504045618"] }

— ou un corps CSV (text/csv) : la colonne GTIN est détectée automatiquement —
Point de terminaisonCe qu’il fait
POST /api/v1/batchesDémarre la tâche, 202 et renvoie un identifiant de tâche.
GET /api/v1/batchesListe les tâches récentes.
GET /api/v1/batches/{id}Statut et progression.
GET /api/v1/batches/{id}/resultsRésultats ; offset et limit paginé.
GET /api/v1/batches/{id}/result.csvTélécharge le tout en CSV.
Résultats persistant — ils survivent même à un redémarrage du service. Conservés 60 minutes.

5 · Votre propre catalogue

Les champs que vous téléversez sont renvoyés dans product à chaque requête. Téléverser un catalogue n’est pas décompté du quota.

CSVColonnes attendues
gtin,urun_adi,marka,kategori,gorsel_url
4006381333931,STABILO BOSS Fosforlu Kalem,STABILO,Kırtasiye,https://...
8690504045618,Çikolatalı Gofret 36 g,Örnek Marka,Gıda,
ColonneObligatoireNote
gtinouiTout format GTIN ; normalisé à 14 chiffres.
urun_adinon300 caractères au maximum.
markanon
kategorinonTexte libre.
gorsel_urlnonSeul https est accepté.

6 · Utilisation et quota

GET/api/v1/usage
{ "requests": 128, "items": 4210 }

GET /api/v1/usage/daily donne la ventilation quotidienne. Une requête diffère d’un poste : un lot de 100 numéros est 1 requête mais 100 postes ; la facturation se fait au poste.

Codes de réponse

Six codes. Tous arrivent avec une clé error dans le corps ; aucun ne renvoie silencieusement un résultat vide.

Quel code, quand ?un numéro invalide est aussi 200
200— pas d’erreurvalide ou invalide, les deux sont 200400validation_errorle corps de la requête ou le paramètre ne respecte pas le schéma de l’API401unauthorizedclé manquante, erronée ou expirée402kota_dolduquota mensuel de postes épuisé403abonelik_yokaucun forfait actif sur le compte429rate_limit_exceededquota de requêtes par minute dépassé

Le point qui prête à confusion : un numéro invalide n’est pas une erreur. L’appel réussit, la réponse indique valid: false. 400 n’est renvoyé que lorsque la requête ne respecte pas le schéma de l’API.

Lisez votre quota dans la réponse

Inutile de demander ; chaque réponse porte votre quota restant. Vous n’avez pas à apprendre l’épuisement du quota via un 402.

En-têtes renvoyés à chaque réponsepour éviter toute coupure surprise
x-ratelimit-remainingrequêtes restantes cette minutex-ratelimit-resetquand le compteur se réinitialisex-quota-remainingpostes restants cette périodex-quota-limitquota total de la périodex-quota-resetla date de fin de la période

7 · Limites et erreurs

CodeQuandQue faire
400Le corps ou le CSV n’a pas pu être lu.Vérifiez les noms de champs et le format.
401Clé manquante, erronée ou révoquée.Générez une nouvelle clé depuis le tableau de bord.
403Droits insuffisants (p. ex. un membre ne peut pas générer de clés).Des droits d’administrateur sont requis.
413Le lot a dépassé 10 000 postes.Divisez la liste.
429Limite par minute de requêtes ou de postes dépassée. retry-after attendez la durée indiquée dans l’en-tête.
kota_dolduVotre quota mensuel de postes est épuisé. Passez à un forfait supérieur ou attendez le début de la période.
503Trop de lots ouverts en même temps.Réessayez sous peu.

Les en-têtes de réponse portent votre quota restant : x-ratelimit-remaining, x-item-ratelimit-remaining.

Obtenez votre clé

Connectez-vous au tableau de bord et générez-la depuis l’écran Clés API. Si vous n’avez pas de compte, votre administrateur d’organisation en ouvre un.

Se connecter au tableau de bord