L'API Giftpack vous permet de programmer des flux de cadeaux relationnels (relationship-driven gifting workflows) à l'échelle mondiale, sur les cadeaux, les objets de marque (swag) et les récompenses.
Au lieu de créer un portail de récompenses séparé ou de coordonner manuellement des fournisseurs, vous pouvez orchestrer les événements de cadeaux (gifting events) directement depuis vos systèmes existants, comme le CRM, le HRIS ou vos plateformes d'opérations internes. L'API permet à votre application de déclencher, gérer et suivre ces moments d'engagement de façon programmatique, tandis que Giftpack prend en charge l'exécution logistique (fulfillment), la disponibilité, la logistique et la conformité.
Giftpack n'est pas structuré comme une API e-commerce traditionnelle. Au lieu d'être centré sur des catalogues produits et des transactions de checkout, le système modélise les cadeaux (gifting) comme des événements relationnels. L'identité du destinataire, le timing et le contexte métier sont traités comme des entrées de premier plan, au même titre que l'article envoyé. Cela permet d'aligner naturellement les intégrations avec des déclencheurs réels: onboarding, anniversaires, clôtures de deals, campagnes de rétention ou jalons d'engagement client.
L'API fournit une visibilité de cycle de vie sur chaque étape du processus, y compris le statut de redemption, l'avancement de fulfillment et le suivi de livraison (delivery tracking). Ces endpoints permettent à vos systèmes de mesurer les résultats, d'automatiser les actions de suivi et d'intégrer les cadeaux (gifting) dans vos workflows de reporting et d'opérations.
Au niveau système, Giftpack suit ce modèle de cycle de vie:
Intent → Campaign → Recipient → Redemption → Fulfillment → Tracking
Chaque étape représente une transition d'état dans le cycle d'engagement:
Intent définit le déclencheur métier ou l'objectif.Campaign agit comme conteneur d'engagement.Recipient représente l'identité qui participe à la campagne.Redemption capture l'action du destinataire.Fulfillment gère le processus opérationnel d'exécution logistique.Tracking fournit la visibilité post-action et les analyses.ÉVÉNEMENT MÉTIER
│
▼
[ Intent ]
│
│ (API synchrone)
▼
[ Campaign Created ]
│
│ (API synchrone)
▼
[ Recipient Attached ]
│
│ (API synchrone)
▼
[ Redemption Link Issued ]
│
│ ────── Action utilisateur (asynchrone) ──────
▼
[ Redemption Claimed ]
│
│ (Webhook: giftee.preparing)
▼
[ Shipment Processing ]
│
│ (Webhook: giftee.shipped)
▼
[ Tracking / Delivered ]
│
│ (Webhook: giftee.delivered / giftee.failed / giftee.returned)
▼
[ Final Tracking State ]
│
│ (Webhook: giftee.reviewed)
●
La première moitié du cycle est initiée de manière synchrone via des appels API. La seconde progresse de manière asynchrone via les actions des destinataires et les événements d'exécution logistique (fulfillment). Les intégrations doivent s'appuyer sur les champs de statut et les webhooks, plutôt que de supposer une complétion immédiate.
Ce modèle s'applique de manière cohérente aux campagnes de cadeaux intelligents (smart gifting) AutoMatch™, aux commandes marketplace (marketplace orders), aux flux objets de marque (swag workflows) et aux cas d'automatisation d'entreprise. Le comprendre est essentiel pour construire des intégrations fiables dans des environnements asynchrones et event-driven.

