⚡ Intégration en 5 minutes

Intégrez UnboxProof à
votre boutique

Choisissez la méthode qui correspond à votre stack technique. Plugin Shopify, plugin WooCommerce, API REST ou Widget JS — c'est prêt en quelques minutes.

🛒 Shopify
🔌 WooCommerce
⚙️ API REST
🧩 Widget JS
1

Récupérez votre clé API

Créez un compte et copiez votre clé depuis le dashboard

Prérequis

Créez votre compte gratuitement, puis allez dans Dashboard → Clés API pour créer et copier votre clé.

Créer un compte gratuit →
2

Créer une commande à la livraison

Appelez l'API quand une commande est expédiée

POST
Appelez cet endpoint dès que le colis est expédié. UnboxProof génère un code unique et envoie automatiquement le lien d'unboxing par email au client.
Node.js
// Installer : npm install node-fetch
const response = await fetch('https://unboxproof.io/api/b2b/orders', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': 'votre_clé_api'
  },
  body: JSON.stringify({
    order_id: 'CMD-2025-001',          // Votre référence commande
    product_name: 'Nike Air Max 90',    // Nom du produit
    customer_email: 'client@email.com',   // Email du client
    customer_name: 'Jean Dupont',         // Optionnel
    amount: 149.99                        // Montant en €
  })
});

const data = await response.json();
console.log(data.verification_code);  // ex: "A7X2"
console.log(data.unboxing_url);       // Lien envoyé au client
Même chose en PHP :
PHP
$response = file_get_contents('https://unboxproof.io/api/b2b/orders', false,
  stream_context_create(['http' => [
    'method'  => 'POST',
    'header'  => "Content-Type: application/json\r\nX-API-Key: votre_clé_api",
    'content' => json_encode([
      'order_id'       => 'CMD-2025-001',
      'product_name'   => 'Nike Air Max 90',
      'customer_email' => 'client@email.com',
      'amount'         => 149.99
    ])
  ]])
);
$data = json_decode($response, true);
3

Récupérez le statut de l'unboxing

Vérifiez si le client a soumis son unboxing

GET
Node.js
const res = await fetch(`https://unboxproof.io/api/b2b/orders/${orderId}`, {
  headers: { 'X-API-Key': 'votre_clé_api' }
});
const order = await res.json();

// order.status : 'shipped' | 'unboxing_submitted' | 'completed' | 'disputed'
// order.ai_recommendation : 'approve' | 'review' | 'dispute'
// order.ai_confidence : 0.0 – 1.0
4

Lister toutes vos commandes

Récupérez l'ensemble de vos commandes avec filtres

GET
Node.js
// Tous les statuts disponibles
const res = await fetch(
  'https://unboxproof.io/api/b2b/orders?status=unboxing_submitted&limit=50',
  { headers: { 'X-API-Key': 'votre_clé_api' } }
);
const { orders, total } = await res.json();
1

Ajoutez le script sur votre site

Une seule ligne dans votre <head> ou avant </body>

HTML
<!-- Collez ce script dans votre page de confirmation de commande -->
<script src="https://unboxproof.io/widget.js"></script>
<script>
  UnboxProof.init({ apiKey: 'votre_clé_api' });
</script>
2

Marquez l'élément à enrichir

Ajoutez un attribut data sur le conteneur de votre commande

Le widget détecte automatiquement les éléments avec data-unboxproof-order et y ajoute le bouton d'unboxing.
HTML
<!-- Page de confirmation ou email de commande -->
<div data-unboxproof-order="CMD-2025-001">
  <h3>Votre commande #CMD-2025-001</h3>
  <!-- Le bouton UnboxProof apparaît automatiquement ici -->
</div>

Le widget ajoute un bouton "Faire mon unboxing sécurisé" et un badge de confiance. Le client clique, voit son code unique, et accède à la page d'unboxing.

3

Résultat final

Ce que voit votre client sur votre site

Aperçu du bouton généré automatiquement
✓ Achat protégé par UnboxProof
1

Accédez à l'éditeur de thème

Shopify Admin → Boutique en ligne → Thèmes → Modifier le code

Dans votre tableau de bord Shopify, allez dans Boutique en ligne → Thèmes, cliquez sur Actions → Modifier le code de votre thème actif.

2

Ajoutez le widget sur la page de confirmation

Modifiez le fichier checkout.liquid ou thank-you page

Sur Shopify Plus, modifiez checkout.liquid. Sur les autres plans, utilisez les Additional scripts dans Préférences → Paiement.
Liquid
{%- comment -%} Collez dans Additional scripts ou checkout.liquid {%- endcomment -%}
{% if first_time_accessed %}
<div data-unboxproof-order="{{ order.order_number }}"></div>
<script src="https://unboxproof.io/widget.js"></script>
<script>UnboxProof.init({ apiKey: 'votre_clé_api' });</script>
{% endif %}
3

