API v1.0 Module en option

API Almawarid

Branchez votre site, votre boutique en ligne ou votre logiciel métier sur Almawarid : catalogue et stock en temps réel, factures, clients, et des webhooks qui vous préviennent au lieu de vous faire interroger.

Démarrer en 3 étapes

1
Activer le module
L'API est un module en option, activé à la demande sur n'importe quel plan.
2
Récupérer votre jeton
Il s'affiche ci-dessous une fois connecté. Il vaut votre compte : ne le publiez jamais.
3
Appeler en HTTPS
Une seule en-tête suffit : Authorization: Token …

Authentification

Authorization: Token votre_jeton_ici
Adresse de base : https://almawarid.app/api/
Connectez-vous pour voir votre jeton.

Limites, format et mode

20
appels / minute
500
appels / jour
JSON
requête et réponse
HTTPS
obligatoire
Le plafond est compté par jeton, lectures et écritures confondues. Au-delà, l'API répond 429 : espacez vos appels, ne les relancez pas en boucle.
👁 Lecture seule, par défaut
Une clé fraîchement ouverte lit vos données ; elle ne peut ni créer ni modifier. Demandez le mode lecture / écriture pour poser un mouvement de stock, créer une facture, un client ou un adhérent. Une écriture refusée répond 403 avec "mode": "lecture_seule".

Exemples

# Lire le catalogue avec les quantités en stock
curl -s https://almawarid.app/api/stock/products/?active=1 \
     -H "Authorization: Token VOTRE_JETON"

# Poser une entrée de stock (mode lecture/écriture requis)
curl -s -X POST https://almawarid.app/api/stock/move/ \
     -H "Authorization: Token VOTRE_JETON" \
     -H "Content-Type: application/json" \
     -d '{"product_id": 12, "delta": 10, "reason": "Réception fournisseur"}'

Ce que répond l'API

CodeSensQue faire
200 / 201SuccèsLa réponse est du JSON.
401Jeton absent ou invalideVérifiez l'en-tête Authorization.
402Module API non activéDemandez l'activation du module.
403Droit insuffisant, ou clé en lecture seuleLe corps précise mode=lecture_seule le cas échéant.
429Plafond dépasséAttendez : 20 appels par minute maximum.
Module optionnel, facturé à part

L'accès programmatique n'est inclus dans aucun abonnement : il s'active à la demande sur n'importe quel plan, sans réinstallation.

L'usage normal du logiciel — application mobile, poste de bureau, pointeuses biométriques — ne nécessite pas ce module.

Documentation Activer le module API

Points d'entrée

GET /api/stock/products/

Produits du catalogue avec niveau de stock en temps réel — la brique d'une intégration e-commerce.

Paramètres : q (recherche nom) · active=1 (actifs seulement)
[{"id":12,"name":"Café 250g","sku":"CAF-250","sell_price":450.0,"tax_rate":19.0,"quantity":38.0}]
POST /api/stock/move/ ✏️ mode écriture requis

Mouvement de stock : delta positif = entrée, négatif = sortie. Une sortie qui rendrait le stock négatif est refusée (mêmes règles que la caisse).

Paramètres : product_id · delta · reason
{"movement_id":901,"quantity":33.0}
POST /api/webhooks/ ✏️ mode écriture requis

Déclare une URL HTTPS à notifier (POST signé HMAC-SHA256, en-tête X-Almawarid-Signature). Événements : invoice.paid, invoice.status, client.created. Le secret n'est affiché qu'une fois.

Paramètres : url (https, hôte public) · events (liste séparée par virgules, vide = tous)
{"id":3,"url":"https://boutique.dz/hooks/almawarid","secret":"…affiché une seule fois…"}
GET /api/webhooks/

Liste des webhooks avec leur santé (dernier statut, échecs). Un webhook qui échoue 20 fois d'affilée se désactive seul. DELETE /api/webhooks/<id>/ pour supprimer.

[{"id":3,"url":"https://boutique.dz/hooks/almawarid","is_active":true,"last_status":"http 200","failure_count":0}]
GET /api/enterprise/

Informations de l'entreprise, nombre d'employés, modules actifs.

{"company":"Acme SARL","employees":12,"modules":{"erp":true,"payroll":false},"api_version":"1.0"}
GET /api/enterprise/employees/

Liste tous les employés actifs avec leur rôle, poste et date d'embauche.

{"count":12,"employees":[{"id":1,"email":"ahmed@acme.dz","role":"employee","nom":"Benali","prenom":"Ahmed","poste":"Comptable","date_embauche":"2023-01-15","type_contrat":"CDI"}]}
GET /api/enterprise/timesheets/

Pointages de toutes les équipes sur une plage de dates (max 31 jours).

Paramètres : from=YYYY-MM-DD&to=YYYY-MM-DD
{"count":45,"from":"2025-01-01","to":"2025-01-31","entries":[{"id":101,"user_email":"ahmed@acme.dz","task":"Rapport Q1","start":"2025-01-02T08:30:00+01:00","end":"2025-01-02T17:00:00+01:00","duration_seconds":30600,"is_manual":false}]}
GET /api/enterprise/leaves/

Demandes de congés avec filtrage par statut.

Paramètres : status=pending|approved|rejected
{"count":3,"leaves":[{"id":5,"employee":"sara@acme.dz","start_date":"2025-02-10","end_date":"2025-02-14","status":"approved","reason":"Congé annuel"}]}
Connectez-vous pour voir vos exemples

Votre jeton et des exemples prêts à copier apparaissent une fois connecté.