Documentation J+SERVICES Guides Référence API

Contrat API — liens technicien et portefeuille

Devise unique : XOF. Le technicien est identifié par son resellers.id, porté dans le portefeuille comme compte EXPERT.

Routes technicien

POST /api/v1/expert/billing/payment-links

Corps :

{
  "link_type": "INVOICE",
  "category_code": "INTERVENTION",
  "amount": 10000,
  "description": "Installation routeur",
  "customer_email": "client@example.com",
  "customer_phone": "+229...",
  "expires_in_hours": 72
}

Réponse :

{
  "success": true,
  "data": {
    "id": "uuid",
    "url": "https://live.jmoai.net/api/v1/pay/expert/uuid",
    "link_type": "INVOICE",
    "amount": 10000,
    "fee_pct": 15,
    "net_for_expert": 8500
  }
}

LICENSE_SALE ne prend pas category_code et crédite 100 % du montant.

GET /api/v1/expert/billing/payment-links liste uniquement les liens du technicien authentifié.

GET /api/v1/expert/wallet renvoie le solde et l’historique du compte EXPERT.

GET /api/v1/expert/billing/categories renvoie les catégories actives et leur taux.

Page publique

GET /api/v1/pay/expert/:id

La page affiche la description, le montant et la mention « Encaissé par J+SERVICES ». Elle ne montre jamais l’e-mail ni le téléphone du technicien. Le montant utilisé pour FedaPay vient toujours de la ligne expert_payment_links.

Webhook

Le paiement FedaPay porte :

{
  "type": "EXPERT_PAYMENT_LINK",
  "expert_payment_link_id": "uuid"
}

Le backend relit la transaction chez FedaPay avant tout crédit : statut approved, montant identique, devise XOF. Il n’y a pas de signature côté FeexPay dans ce lot ; quand FeexPay sera ajouté, la vérification se fera par relecture du statut chez le prestataire, pas par confiance dans le corps reçu.