Une API REST orientée lecture pour extraire vos données Wiri dans des systèmes tiers, tableaux de bord et intégrations. Disponible sur les plans Enterprise.
Chaque requête doit inclure votre clé API dans l'en-tête Authorization en tant que jeton Bearer :
# Exemple avec curl curl https://app.wiri.food/api/v1/items \ -H "Authorization: Bearer wk_votre_cle_api"
Si la clé est manquante ou invalide, l'API retourne 401 Unauthorized :
{
"error": "Invalid API key."
}
Tous les points de terminaison sont servis depuis la plateforme cloud Wiri :
https://app.wiri.food/api/v1/
| Méthode | Point de terminaison | Description |
|---|---|---|
| GET | /api/v1/items |
Lister tous les articles du menu |
| GET | /api/v1/contacts |
Lister tous les clients / contacts |
| GET | /api/v1/invoices |
Lister les factures — supporte ?status, ?from, ?to |
| GET | /api/v1/sales |
Lister les ventes caisse — supporte ?status, ?from, ?to |
| GET | /api/v1/orders |
Lister les commandes du marketplace — supporte ?status, ?from, ?to |
| POST | /api/v1/orders |
Créer une commande marketplace prépayée |
| GET | /api/v1/reservations |
Lister les réservations à venir — supporte ?days, ?date |
| POST | /api/v1/reservations |
Créer une réservation de table depuis le marketplace |
Toutes les réponses réussies retournent 200 OK avec un corps JSON contenant deux champs :
{
"data": [ /* tableau d'objets */ ],
"count": 42
}
Retourne tous les articles du menu de votre compte, classés alphabétiquement. Chaque article inclut un tableau modifier_groups — les mêmes groupes/options de modificateurs configurés dans Paramètres → Modificateurs pour cet article, afin que vous puissiez présenter et facturer les suppléments exactement comme configurés dans Wiri.
# Requête curl https://app.wiri.food/api/v1/items \ -H "Authorization: Bearer wk_..." # Réponse { "data": [ { "id": 1, "name": "Jollof Rice", "rate": "45.00", "unit": "plate", "description": null, "category": 3, "modifier_groups": [ { "id": 2, "name": "Spice Level", "min_selections": 1, "max_selections": 1, "is_required": true, "options": [ { "id": 5, "name": "Mild", "price": 0 }, { "id": 6, "name": "Hot", "price": 0 } ] } ] } ], "count": 1 }
Retourne tous les contacts (clients) de votre compte, classés par nom.
# Réponse { "data": [ { "id": 12, "display_name": "Ama Owusu", "email": "ama@example.com", "mobile": "+233201234567", "address": null, "type": "individual", "created_at": "2026-01-15 09:22:00" } ], "count": 1 }
Retourne les factures classées par date décroissante. Supporte les paramètres de requête suivants :
| Paramètre | Type | Exemple | Description |
|---|---|---|---|
status | string | Paid | Paid, Unpaid ou Overdue |
from | date | 2026-01-01 | Début de la plage de dates (inclus) |
to | date | 2026-01-31 | Fin de la plage de dates (inclus) |
# Récupérer toutes les factures payées de janvier 2026 curl "https://app.wiri.food/api/v1/invoices?status=Paid&from=2026-01-01&to=2026-01-31" \ -H "Authorization: Bearer wk_..." # Réponse { "data": [ { "id": 88, "invoice_number": "INV-00088", "date": "2026-01-20", "due_date": "2026-02-03", "amount": "250.00", "tax": "37.50", "total": "287.50", "status": "Paid", "customer": "Ama Owusu" } ], "count": 1 }
Retourne les ventes caisse classées par date décroissante. Supporte les mêmes paramètres que les factures, status acceptant paid ou voided.
# Récupérer toutes les ventes d'une journée curl "https://app.wiri.food/api/v1/sales?from=2026-07-01&to=2026-07-01" \ -H "Authorization: Bearer wk_..." # Réponse { "data": [ { "id": 201, "receipt_number": "RCP-00201", "date": "2026-07-01 13:45:00", "amount_due": "120.00", "payment_mode": "0", "covers": 3, "status": "paid", "voided_at": null, "voided_reason": null, "customer": null } ], "count": 1 }
Retourne les commandes du marketplace (source = online) classées par date décroissante, jusqu'à 200 résultats. Supporte les mêmes paramètres ?status, ?from et ?to que /api/v1/sales.
# Récupérer les commandes marketplace d'aujourd'hui curl "https://app.wiri.food/api/v1/orders?from=2026-07-01&to=2026-07-01" \ -H "Authorization: Bearer wk_..." # Réponse { "data": [ { "id": 142, "receipt_number": "MKT-000142", "marketplace_ref": "MKT-20260701-001", "date": "2026-07-01 12:30:00", "status": "open", "payment_status": "paid", "amount_due": "85.00", "tip": "5.00", "customer_name": "Jane Doe", "customer_phone": "+233241234567", "branch": "Main Branch" } ], "count": 1 }
Crée une commande marketplace prépayée sous forme de vente caisse avec source=online et payment_status=paid. Retourne 201 Created en cas de succès.
| Champ | Type | Requis | Description |
|---|---|---|---|
branch_id | integer | Oui | ID de la filiale qui reçoit la commande |
items | array | Oui | Lignes de commande — au moins une requise (voir ci-dessous) |
customer_name | string | Non | Nom affiché du client |
customer_phone | string | Non | Numéro de téléphone du client |
delivery_address | string | Non | Adresse de livraison (stockée dans les notes de la vente) |
payment_method | string | Non | Libellé du mode de paiement, ex. card, mobile_money (stocké dans les notes) |
marketplace_ref | string | Non | Votre référence de commande — recommandé pour le rapprochement |
tip | number | Non | Montant du pourboire, par défaut 0 |
table_id | integer | Non | Table à associer à la commande |
covers | integer | Non | Nombre de couverts / convives, par défaut 0 |
| Champ | Type | Requis | Description |
|---|---|---|---|
item_id | integer | Non | ID de l'article au catalogue — omettre ou mettre null pour un article non répertorié / personnalisé |
name | string | Oui | Nom de l'article tel qu'il doit apparaître sur le reçu |
qty | number | Oui | Quantité, doit être supérieure à 0 |
price | number | Oui | Prix unitaire, doit être ≥ 0. Doit déjà inclure l'ajustement de prix des modificateurs sélectionnés — c'est ce qui est facturé ; modifiers ci-dessous n'est qu'un aperçu d'affichage/de reporting |
note | string | Non | Note pour la cuisine, ex. Extra spicy |
modifiers | array | Non | Aperçu des modificateurs sélectionnés pour le bon de cuisine / le reporting, ex. [{"name": "Large", "price_adjustment": 5.00}] — informatif uniquement, n'affecte pas le price facturé |
# Créer une commande marketplace curl -X POST https://app.wiri.food/api/v1/orders \ -H "Authorization: Bearer wk_..." \ -H "Content-Type: application/json" \ -d '{ "branch_id": 1, "items": [ { "item_id": 5, "name": "Jollof Rice", "qty": 2, "price": 40.00, "note": "Extra spicy", "modifiers": [{ "name": "Spicy", "price_adjustment": 5.00 }] }, { "name": "Bottled Water", "qty": 2, "price": 5.00 } ], "customer_name": "Jane Doe", "customer_phone": "+233241234567", "delivery_address": "15 Independence Ave", "payment_method": "card", "marketplace_ref": "MKT-20260701-001", "tip": 5.00 }' # Réponse 201 { "id": 142, "receipt_number": "MKT-000142", "total": 95.00, "status": "open" }
item_id est omis ou null, l'article est enregistré comme une ligne personnalisée sur la vente. Utile pour les suppléments, les spéciaux ou les articles pas encore dans votre catalogue.
Retourne les réservations à venir avec le statut pending ou confirmed. Utilisez ?days=N (par défaut 7, max 90) pour regarder N jours à l'avance, ou ?date=YYYY-MM-DD pour une seule date.
# Récupérer les réservations des 14 prochains jours curl "https://app.wiri.food/api/v1/reservations?days=14" \ -H "Authorization: Bearer wk_..." # Réponse { "data": [ { "id": 23, "party_name": "Smith party", "party_size": 4, "reserved_date": "2026-07-15", "reserved_time": "19:30:00", "duration_mins": 90, "status": "pending", "source": "marketplace", "marketplace_ref": "MKT-RES-20260715-1", "notes": "Anniversary dinner", "table_name": "Table 4", "branch": "Main Branch" } ], "count": 1 }
Crée une réservation de table depuis le marketplace. Retourne 201 Created en cas de succès.
| Champ | Type | Requis | Description |
|---|---|---|---|
party_name | string | Oui | Nom du groupe / contact de la réservation |
party_size | integer | Oui | Nombre de convives (doit être ≥ 1) |
date | string | Oui | Date de réservation au format YYYY-MM-DD |
time | string | Oui | Heure de réservation au format HH:MM (24 heures) |
branch_id | integer | Non | Filiale à laquelle affecter la réservation |
table_id | integer | Non | Table spécifique à réserver |
duration_mins | integer | Non | Durée prévue en minutes, par défaut 90 |
notes | string | Non | Demandes spéciales ou notes |
marketplace_ref | string | Non | Votre référence de réservation — recommandé pour les mises à jour de statut |
# Créer une réservation curl -X POST https://app.wiri.food/api/v1/reservations \ -H "Authorization: Bearer wk_..." \ -H "Content-Type: application/json" \ -d '{ "party_name": "Smith party", "party_size": 4, "date": "2026-07-15", "time": "19:30", "branch_id": 1, "table_id": 3, "duration_mins": 90, "notes": "Anniversary dinner", "marketplace_ref": "MKT-RES-20260715-1" }' # Réponse 201 { "id": 23, "status": "pending" }
| Statut HTTP | Corps | Quand |
|---|---|---|
401 | {"error": "Invalid API key."} | Clé manquante, incorrecte ou révoquée |
401 | {"error": "Missing or malformed Authorization header."} | En-tête absent ou pas au format Bearer |
400 | {"error": "Invalid JSON body."} | Corps POST manquant ou JSON invalide |
404 | {"error": "Unknown endpoint."} | Nom de ressource non dans la liste autorisée |
405 | {"error": "Method not allowed."} | Mauvaise méthode HTTP pour un point de terminaison POST uniquement |
422 | {"error": "..."} ou {"errors": ["..."]} | Le corps de la requête a échoué la validation — ex. champ requis manquant, filiale/table introuvable |
500 | {"error": "Failed to create ... Please try again."} | Erreur serveur inattendue lors de l'enregistrement de la requête |
wk_.Voir aussi : Paramètres · WiriMarket Connect (intégration POS tierce)