Créez la commande UnboxProof via webhook Shopify

Automatisez la création à chaque expédition

Dans Shopify Admin → Paramètres → Notifications → Webhooks, ajoutez un webhook sur l'événement orders/fulfilled pointant vers votre serveur. Votre serveur appelle ensuite l'API UnboxProof.

Node.js
// Votre endpoint qui reçoit le webhook Shopify
app.post('/shopify/webhook/order-fulfilled', async (req, res) => {
  const order = req.body;
  await fetch('https://unboxproof.io/api/b2b/orders', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.UNBOXPROOF_KEY
    },
    body: JSON.stringify({
      order_id:       String(order.id),
      product_name:   order.line_items[0]?.name,
      customer_email: order.email,
      customer_name:  order.shipping_address?.name,
      amount:         parseFloat(order.total_price)
    })
  });
  res.sendStatus(200);
});
1

Ajoutez le code dans functions.php

Ou créez un mini-plugin dédié

Collez ce code dans Apparence → Éditeur → functions.php de votre thème enfant, ou créez un plugin unboxproof-integration.php.
PHP
// Déclenché quand le statut passe à "Expédié"
add_action('woocommerce_order_status_shipped', 'send_to_unboxproof');
function send_to_unboxproof($order_id) {
  $order   = wc_get_order($order_id);
  $items   = $order->get_items();
  $product = reset($items);

  $payload = json_encode([
    'order_id'       => (string)$order_id,
    'product_name'   => $product->get_name(),
    'customer_email' => $order->get_billing_email(),
    'customer_name'  => $order->get_billing_first_name()
                       . ' ' . $order->get_billing_last_name(),
    'amount'         => (float)$order->get_total()
  ]);

  wp_remote_post('https://unboxproof.io/api/b2b/orders', [
    'headers' => [
      'Content-Type' => 'application/json',
      'X-API-Key'    => 'votre_clé_api'
    ],
    'body'    => $payload,
    'method'  => 'POST'
  ]);
}

// Afficher le bouton sur la page de confirmation
add_action('woocommerce_thankyou', 'unboxproof_thankyou_widget');
function unboxproof_thankyou_widget($order_id) {
  echo '<div data-unboxproof-order="' . esc_attr($order_id) . '"></div>';
  echo '<script src="https://unboxproof.io/widget.js"></script>';
  echo '<script>UnboxProof.init({apiKey:"votre_clé_api"});</script>';
}
2

Activez le statut "Expédié" dans WooCommerce

Ce statut n'est pas natif — utilisez un plugin si nécessaire

Si votre WooCommerce n'a pas de statut "Expédié", utilisez le plugin gratuit WooCommerce Order Status Manager ou remplacez woocommerce_order_status_shipped par woocommerce_order_status_completed.

1

Configurez votre URL de webhook

UnboxProof enverra un POST à chaque événement important

Depuis votre dashboard → Paramètres, entrez l'URL que vous souhaitez recevoir et testez-la directement.

📦 unboxing.submitted

Déclenché quand un client soumet son unboxing. Contient l'ID commande, la décision IA et le score de confiance.

✅ order.completed

Commande validée automatiquement ou manuellement. Signal pour libérer le stock ou envoyer une facture.

⚠️ order.disputed

L'IA a détecté un problème ou le client a signalé une non-conformité. Action requise de votre part.

⏰ unboxing.expired

Le client n'a pas soumis d'unboxing dans les 48h. La commande est validée automatiquement.

2

Recevez et traitez les événements

Exemple de handler côté serveur

Node.js
app.post('/api/unboxproof-webhook', express.json(), (req, res) => {
  const { event, order_id, ai_recommendation, ai_confidence } = req.body;

  switch (event) {
    case 'unboxing.submitted':
      if (ai_recommendation === 'approve' && ai_confidence > 0.85) {
        markOrderComplete(order_id);   // Auto-validation
      }
      break;
    case 'order.disputed':
      notifySupport(order_id);        // Alerter l'équipe SAV
      break;
    case 'unboxing.expired':
      finalizeOrder(order_id);        // Clôturer automatiquement
      break;
  }

  res.sendStatus(200); // Toujours répondre 200
});
3

Format du payload webhook

Structure JSON envoyée par UnboxProof

JSON
{
  "event":          "unboxing.submitted",
  "order_id":       "CMD-2025-001",
  "product_name":   "Nike Air Max 90",
  "customer_email": "client@email.com",
  "status":         "unboxing_submitted",
  "ai_recommendation": "approve",   // approve | review | dispute
  "ai_confidence":  0.92,
  "timestamp":      "2025-03-11T14:30:00Z"
}

Prêt à intégrer ?

Créez votre compte gratuit, récupérez votre clé API et testez en quelques minutes.

Créer un compte gratuit →