Ces définitions décrivent les objets métier principaux utilisés dans les intégrations API Giftpack. Comprendre leurs relations est essentiel avant de construire des workflows. Giftpack fonctionne sur trois couches principales:
Couche d'Engagement (Engagement Layer)Couche Commerce (Commerce Layer)Couche Supply & Opérations (Supply & Operations Layer)Cette couche modélise le cycle de relation entre l'expéditeur et le destinataire. Elle est pilotée par événements (event-driven) et souvent asynchrone.
Une personne réelle (employé, client ou partenaire) susceptible de recevoir des cadeaux ou récompenses. En termes API, un Recipient est une identité persistante dans un workspace Giftpack. Les Recipients peuvent exister indépendamment des campagnes et participer à plusieurs campagnes dans le temps.
Un ensemble logique de destinataires utilisé pour le ciblage et l'affectation en masse. Les groupes sont des structures organisationnelles. Ils ne représentent pas des transactions.
Une campagne représente une intention d'engagement unique.
Elle définit:
Une campagne n'est pas une commande. Une campagne agit comme conteneur de cycle de vie où se produisent les événements de redemption et de fulfillment.
Un Recipient devient un Giftee lorsqu'il est rattaché à une Campaign. Giftee représente l'état de participation du destinataire dans une campagne spécifique. Cette distinction est importante:
Recipient = identitéGiftee = état lié à la campagneDéfinit la couche de présentation d'une campagne, incluant:
Les templates affectent la communication, pas la logique de fulfillment.
Redemption capture l'action du destinataire pour réclamer un cadeau. La redemption peut se produire via:
Redemption fait passer l'engagement de "invited" à "claimed".
Une URL unique permettant à un Giftee de réclamer son cadeau.
Un email qui délivre le lien de redemption via le campaign template.
Cette couche gère les opérations transactionnelles et liées au fulfillment. Elle peut fonctionner indépendamment des workflows de campagne.
Un article fixe et curaté sélectionné directement par l'expéditeur. Généralement fulfilled juste après la commande.
Une transaction d'achat directe pour un ou plusieurs destinataires. Les marketplace orders peuvent contourner la redemption de campagne et aller directement au fulfillment. Marketplace Order ≠ Campaign.
Un destinataire assigné comme cible de fulfillment pour une marketplace order.
Un produit personnalisable géré via l'inventaire et l'entrepôt Giftpack. Les produits swag peuvent nécessiter:
Un objet conteneur vendable dans les catalogues marketplace ou swag.
Une configuration achetable spécifique d'un produit, par exemple:
Les transactions se font toujours au niveau Product Variant.
Cette couche alimente le fulfillment et la gestion des vendors. Elle est souvent abstraite pour la plupart des intégrations, mais reste importante pour comprendre les transitions de statut.
Couche opérationnelle responsable de:
Un vendor qui fournit des produits dans l'écosystème Giftpack.
Un provider supervisé par un procurement office pour la qualité de catalogue, l'onboarding et le contrôle opérationnel.
Un identifiant unique utilisé pour référencer un provider dans les opérations API.
La structure suivante illustre les relations entre ces entités:
Recipient
└─ may belong to Recipient Group
└─ becomes Giftee when attached to Campaign
Campaign (Engagement Container)
├─ defines Redemption rules
├─ manages Giftee states
└─ may generate Fulfillment Orders
Commerce Layer
├─ Marketplace Order (direct transaction)
└─ Swag Order (inventory-based transaction)
Redemption
├─ Link-based
├─ Email-based
└─ Transitions state before fulfillment

