Documentation

API REST et données structurées

Les deux points d'accès que DPTag ajoute à l'API REST de WordPress, la forme d'un passeport en JSON, et le bloc schema.org que porte chaque page publique.

Chaque passeport publié se lit en JSON, pour qu'un autre système, un flux de place de marché, le logiciel d'un imprimeur d'étiquettes ou un futur connecteur de registre, lise les mêmes données qu'un client lit sur la page. Le plugin ajoute deux routes à l'API REST de WordPress sous l'espace de noms dptag/v1, et chaque page publique porte des données structurées schema.org.

Un passeport, public

GET /wp-json/dptag/v1/passport/{uuid}

Public, sans authentification. L'identifiant est l'identifiant permanent que le QR code encode, le dernier segment de l'adresse publique. La réponse est le passeport tel que la page publique le rend, dans sa langue source :

{
  "uuid": "3f2a9c1e-7b4d-4e8a-9c21-5d6f7a8b9c0d",
  "name": "T-shirt en coton bio",
  "brand": "Linho & Co",
  "sku": "TS-001",
  "gtin": "",
  "image": "https://boutique.example/wp-content/uploads/tee.jpg",
  "template": "textile",
  "updated": "2026-09-07",
  "data": {
    "materials": [
      { "name": "coton bio", "percent": 95 },
      { "name": "élasthanne", "percent": 5 }
    ],
    "country_of_origin": "Portugal",
    "care_instructions": "Lavage en machine à 30°C. Pas de sèche-linge.",
    "recycling": "À déposer dans un point de collecte textile.",
    "certifications": "GOTS"
  },
  "url": "https://boutique.example/dpp/3f2a9c1e-7b4d-4e8a-9c21-5d6f7a8b9c0d/",
  "lang": "fr",
  "source_lang": "fr",
  "languages": ["fr"]
}

data tient les champs du modèle par clé, seulement les remplis ; les clés sont celles des modèles textile et ameublement. brand est le titre du site. gtin est l'identifiant unique global du produit quand WooCommerce en a un. languages liste les langues dans lesquelles le passeport existe ; lang est la langue de cette réponse, toujours la langue source sur cette route. Un rendu traduit est disponible sur la page publique elle-même, avec ?lang= suivi du code de langue.

Un identifiant inconnu ou non publié répond 404 avec le code dptag_not_found. Les réponses peuvent être mises en cache par des intermédiaires jusqu'à une heure.

La liste, pour les utilisateurs du site

GET /wp-json/dptag/v1/passports

Authentifié : l'appelant doit être un utilisateur connecté autorisé à modifier des articles, par cookie et nonce depuis l'administration ou par mot de passe d'application. Elle renvoie jusqu'à cent passeports, brouillons compris, chacun sous la forme :

{
  "id": 1042,
  "title": "T-shirt en coton bio",
  "status": "publish",
  "score": 100,
  "uuid": "3f2a9c1e-7b4d-4e8a-9c21-5d6f7a8b9c0d",
  "url": "https://boutique.example/dpp/3f2a9c1e-7b4d-4e8a-9c21-5d6f7a8b9c0d/"
}

url est vide pour un brouillon, qui n'a pas de page publique. Un utilisateur ne voit que les passeports qu'il peut modifier, ce que la liste des passeports lui montre aussi. Pour tout un catalogue avec chaque champ, l'export CSV de l'add-on Pro est l'outil.

Les données structurées de la page publique

Chaque page publique embarque un Product schema.org dans un bloc application/ld+json, construit depuis la même charge :

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "T-shirt en coton bio",
  "brand": { "@type": "Brand", "name": "Linho & Co" },
  "sku": "TS-001",
  "image": "https://boutique.example/wp-content/uploads/tee.jpg",
  "material": "coton bio 95%, élasthanne 5%",
  "countryOfOrigin": "Portugal",
  "url": "https://boutique.example/dpp/3f2a9c1e-7b4d-4e8a-9c21-5d6f7a8b9c0d/",
  "inLanguage": "fr"
}

gtin est ajouté quand le produit en a un, et les valeurs vides sont omises. C'est le bloc que les moteurs de recherche lisent sur toute fiche produit ; c'est ce qui rend un passeport trouvable par son nom, et le règlement ne l'exige pas.

Stabilité

Les noms de routes, les clés de champs et la forme ci-dessus sont faits pour durer. Les nouveaux modèles ajoutent de nouvelles clés sous data ; les clés existantes gardent leur sens. Quand les actes délégués fixeront les formats officiels, le plugin ajoutera ce qu'ils exigent plutôt que de renommer ce qui est là, pour qu'un consommateur écrit aujourd'hui continue de fonctionner.