lomi.
Payments

Produits

Gérez les produits, les tarifs et la configuration des abonnements.

L’API Products permet de gérer votre catalogue. Un produit représente un article ou un service ; chaque produit peut avoir jusqu’à 3 tarifs actifs.

Créer un produit

Crée un produit avec un ou plusieurs tarifs. Au moins un tarif est obligatoire.

Corps de la requête

ChampTypeObligatoireDescription
namestringOuiNom du produit
descriptionstringNonDescription du produit
product_typestringOuione_time, recurring ou usage_based
imagesarrayNonURLs d’images
is_activebooleanNonActif (défaut : true)
display_on_storefrontbooleanNonVisible sur la vitrine (défaut : true)
pricesarrayOuiTableau d’objets tarif (voir ci-dessous)
metadataobjectNonMétadonnées clé-valeur
fee_type_idsarrayNonIDs de types de frais à appliquer

Champs produit récurrent :

ChampTypeDescription
failed_payment_actionstringAction si paiement échoué : pause, cancel, retry
charge_daynumberJour du mois de prélèvement (1–31)
first_payment_typestringinitial, non_initial, prorated
trial_enabledbooleanActiver une période d’essai
trial_period_daysnumberDurée de l’essai en jours

Champs produit à l’usage :

ChampTypeDescription
usage_aggregationstringsum, max, last_during_period, last_ever
usage_unitstringUnité de mesure (ex. api_calls)

Objet tarif

ChampTypeObligatoireDescription
amountnumberOuiMontant (plus petite unité monétaire)
currency_codestringOuiXOF, USD, EUR
billing_intervalstringNonday, week, month, year (requis pour récurrent)
pricing_modelstringNonstandard (défaut), pay_what_you_want ou tiered
minimum_amountnumberPWYWRequis si pricing_model est pay_what_you_want
maximum_amountnumberNonPlafond optionnel pour pay_what_you_want
is_defaultbooleanNonTarif par défaut
metadataobjectNonMétadonnées sur le tarif

pay_what_you_want exige minimum_amount (éventuellement maximum_amount). Pour standard et tiered, omittez-les sauf besoin d’intégration.

import { LomiSDK } from '@lomi./sdk';

const lomi = new LomiSDK({
  apiKey: process.env.LOMI_API_KEY!,
  environment: 'live',
});

// One-time product
const product = await lomi.products.create({
  name: 'E-book Bundle',
  description: 'Collection de guides complète',
  product_type: 'one_time',
  prices: [
    {
      amount: 25000,
      currency_code: 'XOF',
      is_default: true,
    },
  ],
  display_on_storefront: true,
});

// Subscription product with trial
const subscription = await lomi.products.create({
  name: 'Premium Plan',
  description: 'Accès premium mensuel',
  product_type: 'recurring',
  prices: [
    {
      amount: 10000,
      currency_code: 'XOF',
      billing_interval: 'month',
      is_default: true,
    },
  ],
  trial_enabled: true,
  trial_period_days: 14,
  failed_payment_action: 'retry',
});

console.log(`Product created: ${product.product_id}`);
from lomi import LomiClient
import os

client = LomiClient(
    api_key=os.environ["LOMI_API_KEY"],
    environment="test"
)

# One-time product
product = client.products.create({
    "name": "E-book Bundle",
    "description": "Collection de guides complète",
    "product_type": "one_time",
    "prices": [
        {
            "amount": 25000,
            "currency_code": "XOF",
            "is_default": True
        }
    ],
    "display_on_storefront": True
})

print(f"Product created: {product['product_id']}")
curl -X POST "https://api.lomi.africa/products" \
  -H "X-API-KEY: $LOMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "E-book Bundle",
    "description": "Collection de guides complète",
    "product_type": "one_time",
    "prices": [
      {
        "amount": 25000,
        "currency_code": "XOF",
        "is_default": true
      }
    ],
    "display_on_storefront": true
  }'

Lister les produits

Récupère les produits avec filtrage optionnel.

Paramètres de requête

ParamètreTypeDescription
isActivebooleanFiltrer par statut actif
limitnumberRésultats par page (défaut : 15)
offsetnumberDécalage (défaut : 0)
const products = await lomi.products.list({
  isActive: true,
  limit: 20,
});
products = client.products.list(isActive=True, limit=20)
curl -X GET "https://api.lomi.africa/products?isActive=true&limit=20" \
  -H "X-API-KEY: $LOMI_API_KEY"

Obtenir un produit

Récupère le détail du produit et tous ses tarifs.

const product = await lomi.products.get('prod_abc123...');
console.log(`Default price: ${product.prices.find(p => p.is_default)?.amount}`);
product = client.products.get('prod_abc123...')
curl -X GET "https://api.lomi.africa/products/prod_abc123..." \
  -H "X-API-KEY: $LOMI_API_KEY"

Ajouter un tarif à un produit

Ajoute une nouvelle option de tarif à un produit existant.

Un produit peut compter au maximum 3 tarifs actifs. Les tarifs existants ne se modifient pas — créez-en un nouveau.

const price = await lomi.products.addPrice('prod_abc123...', {
  amount: 50000,
  currency_code: 'XOF',
  billing_interval: 'year',
});

console.log(`New price added: ${price.price_id}`);
price = client.products.add_price('prod_abc123...', {
    "amount": 50000,
    "currency_code": "XOF",
    "billing_interval": "year"
})
curl -X POST "https://api.lomi.africa/products/prod_abc123.../prices" \
  -H "X-API-KEY: $LOMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 50000,
    "currency_code": "XOF",
    "billing_interval": "year"
  }'

Définir le tarif par défaut

Définit un tarif comme tarif par défaut pour un produit.

const product = await lomi.products.setDefaultPrice('prod_abc123...', 'price_def456...');
product = client.products.set_default_price('prod_abc123...', 'price_def456...')
curl -X POST "https://api.lomi.africa/products/prod_abc123.../prices/price_def456.../set-default" \
  -H "X-API-KEY: $LOMI_API_KEY"

Objet Product

Les champs correspondent à la ressource produit de l’API (voir OpenAPI Products). Champs courants :

ChampTypeDescription
product_idstringIdentifiant produit
organization_idstringOrganisation propriétaire
namestringNom
descriptionstring | nullDescription
product_typestringone_time, recurring, usage_based
imagesarray | nullURLs d’images
is_activebooleanStatut actif
display_on_storefrontbooleanVisibilité vitrine
pricesarrayObjets tarif (price_id, amount, currency_code, billing_interval, pricing_model, minimum_amount, maximum_amount, is_active, is_default, metadata, horodatages)
feesarrayLignes de frais associées (si présentes)
environmentstringtest ou live
failed_payment_actionstring | nullRécurrent : pause, cancel, retry
charge_daynumber | nullJour de prélèvement (1–31)
first_payment_typestring | nullinitial, non_initial, prorated
trial_enabledbooleanEssai activé
trial_period_daysnumber | nullDurée d’essai
usage_aggregationstring | nullProduits à l’usage
usage_unitstring | nullProduits à l’usage
metadataobject | nullMétadonnées
created_atstringCréation
updated_atstringDernière mise à jour

Réponses d’erreur

StatutDescription
400Entrée invalide ou plafond de tarifs dépassé
401Clé API invalide ou manquante
404Produit ou tarif introuvable

Sur cette page