Toutes les requêtes vers la Giftpack Integration API doivent être authentifiées avec une API Key valide.
L’authentification est obligatoire sur tous les endpoints et appliquée à la frontière du workspace. Les requêtes non autorisées ou mal authentifiées sont rejetées avant l’exécution de la logique métier.
Chaque workspace Giftpack peut générer une ou plusieurs API Keys via le dashboard Giftpack.
Les API Keys servent à :
Les API Keys sont workspace-scoped.
Elles ne peuvent pas accéder aux ressources hors de leur workspace d’origine.
Giftpack ne partage jamais les API Keys entre workspaces.
Note de sécurité : Les API Keys donnent accès à des ressources du workspace. Traitez-les comme des identifiants confidentiels.
Pour générer une API Key :
Les API Keys sont actives immédiatement après création. Les événements de création de clé sont journalisés pour audit et traçabilité.
Important : Conservez votre API Key en sécurité. Ne l’exposez pas dans du code client-side ni dans des dépôts publics.
Incluez votre API Key dans le header X-API-KEY pour chaque requête.
GET /v1/recipients HTTP/1.1
Host: developer.giftpack.ai
X-API-KEY: YOUR_API_KEY
Les requêtes sans API Key valide retournent une erreur d’authentification. L’authentification est effectuée avant le traitement de la requête et l’évaluation des ressources.
L’autorisation est appliquée au niveau workspace. Une API Key peut accéder uniquement à :
L’accès inter-workspaces est strictement interdit. Les décisions d’autorisation sont appliquées côté serveur et ne peuvent pas être contournées par des paramètres client.
Les intégrations enterprise doivent implémenter des contrôles de cycle de vie des clés.
Bonnes pratiques :
Si une API Key est révoquée, toute requête ultérieure avec cette clé est rejetée.
Giftpack ne fait pas de rotation automatique des API Keys. Cette gestion relève de l’organisation intégratrice.
Toutes les requêtes API doivent être envoyées via HTTPS.
TLS 1.2Toutes les données en transit sont chiffrées via TLS standard industrie.
Cela inclut :
Giftpack ne prend pas en charge les connexions non sécurisées.
Les requêtes API sont soumises au rate limiting pour assurer stabilité et usage équitable. En cas de dépassement, l’API renvoie :
429RATE_LIMIT_EXCEEDEDLes intégrations doivent :
Pour des charges enterprise à fort volume ou en pic, contactez Giftpack pour ajuster la configuration de rate.
Les APIs Giftpack peuvent traiter des données personnelles identifiables (PII), notamment :
Responsabilités développeur :
Giftpack traite les données uniquement pour exécuter les workflows de gifting et rewards. Giftpack n’utilise pas les données recipients à des fins publicitaires ou de profilage non lié.
Pour les environnements enterprise, les intégrations doivent :
Giftpack conserve des logs internes pour :
Les erreurs d’authentification et d’autorisation suivent une structure cohérente.
{
"error_code": "UNAUTHORIZED",
"message": "Invalid or missing API key",
"action": "Verify your API key and include it in the X-API-KEY header"
}
Codes d’erreur d’authentification courants :
UNAUTHORIZEDFORBIDDENRATE_LIMIT_EXCEEDEDPour la production :
En cas de suspicion de compromission d’une API Key :

L’API Giftpack utilise des codes HTTP standards et renvoie des payloads d’erreur structurés.
Toutes les réponses d’erreur incluent un code d’erreur lisible par machine et un request_id.
En contactant le support, journalisez et fournissez toujours le request_id.
Toutes les erreurs suivent cette structure :
{
"error": {
"code": "invalid_request",
"message": "Recipient email is required.",
"request_id": "req_123"
}
}
code – Identifiant d’erreur lisible par machinemessage – Explication lisible par humainrequest_id – Identifiant unique de traçage pour le débogageLe request_id doit être conservé dans vos logs pour le troubleshooting opérationnel.
Giftpack utilise la sémantique standard des statuts HTTP :
200 / 201 – Requête réussie400 – Validation échouée ou requête mal formée401 – API Key manquante ou invalide403 – Permissions insuffisantes404 – Ressource introuvable409 – Conflit (ex. ressource dupliquée ou violation d’état)429 – Limite de débit dépassée5xx – Erreur interne serveurToutes les erreurs ne doivent pas être rejouées.
Peut être rejoué en sécurité
429 (Limite de débit dépassée)5xx (Erreurs serveur)Utilisez un exponential backoff pour les retries. Évitez les retries immédiats et agressifs.
Ne pas réessayer
400 (Erreurs de validation)401 / 403 (Échec d’authentification ou de permission)404 (Référence de ressource invalide)409 (Conflits de logique métier)Ces erreurs indiquent des problèmes côté client à corriger avant renvoi.
Une réponse HTTP réussie ne garantit pas la fin du fulfillment.
Par exemple :
201 Created confirme qu’un campaign a été crééLes opérations Giftpack progressent souvent de manière asynchrone.
Pour déterminer l’état du lifecycle :
GETTraitez toujours un succès HTTP comme une acceptation de requête, pas comme une finalisation métier.
Si votre intégration effectue des retries, assurez-vous que les requêtes dupliquées ne créent pas d’effets de bord.
Selon le cas :
Giftpack peut refuser la création dupliquée selon la logique de l’endpoint.
Lorsque les limites de débit sont dépassées :
429 est renvoyéLes intégrations doivent :
Si vous rencontrez des erreurs inattendues :
request_idrequest_id au support GiftpackCela permet une traçabilité rapide dans les logs serveur.

