Skip to main content

Qu’est-ce qu’un Price ?

Un Price (Prix) définit comment un produit est facturé. Il peut s’agir d’un paiement unique ou d’un abonnement récurrent avec différentes périodicités.
Format de l’identifiant : price_ suivi de 36 caractères alphanumériques.Exemple : price_abc123def456ghi789jkl012mno345

Relation Produit → Price

Un prix est rattaché à un produit via productId, et un produit peut porter plusieurs prix pour différentes stratégies tarifaires :
Cette flexibilité permet de proposer plusieurs options de paiement pour le même produit et de gérer plusieurs devises.

Attributs du Price

Attributs principaux

Attributs récurrents (abonnements)

Créer un prix

Un premier prix se pose à la création du produit avec defaultPriceData (voir Produits). POST /v1/prices est la porte du second prix — un tarif annuel à côté du mensuel, ou une seconde devise — en indiquant dans le corps le produit auquel il se rattache.

Corps de la requête

string
Identifiant du produit auquel le prix se rattache. productId ou skuId est requis — aucun des deux n’est individuellement obligatoire côté validateur, mais la requête est refusée si les deux sont absents. skuId est une forme héritée, conservée pour compatibilité ; productId reste la voie normale.
number
requis
Montant dans l’unité principale de la devise. Strictement positif et au maximum 99999999.99.
string
requis
Code devise, stocké et renvoyé en minuscules. Obligatoire — il n’y a pas de devise par défaut. Limité à xaf et eur, voir la section Devises supportées plus bas.
enum
défaut:"one_time"
one_time ou recurring.
enum
day, week, month ou year. Prix récurrents uniquement.
number
Nombre d’intervalles par cycle de facturation. Strictement positif.
number
Jours d’essai gratuit, 0 ou plus.
boolean
défaut:"true"
Passez false pour créer le prix déjà désactivé.
Un prix est immuable. PUT /v1/prices/{id} ne modifie que le champ active — aucun autre champ n’est lu, même s’il est présent dans le corps. Pour changer un montant, une devise ou une cadence, créez un nouveau prix : à dimensions égales (produit × devise × type × cadence), l’ancien prix actif est désactivé automatiquement. Détail de cette règle de remplacement plus bas, dans la section Réponse API.

Types de tarification

One-Time (one_time)

Le client paie une seule fois pour accéder au produit.Cas d’usage :
  • Achats ponctuels
  • Produits physiques
  • Téléchargements numériques
  • Accès à vie

Intervalles de facturation

Pour les prix récurrents, définissez la fréquence de facturation :

Périodes d’essai

Offrez une période d’essai gratuit pour attirer de nouveaux clients :
1

Début de l'abonnement

Le client s’inscrit et démarre sa période d’essai gratuite
2

Période d'essai

Pendant 14 jours, le client a accès complet sans être facturé
3

Fin de l'essai

À la fin de la période d’essai, le premier paiement est prélevé automatiquement
4

Cycle récurrent

Les paiements suivants sont prélevés selon l’intervalle défini
Assurez-vous d’informer clairement vos clients sur la durée de l’essai et le montant qui sera facturé après.

Gestion multi-devises

Créez un prix par devise pour le même produit. Chaque prix correspond à un appel POST /v1/prices distinct :

Devises supportées

La liste est fermée, pas indicative. currency est validée contre une énumération — toute autre valeur, y compris un code ISO 4217 réel comme XOF ou USD, est refusée en 422. Il n’y a que deux devises acceptées aujourd’hui.
Tous les montants sont exprimés dans l’unité principale de la devise, jamais en centimes. Par exemple : 25000 XAF = 25 000 XAF, 39 EUR = 39 €.

Réponse API

GET /v1/prices/{id} expose product et sku à la racine de l’objet.
string
Identifiant du produit parent.
object
Le produit parent, toujours présent.
string | null
Hérité. null pour un prix créé au niveau produit — la voie normale aujourd’hui.
object | null
Hérité. La variante dont provient le prix, pour les prix créés avant que le SKU quitte le contrat de création. null sinon.
price.sku peut valoir un objet non nul. Un prix créé par l’ancien chemin (rattaché à une variante) le porte encore et le portera tant qu’il n’a pas été remplacé par un nouveau prix. Toute intégration qui déréférence price.sku — par exemple price.sku.product — doit se prémunir contre null, dans les deux sens : ne pas planter s’il est absent, et ne pas supposer qu’il l’est toujours.
Règle de remplacement. La création d’un prix désactive automatiquement le prix qui était actif pour le même produit, la même devise, le même type et la même cadence (billingInterval + billingIntervalCount). C’est ce qui rend un prix immuable : au lieu de modifier un prix existant, on en crée un nouveau, et le remplacement se fait tout seul.Conséquence à connaître : un prix mensuel et un prix annuel ont le même type (recurring) mais une cadence différente, donc ils coexistent sans se remplacer — c’est ainsi qu’on propose les deux options sur le même produit.

Opérations courantes

Créer un prix

Récupérer un prix

Lister les prix d’un produit

GET /v1/prices accepte les filtres suivants, combinables entre eux :

Désactiver un prix

🛑 Cette page a longtemps affirmé que « les prix ne peuvent pas être supprimés s’ils sont associés à des abonnements actifs » — c’est faux, et ce n’est pas nuancé : il n’y a aucune condition du tout. DELETE /v1/prices/{id} ne supprime rien et ne consulte jamais la moindre souscription — il désactive inconditionnellement le prix (active: false) et renvoie {"message": "Price deactivated"}. PUT produit le même effet, et c’est le seul changement qu’il accepte.

Stratégies de tarification

Offre mensuelle vs annuelle

Proposez une réduction pour l’abonnement annuel — deux appels POST /v1/prices sur le même produit, avec deux cadences différentes :
9 000 XAF/mois vs 90 000 XAF/an représente environ 2 mois gratuits, ce qui incite les clients à s’engager sur l’année.

Tarification par paliers

Créez un produit par niveau de service, chacun avec son prix :

Getters utiles

Le modèle Price fournit des getters pour faciliter les vérifications :

Bonnes pratiques

Les montants sont exprimés dans l’unité principale de la devise, jamais en centimes :
  • XAF : 25000 = 25 000 XAF
  • EUR : 39 = 39 €
Les décimales sont acceptées et le montant ne peut pas dépasser 99999999.99. L’API le renvoie sous forme de chaîne décimale ("25000.00").
  • Un prix est immuable : ne comptez jamais sur PUT pour changer un montant, une devise ou une cadence — il ne touche que active
  • Créez un nouveau prix ; l’ancien prix actif de mêmes dimensions se désactive tout seul
  • Lisez le produit dans price.product
  • Désactivez les anciens prix plutôt que de les supprimer
  • Gardez les prix actifs au minimum nécessaire
  • Gardez en tête qu’un nouveau prix désactive le prix actif de même produit, devise, type et cadence
  • 7 à 14 jours est généralement optimal
  • Trop court : pas assez de temps pour évaluer
  • Trop long : perte de revenus potentielle
  • Ajustez les prix pour chaque marché (pas de simple conversion)
  • Tenez compte du pouvoir d’achat local
  • Utilisez des prix psychologiques (9 000 XAF plutôt que 8 750 XAF)

Prochaines étapes

Créer des promotions

Appliquez des réductions avec les coupons et codes promo

Gérer les abonnements

Comprenez le cycle de vie des abonnements