Guide complet pour intégrer les paiements en stablecoin dans votre système POS avec l'API OSTRIA
L'API POS utilise un système d'authentification par clé API, distinct du système JWT utilisé par l'application web.
Deux méthodes sont supportées :
X-API-Key: ostria_xxxxx...xxxxx
Authorization: Bearer ostria_xxxxx...xxxxx
Obtenir votre clé API :
ostria_xxxxx...xxxxxL'URL de base de l'API vous sera communiquée lors de l'obtention de votre clé API.
Contactez-nous à info@ostriapay.com pour obtenir votre clé API et l'URL de base de l'environnement approprié (production ou développement).
Authentification : Requise (API Key)
{
"amount_eur": 50.00,
"pos_transaction_id": "POS-TEST-001", // Optionnel
"date": "2026-01-18T12:00:00Z", // Optionnel
"notification_mode": "polling", // "polling" ou "webhook"
"webhook_url": "https://..." // Requis si notification_mode = "webhook"
}
{
"payment_id": "PAY-ABC123DEF456",
"qr_code_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"amount_eur": 50.00,
"amount_crypto": 54.35,
"crypto_type": "USDC",
"exchange_rate": 0.92,
"polling_url": "/api/pos/payments/PAY-ABC123DEF456/status",
"created_at": "2026-01-18T12:00:00Z"
}
Notes importantes :
qr_code_base64 est retourné au format data URI complet (data:image/png;base64,{base64_string}), prêt à être utilisé directement dans un tag HTML <img>payment_id doit être sauvegardé pour les requêtes de pollingwebhook_url est requis uniquement si notification_mode = "webhook"Erreurs possibles :
400 : Requête invalide (webhook_url manquant, wallet non configuré, etc.)401 : Authentification échouée (clé API invalide/inactive)403 : API POS non activée pour le merchantAuthentification : Requise (API Key)
{
"payment_id": "PAY-ABC123DEF456",
"status": "pending", // "pending", "confirmed", "completed"
"paid": false,
"amount_eur": 50.00,
"amount_crypto": 54.35,
"crypto_type": "USDC",
"transaction_hash": null, // Disponible quand paid = true
"confirmed_at": null, // Disponible quand paid = true
"created_at": "2026-01-18T12:00:00Z"
}
Recommandations de polling :
paid: true pour optimiser les performancesWorkflow de polling :
payment_idGET /api/pos/payments/{payment_id}/status toutes les 3-5 secondespaid: trueAuthentification : Requise (API Key)
{
"payment_id": "PAY-ABC123DEF456",
"status": "completed",
"paid": true,
"amount_eur": 50.00,
"amount_crypto": 54.35,
"crypto_type": "USDC",
"exchange_rate": 0.92,
"transaction_hash": "0x1234567890abcdef...",
"confirmations": 3,
"created_at": "2026-01-18T12:00:00Z",
"confirmed_at": "2026-01-18T12:05:30Z",
"completed_at": "2026-01-18T12:05:30Z",
"pos_transaction_id": "POS-TEST-001",
"notification_mode": "polling"
}
Recevez des notifications automatiques lorsque les paiements sont confirmés
Pour recevoir des notifications webhook, configurez lors de la création du paiement :
{
"amount_eur": 50.00,
"notification_mode": "webhook",
"webhook_url": "https://your-pos-system.com/webhook/ostria"
}
Lorsqu'un paiement est confirmé, Ostria envoie une requête POST à votre webhook_url :
Method : POST
Headers : Content-Type: application/json
{
"payment_id": "PAY-ABC123DEF456",
"status": "completed",
"paid": true,
"amount_eur": 50.00,
"amount_crypto": 54.35,
"crypto_type": "USDC",
"transaction_hash": "0x1234567890abcdef...",
"confirmed_at": "2026-01-18T12:05:30Z"
}
Retry et gestion d'erreurs :
Recommandations :
payment_id pour éviter les doublons)Voici un exemple concret d'intégration en JavaScript pour vous donner une idée de la simplicité
// 1. Créer le paiement
const response = await fetch('{BASE_URL}/api/pos/payments/create', {
method: 'POST',
headers: {
'X-API-Key': 'ostria_votre_cle_api',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount_eur: 50.00,
pos_transaction_id: 'TXN-001',
notification_mode: 'polling'
})
});
const payment = await response.json();
// 2. Afficher le QR code (format data URI complet)
const img = document.createElement('img');
img.src = payment.qr_code_base64; // Prêt à utiliser directement
document.getElementById('qr-container').appendChild(img);
// 3. Poller le statut toutes les 3 secondes
const pollStatus = async () => {
const statusResponse = await fetch(
`{BASE_URL}/api/pos/payments/${payment.payment_id}/status`,
{
headers: {
'X-API-Key': 'ostria_votre_cle_api'
}
}
);
const status = await statusResponse.json();
if (status.paid) {
console.log('Paiement confirmé !');
// Confirmer la transaction dans votre POS
confirmTransaction(payment.payment_id);
} else {
// Continuer le polling
setTimeout(pollStatus, 3000);
}
};
pollStatus();
Interface interactive pour tester l'API directement depuis votre navigateur
Une documentation Swagger dédiée est disponible pour les partenaires :
L'URL de la documentation Swagger interactive vous sera communiquée lors de l'obtention de votre clé API.
Caractéristiques :