Les workflows Giftpack sont asynchrones.
Une réponse API réussie confirme qu’une requête a été acceptée. Les mises à jour de lifecycle (redemption, fulfillment, shipping, delivery) sont communiquées via des événements webhook.
Les intégrations de production doivent traiter les webhooks comme le mécanisme principal de mise à jour d’état. Le polling des endpoints de statut doit être limité à la réconciliation ou à la reprise.
Les types d’événements webhook sont gérés et affichés dans le dashboard Giftpack. Pour consulter/configurer les triggers disponibles :
https://giftpack.ai/app/developer/webhooks
L’UI du dashboard est la source de vérité pour les événements disponibles en production.
Exemples actuellement pris en charge :
giftee.createdgiftee.launchedgiftee.preparinggiftee.shippedgiftee.deliveredgiftee.failedgiftee.returnedgiftee.reviewedLa disponibilité peut évoluer. Référez-vous toujours au dashboard pour la production.
Les webhooks sont configurés par workspace via le dashboard. Chaque configuration inclut :
nameendpointevent_typesactivesecret key scoped au workspaceExemple :
{
"name": "Giftpack Delivery Updates",
"endpoint": "https://example.com/webhooks/giftpack",
"event_types": [
"giftee.created",
"giftee.shipped",
"giftee.delivered"
]
}
Plusieurs configurations webhook peuvent exister par workspace.
La livraison webhook suit un modèle at-least-once.
Cela implique :
Une livraison est considérée réussie si votre endpoint retourne un statut HTTP 2xx.
Les réponses non-2xx déclenchent des tentatives supplémentaires.
Votre endpoint webhook doit :
POST avec payload JSON2xx pour confirmer le succèsExemple d’ack :
HTTP/1.1 200 OK
Content-Type: application/json
{"ok": true}
Utilisez l’ID d’événement webhook comme clé de déduplication.
Giftpack fournit un journal complet des événements webhook dans le dashboard. Chaque événement contient :
Statuts de livraison dans les logs :
0 – failed1 – processing2 – successL’API de détail expose :
Exemple d’objet détail :
{
"webhook_event_id": "wev_01H...",
"webhook_setting_id": "whs_01H...",
"webhook_event_type": "giftee.shipped",
"webhook_event_resource_type": "giftee",
"webhook_event_resource_id": "gft_01H...",
"webhook_event_status": 2,
"webhook_event_attempts": 1,
"webhook_event_data": "{...raw payload...}",
"webhook_event_created_at": "2026-02-20T02:00:00.000Z",
"webhook_event_updated_at": "2026-02-20T02:00:01.000Z"
}
Chaque tentative inclut :
Ce journal assure une traçabilité complète et simplifie le debugging.
Giftpack fournit une console de test Webhook intégrée. Elle permet de :
Cela permet :
Exemple de réponse de test :
{
"event_data": {
"type": "giftee.created",
"resource_type": "giftee",
"resource_id": "gft_01H..."
},
"response_http_status": "200",
"response_http_headers": {"content-type": "application/json"},
"response_http_body": "{\"ok\":true}"
}
La console de test est destinée à la validation avant activation en production.
Même si l’UI peut actuellement accepter http et https, les intégrations de production doivent toujours utiliser HTTPS.
HTTPS garantit :
Pour un traitement webhook fiable :
L’intégration webhook est la source autoritative des mises à jour de lifecycle. N’assumez pas qu’une réponse API synchrone représente l’état final.
Pour garantir que les événements webhook proviennent de Giftpack et n’ont pas été altérés, chaque requête est signée avec un secret spécifique au workspace.
Les intégrations de production doivent vérifier les signatures webhook.
Chaque requête webhook inclut le header suivant :
X-GIFTPACK-SIGNATURE: t=1708459200,v1=abcdef1234567890...
Composants
t — timestamp Unix (secondes)v1 — signature HMAC SHA-256La signature est générée via :
HMAC_SHA256(secret, `${timestamp}.${raw_body}`)
Le raw body doit être utilisé tel que reçu.
Pour vérifier une requête webhook :
X-GIFTPACK-SIGNATUREt et v1expected_signature = HMAC_SHA256(secret, `${timestamp}.${raw_body}`)
Pour éviter les replay attacks :
Fenêtre temporelle exemple :
current_time - timestamp <= 300 seconds
Exemple (Node.js)
const crypto = require('crypto');
function verifySignature(rawBody, signatureHeader, secret) {
if (!signatureHeader) return false;
const elements = signatureHeader.split(',');
const timestamp = elements.find(e => e.startsWith('t='))?.split('=')[1];
const signature = elements.find(e => e.startsWith('v1='))?.split('=')[1];
if (!timestamp || !signature) return false;
const payload = `${timestamp}.${rawBody}`;
const expected = crypto
.createHmac('sha256', secret)
.update(payload, 'utf8')
.digest('hex');
const isValid = crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
const currentTime = Math.floor(Date.now() / 1000);
const tolerance = 300;
if (Math.abs(currentTime - Number(timestamp)) > tolerance) {
return false;
}
return isValid;
}
Exemple Express :
app.post('/webhooks/giftpack',
express.raw({ type: 'application/json' }),
(req, res) => {
const signature = req.headers['x-giftpack-signature'];
const isValid = verifySignature(
req.body.toString(),
signature,
process.env.GIFTPACK_WEBHOOK_SECRET
);
if (!isValid) {
return res.status(400).send('Invalid signature');
}
const event = JSON.parse(req.body.toString());
// Process event safely
res.status(200).json({ ok: true });
});
Les webhook secrets :
Si un secret est roté, mettez à jour l’intégration immédiatement.
Si la vérification échoue :
2xxDes échecs répétés peuvent indiquer :
La livraison webhook suit un modèle at-least-once. Des événements dupliqués sont possibles.

Giftpack API est conçu autour de workflows métier réels.
Au lieu de naviguer endpoint par endpoint, choisissez d’abord le cas métier à implémenter. Chaque cas ci-dessous décrit :
La vérification de signature webhook est documentée dans Webhooks et Événements Asynchrones.
Scénario Métier
Vous souhaitez :
Il s’agit d’un flux Giftee basé sur Campaign.
Vue Lifecycle
Create Campaign
↓
Add Giftee
↓
Generate Redemption Link
↓
Recipient Claims
↓
Order Processing
↓
Shipped
↓
Delivered / Failed / Returned
POST /v1/campaigns
Définit :
POST /v1/giftees
Chaque giftee représente un recipient dans le campaign.
POST /v1/campaigns/{campaignId}/giftees/{gifteeId}/redeemlink
Retourne :
share_claim_linkVous pouvez :
Pour ce cas, abonnez-vous au lifecycle giftee :
giftee.created
giftee.launched
giftee.preparing
giftee.shipped
giftee.delivered
giftee.failed
giftee.returned
giftee.reviewed
Ces événements représentent l’état opérationnel de chaque giftee. Voir Webhooks et Événements Asynchrones pour :
Scénario Métier
Vous souhaitez :
Il s’agit d’un flux Direct Marketplace Order.
Vue Lifecycle
Select Product
↓
Create Marketplace Order
↓
Preparing
↓
Shipped
↓
Delivered / Failed / Returned
GET /v1/providers/{providerCode}/products
Utilisez cet endpoint pour lister les produits. Puis détail produit si nécessaire :
GET /v1/providers/{providerCode}/products/{productId}
Sélectionnez :
POST /v1/marketplaceorders
Fournissez :
La commande est acceptée en asynchrone et fulfillment démarre.
Le fulfillment marketplace se traduit en événements lifecycle giftee :
giftee.preparing
giftee.shipped
giftee.delivered
giftee.failed
giftee.returned
Voir Webhooks et Événements Asynchrones pour :
Scénario Métier
Vous souhaitez :
Il s’agit d’un flux gifting basé sur points.
Vue Lifecycle
Enable Points
↓
Allocate Points
↓
Recipient Redeems
↓
Giftee Created
↓
Fulfillment Lifecycle
POST /v1/pointrecipients/{memberId}/enablepointfeature
Active la capacité de conserver et de dépenser des points.
PATCH /v1/pointrecipients/{memberId}/points
Fournissez :
Le solde recipient est mis à jour immédiatement.
Quand un recipient utilise ses points :
Le redemption points se résout finalement en événements lifecycle giftee :
giftee.created
giftee.preparing
giftee.shipped
giftee.delivered
giftee.failed
giftee.returned
Voir Webhooks et Événements Asynchrones pour :