← Retour au site

Documentation de l'API SAWALI

Tous les endpoints GET / POST / PUT / DELETE disponibles, regroupés par section.

Base URL : https://sawalismartsystems.com/api. Authentification via token JWT (header Authorization: Bearer <token>) pour les routes /me/* et /admin/*.

Autres

POST
/api/cashier/products/generate-icon
GET
/api/docs
GET
/api/openapi.json
GET
/api/redoc

AMM

GET
/api/amm
POST
/api/amm
GET
/api/amm/by-product/{vidal_product_id}
POST
/api/amm/import-csv

Import en masse depuis un CSV.

PUT
/api/amm/{amm_id}
DELETE
/api/amm/{amm_id}

Admin

GET
/api/admin/access-logs
GET
/api/admin/access-logs/export.csv
GET
/api/admin/api-traces
DELETE
/api/admin/api-traces
GET
/api/admin/api-traces/export.csv
GET
/api/admin/appointments
PUT
/api/admin/appointments/{appt_id}
DELETE
/api/admin/appointments/{appt_id}
GET
/api/admin/automations
POST
/api/admin/automations
GET
/api/admin/automations/events
PUT
/api/admin/automations/{aid}
DELETE
/api/admin/automations/{aid}
GET
/api/admin/blacklisted-ips
POST
/api/admin/blacklisted-ips
DELETE
/api/admin/blacklisted-ips/{ip_id}
GET
/api/admin/blog
POST
/api/admin/blog
GET
/api/admin/blog/{post_id}
PUT
/api/admin/blog/{post_id}
DELETE
/api/admin/blog/{post_id}
GET
/api/admin/campaign-efficiency
GET
/api/admin/case-studies
POST
/api/admin/case-studies
PUT
/api/admin/case-studies/{cs_id}
DELETE
/api/admin/case-studies/{cs_id}
GET
/api/admin/client-categories
POST
/api/admin/client-categories
PUT
/api/admin/client-categories/{cat_id}
DELETE
/api/admin/client-categories/{cat_id}
GET
/api/admin/client-data-diagnostic
GET
/api/admin/clients

List all users that should be visible in the Admin → Clients module.

POST
/api/admin/clients
GET
/api/admin/clients-consistency

Vue panoramique de chaque entreprise multi-utilisateur et indique si tous ses membres

POST
/api/admin/clients-consistency/realign-all

Iter38r-fix9h — Réaligne d'un seul clic tous les utilisateurs détectés

GET
/api/admin/clients/{client_id}
PUT
/api/admin/clients/{client_id}
DELETE
/api/admin/clients/{client_id}
GET
/api/admin/clients/{client_id}/features
PUT
/api/admin/clients/{client_id}/features
GET
/api/admin/clients/{client_id}/notes
POST
/api/admin/clients/{client_id}/notes
DELETE
/api/admin/clients/{client_id}/notes/{nid}
POST
/api/admin/clients/{client_id}/set-primary

Designate ONE client as the primary site owner.

GET
/api/admin/clients/{client_id}/tasks
POST
/api/admin/clients/{client_id}/tasks
PUT
/api/admin/clients/{client_id}/tasks/{tid}
DELETE
/api/admin/clients/{client_id}/tasks/{tid}
GET
/api/admin/clients/{client_id}/timeline

Unified CRM timeline for a client — aggregates events from 7 collections.

POST
/api/admin/clients/{client_id}/unset-primary
PUT
/api/admin/clients/{client_id}/whatsapp-cost

Met à jour le coût WhatsApp unitaire (par message sortant) pour un client.

GET
/api/admin/clients/{client_id}/whatsapp-stats

WhatsApp consumption summary for a client: messages sent OK/KO,

GET
/api/admin/contacts
POST
/api/admin/contacts/revert-retag

Restore `client_id ← client_id_legacy` on every row where the legacy

POST
/api/admin/contacts/{contact_id}/save-as-tracked-user
PUT
/api/admin/content/{slug}
DELETE
/api/admin/content/{slug}
POST
/api/admin/content/{slug}/translate
GET
/api/admin/db
GET
/api/admin/db/{collection}

Generic JSON query over any whitelisted collection.

GET
/api/admin/demo/expiry-events

Demo accounts that have expired — admin reviews and decides:

POST
/api/admin/demo/expiry-events/{ev_id}/resolve
GET
/api/admin/deployments
POST
/api/admin/deployments
PUT
/api/admin/deployments/{dep_id}
DELETE
/api/admin/deployments/{dep_id}
GET
/api/admin/document-categories
POST
/api/admin/document-categories
PUT
/api/admin/document-categories/{cat_id}
DELETE
/api/admin/document-categories/{cat_id}
GET
/api/admin/document-logs

Renvoie l'historique combiné upload + download. Admin uniquement.

GET
/api/admin/documents
POST
/api/admin/documents
PUT
/api/admin/documents/{doc_id}
DELETE
/api/admin/documents/{doc_id}
POST
/api/admin/files/backfill

For every file row that has its binary on disk but no `storage_path`,

GET
/api/admin/files/orphans

List file rows that are unrecoverable (disk gone + no remote copy).

GET
/api/admin/formations
POST
/api/admin/formations
PUT
/api/admin/formations/{fid}
DELETE
/api/admin/formations/{fid}
GET
/api/admin/formations/{fid}/enrollments
POST
/api/admin/formations/{fid}/enrollments/{user_id}/credits
POST
/api/admin/formations/{fid}/enrollments/{user_id}/state
GET
/api/admin/formations/{fid}/modules
POST
/api/admin/formations/{fid}/modules
PUT
/api/admin/formations/{fid}/modules/{mid}
DELETE
/api/admin/formations/{fid}/modules/{mid}
GET
/api/admin/google/auth-url
GET
/api/admin/google/callback
POST
/api/admin/google/disconnect
GET
/api/admin/health-stats
POST
/api/admin/health/auth-check
GET
/api/admin/health/auth-check/history
GET
/api/admin/health/auth-check/latest
POST
/api/admin/health/run-weekly-now
POST
/api/admin/health/test-email
POST
/api/admin/health/uptime/run-now
GET
/api/admin/health/uptime/stats
GET
/api/admin/incident-subscribers
DELETE
/api/admin/incident-subscribers/{sub_id}
GET
/api/admin/incidents
GET
/api/admin/incidents/export.csv
DELETE
/api/admin/incidents/{incident_id}
GET
/api/admin/interventions
POST
/api/admin/interventions
PUT
/api/admin/interventions/{int_id}
DELETE
/api/admin/interventions/{int_id}
POST
/api/admin/interventions/{int_id}/unlock-invoice

Iter43-fix4 — Force unlock d'une intervention facturée (admin OU superviseur).

PUT
/api/admin/invoices/from-interventions/{inv_id}

Iter43-fix6 — Renseigne la date/heure de dépôt OU de paiement d'une

POST
/api/admin/liluvine-escalation/test
POST
/api/admin/liluvine/remote-link

Génère un lien signé longue durée pour contrôler le seuil et le niveau Liluvine

GET
/api/admin/llm-health

Admin/Superviseur can read the state. The frontend banner uses an

POST
/api/admin/llm-health/ping

Force a fresh health probe (admin button).

POST
/api/admin/llm-health/reset-stale

Iter43-fix (2026-03) — Efface manuellement les `current_cost` /

POST
/api/admin/llm-health/test-summary

S033 — Manual budget test: forces a health probe AND returns the

GET
/api/admin/llm-health/usage-chart

S-iter39n — Daily consumption chart for the Universal Key.

GET
/api/admin/messaging/audience

Return all contactable recipients (clients with phone/whatsapp + tracked users with phone).

POST
/api/admin/messaging/bulk-send

Envoie le même modèle WhatsApp à une liste de destinataires. Renvoie un résultat par destinataire.

GET
/api/admin/messaging/history
GET
/api/admin/messaging/schedules
POST
/api/admin/messaging/schedules
DELETE
/api/admin/messaging/schedules/{sid}
GET
/api/admin/messaging/variable-tokens

Liste des tokens de substitution que l'admin peut insérer dans les variables de modèle.

GET
/api/admin/meta/config
PUT
/api/admin/meta/config
GET
/api/admin/meta/tracked-roles
GET
/api/admin/migrate-orphan-data

Inspecte ce que la migration iter28 des données orphelines FERAIT (sans écritures).

POST
/api/admin/migrate-orphan-data

Applique la migration iter28 des données orphelines. Idempotent — relancer ne

GET
/api/admin/newsletter
GET
/api/admin/newsletter/export

Export CSV de tous les abonnés (séparateur virgule).

DELETE
/api/admin/newsletter/{sub_id}
GET
/api/admin/note-service/history

Aggregate the last N Note de Service broadcasts, grouped by source note.

POST
/api/admin/note-service/{note_id}/retry-failed

Resend a Note de Service ONLY to recipients whose previous attempt

GET
/api/admin/pawapay/callback-urls

Iter38r-fix2 — Renvoie les 2 URLs de callback à coller dans le dashboard PawaPay

GET
/api/admin/policies

Renvoie les 3 slots de politique fixes avec leurs métadonnées + URL de partage public.

DELETE
/api/admin/policies/{slot}
POST
/api/admin/policies/{slot}/upload
GET
/api/admin/profile-requests

Iter34l — Liste les demandes de mise à jour de profil soumises par les utilisateurs.

PATCH
/api/admin/profile-requests/{req_id}

Iter34l — Marque une demande de mise à jour de profil comme traitée (ou en attente)

POST
/api/admin/realign-user-to-client

Applique le realign_plan renvoyé par /admin/client-data-diagnostic.

GET
/api/admin/resolve-company

Résout le client canonique pour un nom d'entreprise donné.

GET
/api/admin/rgpd-preview/{client_id}

Prévisualise ce qu'un utilisateur non-privilégié de `client_id` verrait dans son

GET
/api/admin/roadmap-actions

Liste toutes les actions de la roadmap triées par code croissant. Initialisée au 1er appel.

POST
/api/admin/roadmap-actions

Admin-driven creation of a pending action. Auto-numbered. Default

PATCH
/api/admin/roadmap-actions/{code}

Admins can edit `observations`, `done`/`status`, and (for their own

DELETE
/api/admin/roadmap-actions/{code}

Only admin-created (non-seed) entries can be deleted to keep the

GET
/api/admin/secrets/audit

Audit trail of every vault export/import action.

GET
/api/admin/secrets/change-audit

Audit trail of vault-tracked key changes (no values, only fingerprints).

POST
/api/admin/secrets/export

Export an AES-256-GCM encrypted bundle of every vaultable setting.

POST
/api/admin/secrets/import

Restore a previously-exported vault.

GET
/api/admin/secrets/keys

Liste les clés de paramètres sauvegardées par le coffre, et lesquelles sont

PUT
/api/admin/settings
GET
/api/admin/settings
POST
/api/admin/settings/test-url
GET
/api/admin/sms/dashboard
POST
/api/admin/sms/test

Send a test SMS using a chosen provider — surfaces the full HTTP response

GET
/api/admin/snapshots

Liste tous les instantanés triés par created_at décroissant.

POST
/api/admin/snapshots

Crée un nouvel instantané de toutes les collections métier.

POST
/api/admin/snapshots/auto-run

Trigger the weekly auto-snapshot logic immediately (manual).

POST
/api/admin/snapshots/import

Importe un fichier instantané. mode = 'replace' | 'merge'. dry_run='true' pour

GET
/api/admin/snapshots/imports
GET
/api/admin/snapshots/weekly-report-preview

Render the weekly health-report PDF on-demand. Useful for the admin

PATCH
/api/admin/snapshots/{snap_id}
DELETE
/api/admin/snapshots/{snap_id}
GET
/api/admin/snapshots/{snap_id}/download
GET
/api/admin/subscriptions/categories
POST
/api/admin/subscriptions/categories
PUT
/api/admin/subscriptions/categories/{cat_id}
DELETE
/api/admin/subscriptions/categories/{cat_id}
GET
/api/admin/subscriptions/orders
GET
/api/admin/subscriptions/plans
POST
/api/admin/subscriptions/plans
PUT
/api/admin/subscriptions/plans/{plan_id}
DELETE
/api/admin/subscriptions/plans/{plan_id}
GET
/api/admin/suggestions-registry
POST
/api/admin/support-load
GET
/api/admin/testimonials
POST
/api/admin/testimonials

Création manuelle d'un témoignage par l'admin.

POST
/api/admin/testimonials/request/{appt_id}

Génère/regénère un feedback_token pour un RDV (le admin peut ensuite copier le lien et l'envoyer).

PUT
/api/admin/testimonials/{tid}

Modère ou modifie un témoignage. Champs supportés : status, comment, client_name,

DELETE
/api/admin/testimonials/{tid}
GET
/api/admin/tracked-users
POST
/api/admin/tracked-users
POST
/api/admin/tracked-users/bulk-transfer
PUT
/api/admin/tracked-users/{tu_id}
DELETE
/api/admin/tracked-users/{tu_id}
POST
/api/admin/tracked-users/{tu_id}/revoke-password
POST
/api/admin/tracked-users/{tu_id}/set-password

Provisionne (ou réinitialise) un identifiant pour un utilisateur suivi.

POST
/api/admin/upload
GET
/api/admin/usage/sms-providers
GET
/api/admin/usage/summary

Aggregate usage metrics per client over the last N days.

GET
/api/admin/user-activity

Renvoie :

GET
/api/admin/user-activity/heatmap

Renvoie une grille 7×24 des compteurs de hits (lignes = jours de semaine 0..6 Lun→Dim,

GET
/api/admin/visits
POST
/api/admin/visits/reset

Resets the publicly displayed visits counter to zero (real visits

GET
/api/admin/visits/stats
GET
/api/admin/whatsapp/silence-alerts

Liste les alertes de silence passées (piste d'audit).

POST
/api/admin/whatsapp/silence-check

Manually run the WhatsApp silence detector (also runs every 4h via cron).

GET
/api/admin/whatsapp/template-notes
PUT
/api/admin/whatsapp/template-notes/{name}
DELETE
/api/admin/whatsapp/template-notes/{name}
GET
/api/admin/whatsapp/templates

Liste tous les modèles du WABA configuré + fusionne les notes admin (description + disponibilité).

POST
/api/admin/whatsapp/templates

Submit a new template to Meta for approval.

DELETE
/api/admin/whatsapp/templates/{name}

Supprime un modèle par nom (supprime TOUTES les langues de ce nom sur le WABA).

POST
/api/admin/whatsapp/test-config

Validate Meta credentials by probing Graph API for WABA + phone number.

GET
/api/admin/whatsapp/token-health

Iter43-fix3 (2026-03) — Diagnostic du token WhatsApp Cloud API.

GET
/api/admin/whatsapp/webhook-logs

Iter35a — Read the last `limit` raw webhook payloads received from

DELETE
/api/admin/whatsapp/webhook-logs

Purge all stored webhook payloads.

POST
/api/admin/whatsapp/webhook-subscribe

Iter43-fix16 — Re-souscrire l'app Meta au WABA pour rétablir le

GET
/api/admin/whatsapp/webhook-subscription

Iter43-fix16 (2026-06) — Diagnostic de la souscription du webhook Meta.

POST
/api/integrations/build-link
GET
/api/integrations/link-actions

Liste les actions deep-link supportées pour le dropdown admin UI.

Admin — Abonnements IA

GET
/api/admin/ai-subscriptions
POST
/api/admin/ai-subscriptions
PUT
/api/admin/ai-subscriptions/{sub_id}
DELETE
/api/admin/ai-subscriptions/{sub_id}
POST
/api/admin/ai-subscriptions/{sub_id}/send-reminder

Admin — Ad Banners

GET
/api/admin/ad-banners
POST
/api/admin/ad-banners
POST
/api/admin/ad-banners/fix-urls
POST
/api/admin/ad-banners/run-reminder-cron
PUT
/api/admin/ad-banners/{banner_id}
DELETE
/api/admin/ad-banners/{banner_id}
POST
/api/admin/ad-banners/{banner_id}/rotate-token

Regenerate the share_token (invalidates previously shared URLs).

GET
/api/admin/ad-banners/{banner_id}/stats
POST
/api/admin/ad-banners/{banner_id}/toggle-paid
GET
/api/admin/ad-renewal-requests
POST
/api/admin/ad-renewal-requests/{req_id}/mark-handled

Admin — Bonus

GET
/api/admin/wa-demo/recent
POST
/api/admin/wa-demo/{user_id}/mark-seen

Admin — Bonus pack

POST
/api/admin/gdpr/anonymize-now
POST
/api/admin/liluvine-weekly-digest/run-now
POST
/api/admin/wa-tasks-digest/run-now

Admin — Coupons

POST
/api/admin/coupons
GET
/api/admin/coupons
PUT
/api/admin/coupons/{coupon_id}
DELETE
/api/admin/coupons/{coupon_id}

Admin — Docs

POST
/api/admin/docs/regenerate/{slug}

Admin — IA Quotas

GET
/api/admin/ai-costs/monthly
GET
/api/admin/clients/{client_id}/ai-quota
PUT
/api/admin/clients/{client_id}/ai-quota
GET
/api/admin/clients/{client_id}/ai-usage
GET
/api/admin/clients/{client_id}/ai-usage/export.csv
GET
/api/admin/clients/{client_id}/ai-usage/export.pdf

Admin — Incidents Webhook

GET
/api/admin/incidents-webhook
DELETE
/api/admin/incidents-webhook/password
POST
/api/admin/incidents-webhook/regenerate-password

Admin — Liluvine PRO

POST
/api/admin/contacts/repair-user-contact
GET
/api/admin/liluvine-pro/branding
PUT
/api/admin/liluvine-pro/branding
GET
/api/admin/liluvine-pro/bypass-emails
PATCH
/api/admin/liluvine-pro/bypass-emails
GET
/api/admin/liluvine-pro/coverage-gaps

Renvoie les messages image utilisateur dont le meilleur match Qdrant est sous

GET
/api/admin/liluvine-pro/diagnose
POST
/api/admin/liluvine-pro/generate-doc-draft
GET
/api/admin/liluvine-pro/inbound-urls
GET
/api/admin/liluvine-pro/kb
POST
/api/admin/liluvine-pro/kb
GET
/api/admin/liluvine-pro/kb/ocr-usage

Iter38r-fix9k — Monthly OCR usage report (pages + XOF cost).

POST
/api/admin/liluvine-pro/kb/upload

Iter38r-fix9i — `force_ocr` (form, optional) :

PUT
/api/admin/liluvine-pro/kb/{eid}
DELETE
/api/admin/liluvine-pro/kb/{eid}
GET
/api/admin/liluvine-pro/module-acl
PUT
/api/admin/liluvine-pro/module-acl
GET
/api/admin/liluvine-pro/screenshots-history

Liste les captures d'écran envoyées par les clients à Liluvine PRO via

GET
/api/admin/liluvine-pro/sessions-history
POST
/api/admin/liluvine-pro/sessions/{sid}/release
POST
/api/admin/liluvine-pro/sessions/{sid}/takeover
PUT
/api/admin/liluvine-pro/system-prompt
GET
/api/admin/liluvine-pro/system-prompt
GET
/api/admin/liluvine-pro/top-screens

Aggregate the most-matched SAWALI screens across all client

GET
/api/admin/liluvine-pro/wa-autoreply
PUT
/api/admin/liluvine-pro/wa-autoreply
GET
/api/admin/liluvine-pro/wa-autoreply/history

Admin — Media Library

GET
/api/admin/media-library
POST
/api/admin/media-library
PATCH
/api/admin/media-library/{mid}
DELETE
/api/admin/media-library/{mid}

Admin — Officines OTP

POST
/api/admin/officine-otp/test

Admin — Officines Registry

GET
/api/admin/officine-activities
PUT
/api/admin/officine-activities
GET
/api/admin/officines-registry
POST
/api/admin/officines-registry/import-csv

Import en masse des officines depuis un fichier CSV.

POST
/api/admin/officines-registry/import-to-contacts

Importe une sélection d'officines dans le répertoire de contacts du

GET
/api/admin/officines-registry/{officine_id}
PUT
/api/admin/officines-registry/{officine_id}

Mise à jour d'une fiche officine. Champs autorisés : name (=code),

POST
/api/admin/officines-registry/{officine_id}/approve
POST
/api/admin/officines-registry/{officine_id}/link-client
GET
/api/admin/officines-registry/{officine_id}/products
DELETE
/api/admin/officines-registry/{officine_id}/products
GET
/api/admin/officines-registry/{officine_id}/products/export.csv
POST
/api/admin/officines-registry/{officine_id}/products/import

Import en masse de produits pour une officine (CSV ou JSON).

POST
/api/admin/officines-registry/{officine_id}/reactivate
POST
/api/admin/officines-registry/{officine_id}/suspend
POST
/api/admin/officines-registry/{officine_id}/unlink-client
POST
/api/admin/officines-registry/{officine_id}/upload-logo

Upload du logo d'une officine. Stocke le fichier sous /uploads/officines/.

Admin — Qdrant RAG

GET
/api/admin/qdrant/collections
POST
/api/admin/qdrant/collections
DELETE
/api/admin/qdrant/collections/{name}
PATCH
/api/admin/qdrant/collections/{name}

Met à jour les métadonnées de la collection (enabled_for_liluvine, description).

GET
/api/admin/qdrant/collections/{name}/points
POST
/api/admin/qdrant/collections/{name}/points/image

S041 + P1 (2026-02) — Upload an image, save it in the media

POST
/api/admin/qdrant/collections/{name}/points/pdf
POST
/api/admin/qdrant/collections/{name}/points/text
POST
/api/admin/qdrant/collections/{name}/points/url
DELETE
/api/admin/qdrant/collections/{name}/points/{pid}
POST
/api/admin/qdrant/collections/{name}/search
POST
/api/admin/qdrant/migrate-mongo-kb

One-shot migration : pull all entries from `liluvine_kb_entries`

GET
/api/admin/qdrant/storage

S041 — Total estimated Qdrant disk usage vs cluster quota.

POST
/api/admin/qdrant/test-connection

Admin — Registre des erreurs

POST
/api/admin/error-registry/migrate-from-tickets

Admin — Story Studio

POST
/api/admin/story-studio/generate/text-to-image

Génère une image (Nano Banana via Universal Key) en format 9:16.

POST
/api/admin/story-studio/generate/text-to-video

Génère une vidéo à partir d'un prompt texte. Synchrone (jusqu'à 10 min).

GET
/api/admin/story-studio/library
PUT
/api/admin/story-studio/library/{asset_id}
DELETE
/api/admin/story-studio/library/{asset_id}
GET
/api/admin/story-studio/library/{asset_id}/media
POST
/api/admin/story-studio/library/{asset_id}/publish

Publie une vidéo générée vers les réseaux sociaux sélectionnés.

GET
/api/admin/story-studio/library/{asset_id}/signed-media

Endpoint PUBLIC (signé par JWT court terme) — utilisé par Meta pour

GET
/api/admin/story-studio/library/{asset_id}/whatsapp-share

Renvoie un deep link WhatsApp pour partager l'asset sur le mobile admin.

GET
/api/admin/story-studio/oauth/meta/callback

Endpoint PUBLIC appelé par Meta après authentification utilisateur.

GET
/api/admin/story-studio/oauth/meta/start

Génère l'URL d'autorisation Meta. Le front l'utilise pour rediriger.

GET
/api/admin/story-studio/oauth/tiktok/callback
GET
/api/admin/story-studio/oauth/tiktok/start
GET
/api/admin/story-studio/posts
GET
/api/admin/story-studio/posts/{post_id}/insights

Récupère likes/reach/impressions pour chaque cible d'un post publié.

POST
/api/admin/story-studio/posts/{post_id}/publish-now
POST
/api/admin/story-studio/scheduler/tick

Endpoint à appeler par un cron externe (ex: every 5min) qui passe les

GET
/api/admin/story-studio/settings

Récupère la config globale Story Studio. Masque les secrets.

PUT
/api/admin/story-studio/settings

Met à jour la config globale. Si une valeur secrète est `null` OU

GET
/api/admin/story-studio/social-accounts
POST
/api/admin/story-studio/social-accounts/manual

Iter43-fix10 — Saisie manuelle d'un token (mode dev). Phase 2

DELETE
/api/admin/story-studio/social-accounts/{account_id}
PUT
/api/admin/story-studio/social-accounts/{account_id}/pages/{page_id}

Active/désactive une Page (page reste connue mais ignorée des publications).

POST
/api/admin/story-studio/social-accounts/{account_id}/refresh

Re-fetch les Pages et IG accounts d'un compte Meta connecté.

Admin — Story Studio Billing

PUT
/api/admin/story-studio/billing/invoices/{invoice_id}/status

Marque une facture comme payée / annulée / en attente.

GET
/api/admin/story-studio/billing/summary

Vue agrégée : total crédits en circulation, factures du mois, top consommateurs.

GET
/api/admin/story-studio/billing/tenants

Liste tous les tenants ayant déjà une config billing OU au moins un social_account.

GET
/api/admin/story-studio/billing/tenants/{tenant_id}/config
PUT
/api/admin/story-studio/billing/tenants/{tenant_id}/config
POST
/api/admin/story-studio/billing/tenants/{tenant_id}/credits/topup

Ajoute des crédits manuellement (admin only). Pour un topup via

GET
/api/admin/story-studio/billing/tenants/{tenant_id}/invoices
GET
/api/admin/story-studio/billing/tenants/{tenant_id}/ledger

Admin — Stripe

GET
/api/admin/stripe/webhook-events

Admin — Synthèse

POST
/api/admin/synthese/test

Admin — VIDAL

POST
/api/admin/officines/test-connection

Iter41 Phase 4b — Diagnostic verbose pour l'API Officines.

GET
/api/admin/officines/usage

Renvoie l'usage de l'API officines : top recherches, consommation publique !aizenta.

DELETE
/api/admin/vidal/cache
GET
/api/admin/vidal/config
PUT
/api/admin/vidal/config
POST
/api/admin/vidal/test-connection

Pings VIDAL with a cheap call to validate credentials and base URL.

GET
/api/admin/vidal/usage

Renvoie l'usage VIDAL agrégé pour les `days` derniers jours.

Admin — Voice Notifications

GET
/api/admin/voice-notifications/catalog
GET
/api/admin/voice-notifications/config
PUT
/api/admin/voice-notifications/config
POST
/api/admin/voice-notifications/custom-events
DELETE
/api/admin/voice-notifications/custom-events/{event_key}
GET
/api/admin/voice-notifications/log
GET
/api/admin/voice-notifications/rules
PUT
/api/admin/voice-notifications/rules/{event_key}
POST
/api/admin/voice-notifications/test

Admin — WhatsApp OTP

POST
/api/admin/wa-otp/test

Admin — i18n

POST
/api/admin/i18n/translate-empty-bulk
GET
/api/admin/i18n/translate-models
POST
/api/admin/i18n/translate-suggest
GET
/api/admin/i18n/translations
POST
/api/admin/i18n/translations
GET
/api/admin/i18n/translations.csv
POST
/api/admin/i18n/translations/bulk
POST
/api/admin/i18n/translations/import-csv
DELETE
/api/admin/i18n/translations/{key}
GET
/api/admin/i18n/translator-score

Daily / monthly word counters + payable amount.

Auth — WhatsApp OTP

POST
/api/auth/wa-otp/request
POST
/api/auth/wa-otp/verify

Authentification

GET
/api/auth/captcha-config
POST
/api/auth/change-password
POST
/api/auth/login
GET
/api/auth/me
POST
/api/auth/resend-otp
POST
/api/auth/verify-otp

Caisse & Facturation

GET
/api/admin/business-clients
POST
/api/admin/business-clients
PATCH
/api/admin/business-clients/{cid}
DELETE
/api/admin/business-clients/{cid}
POST
/api/admin/cashier/backfill-tenants

Recompute tenant_id on all Caisse docs using the latest resolution logic.

POST
/api/admin/cashier/qr/rewrite-base-url
POST
/api/admin/legal-forms
DELETE
/api/admin/legal-forms/{lid}
POST
/api/admin/payment-methods
PATCH
/api/admin/payment-methods/{pid}
DELETE
/api/admin/payment-methods/{pid}
POST
/api/admin/product-categories
DELETE
/api/admin/product-categories/{cid}
GET
/api/admin/products
POST
/api/admin/products
PATCH
/api/admin/products/{pid}
DELETE
/api/admin/products/{pid}
GET
/api/admin/users/can-cash
PATCH
/api/admin/users/{uid}/can-cash
GET
/api/cashier/auto-relance/settings
PUT
/api/cashier/auto-relance/settings
GET
/api/cashier/exports/invoices.csv
GET
/api/cashier/exports/invoices.pdf
GET
/api/cashier/exports/receipts.csv
GET
/api/cashier/exports/receipts.pdf
POST
/api/cashier/import/business-clients
GET
/api/cashier/import/business-clients/fields
POST
/api/cashier/import/products
GET
/api/cashier/import/products/fields
POST
/api/cashier/invoices
GET
/api/cashier/invoices
GET
/api/cashier/invoices/{iid}
PATCH
/api/cashier/invoices/{iid}
DELETE
/api/cashier/invoices/{iid}
POST
/api/cashier/invoices/{iid}/duplicate
GET
/api/cashier/invoices/{iid}/pdf
GET
/api/cashier/invoices/{iid}/qr.png
POST
/api/cashier/invoices/{iid}/receipt

Explicit receipt generation for an ALREADY-paid invoice (reprint).

POST
/api/cashier/invoices/{iid}/restore
POST
/api/cashier/invoices/{iid}/send-whatsapp
GET
/api/cashier/kpis
GET
/api/cashier/legal-forms
GET
/api/cashier/overdue/count
POST
/api/cashier/overdue/relance
POST
/api/cashier/overdue/relance-auto-run

Iter36y — Trigger the auto-relance flow manually (admin/superviseur).

GET
/api/cashier/overdue/relance-history
GET
/api/cashier/product-categories
POST
/api/cashier/receipts
GET
/api/cashier/receipts
GET
/api/cashier/receipts/{rid}
DELETE
/api/cashier/receipts/{rid}
GET
/api/cashier/receipts/{rid}/pdf
GET
/api/cashier/receipts/{rid}/qr.png
POST
/api/cashier/receipts/{rid}/restore
POST
/api/cashier/receipts/{rid}/send-whatsapp
GET
/api/cashier/tenant-info
GET
/api/payment-methods
GET
/api/public/invoice-pdf/{token}
GET
/api/public/receipt-pdf/{token}
GET
/api/public/verify/{token}

Caisse — Dépenses

GET
/api/cashier/expenses
POST
/api/cashier/expenses
GET
/api/cashier/expenses/employees-list

Iter38m — Lightweight list of employees of the current tenant for the

GET
/api/cashier/expenses/me/dashboard-card

Sum of MY unjustified expenses + those late-unjustified.

GET
/api/cashier/expenses/monthly-summary
PATCH
/api/cashier/expenses/{eid}

Iter38o — Edit allowed if NOT justified (clôturée):

DELETE
/api/cashier/expenses/{eid}
POST
/api/cashier/expenses/{eid}/justify

Justifies an expense. Refused if past the deadline (unless admin uses force=true).

POST
/api/cashier/expenses/{eid}/unjustify

Admin only — revert justification (e.g. mistake).

Chat interne

GET
/api/me/chat/clients
GET
/api/me/chat/media/{msg_id}
POST
/api/me/chat/messages/{msg_id}/read
GET
/api/me/chat/search
POST
/api/me/chat/transcribe
GET
/api/me/chat/unread-count
GET
/api/me/chat/{client_id}/members
GET
/api/me/chat/{client_id}/messages
POST
/api/me/chat/{client_id}/messages
POST
/api/me/chat/{client_id}/messages/photo
GET
/api/me/chat/{client_id}/threads
POST
/api/me/chat/{client_id}/threads/{thread_key}/mark-all-read

Marque en masse tous les messages d'un thread comme lus pour l'utilisateur courant.

GET
/api/public/team-presence

Documentation

GET
/api/api-routes

Liste tous les endpoints disponibles (pour la page /api-docs).

Files

GET
/api/files/{file_path:path}

Iter38r-fix8 — Endpoint proxy servant les fichiers depuis Emergent Object Storage.

Formulaires

GET
/api/me/form-categories
POST
/api/me/form-categories
PUT
/api/me/form-categories/{cid}
DELETE
/api/me/form-categories/{cid}
POST
/api/me/form-categories/{cid}/set-default
GET
/api/me/forms

Liste les formulaires : tous ceux du client de l'utilisateur + tous les formulaires publics d'autres clients.

POST
/api/me/forms
GET
/api/me/forms-analytics

Analyses globales sur tous les formulaires visibles par l'utilisateur.

GET
/api/me/forms/title-suggestions
GET
/api/me/forms/{form_id}
PUT
/api/me/forms/{form_id}
DELETE
/api/me/forms/{form_id}
GET
/api/me/forms/{form_id}/analytics
GET
/api/me/forms/{form_id}/analytics/export.csv

CSV export of all submissions for a form (flat answers + metadata).

POST
/api/me/forms/{form_id}/import

Duplicate a public form into the current client's scope (numbered & owned by them).

GET
/api/me/forms/{form_id}/submission

Renvoie la soumission de l'utilisateur courant pour le formulaire (ou un stub vide).

POST
/api/me/forms/{form_id}/submission
GET
/api/me/forms/{form_id}/submissions

Liste toutes les soumissions d'un formulaire — propriétaire/admin uniquement.

GET
/api/me/forms/{form_id}/submissions-table
POST
/api/me/forms/{form_id}/upload

Per-form file attachment uploader (max 1 Mo). Used by the new "file" field

GRH

GET
/api/hr/absences
POST
/api/hr/absences
POST
/api/hr/absences/scan

Auto-detect business days in month with no access_logs entry.

PATCH
/api/hr/absences/{aid}
DELETE
/api/hr/absences/{aid}
POST
/api/hr/absences/{aid}/approve

Iter40 — Approuve une absence (typiquement une requête !absence WA).

POST
/api/hr/absences/{aid}/reject

Iter40 — Refuse une absence en attente : suppression + réactivation de l'utilisateur.

GET
/api/hr/advances
POST
/api/hr/advances
DELETE
/api/hr/advances/{aid}
POST
/api/hr/advances/{aid}/approve

Iter40 — Approve a pending advance (typically WA-issued).

POST
/api/hr/advances/{aid}/reject

Iter40 — Reject (delete) a pending advance.

POST
/api/hr/advances/{aid}/repay
PATCH
/api/hr/allowances/{aid}
DELETE
/api/hr/allowances/{aid}
PATCH
/api/hr/bonuses/{bid}
DELETE
/api/hr/bonuses/{bid}
GET
/api/hr/dashboard/monthly-presence

Top 10 employees by accumulated hours for the given month.

GET
/api/hr/dashboard/weekly-presence

Top 5 active employees this calendar week (Mon-Sun, UTC).

GET
/api/hr/eligible-users
GET
/api/hr/employees
POST
/api/hr/employees
POST
/api/hr/employees/backfill-matricules

Iter38c — Assign auto-generated matricule to employees missing one (tenant-scoped).

PATCH
/api/hr/employees/{eid}
DELETE
/api/hr/employees/{eid}
GET
/api/hr/employees/{eid}/allowances
POST
/api/hr/employees/{eid}/allowances
POST
/api/hr/employees/{eid}/apply-catalog/{cid}

0-3 — Applique un modèle de catalogue à un employé. Pour les indemnités,

GET
/api/hr/employees/{eid}/bonuses
POST
/api/hr/employees/{eid}/bonuses
GET
/api/hr/employees/{eid}/payslip
GET
/api/hr/employees/{eid}/payslip.pdf
POST
/api/hr/employees/{eid}/restore
GET
/api/hr/employees/{eid}/timesheet
POST
/api/hr/employees/{src_eid}/copy-pay-items
GET
/api/hr/holidays
POST
/api/hr/holidays
POST
/api/hr/holidays/import

Importe les jours fériés à date fixe connus pour l'année/pays donnés.

PATCH
/api/hr/holidays/{hid}
DELETE
/api/hr/holidays/{hid}
GET
/api/hr/pay-catalog
POST
/api/hr/pay-catalog
PATCH
/api/hr/pay-catalog/{cid}
DELETE
/api/hr/pay-catalog/{cid}
GET
/api/hr/settings
PATCH
/api/hr/settings
GET
/api/hr/taxes
PUT
/api/hr/taxes

Replace the tenant's taxes (max 5).

Meta Webhook

GET
/api/meta/webhook

Iter38r-fix3 — Accepts either `meta_webhook_verify_token`

POST
/api/meta/webhook

Iter38r-fix3 — Detects WhatsApp Cloud payloads

Officines

POST
/api/officines/lookup

Officines Portal

GET
/api/officines-portal/auth/magic-callback
POST
/api/officines-portal/auth/magic-link
POST
/api/officines-portal/auth/request-otp
POST
/api/officines-portal/auth/verify-otp
GET
/api/officines-portal/history
GET
/api/officines-portal/history/export.csv
GET
/api/officines-portal/inventory
POST
/api/officines-portal/inventory
GET
/api/officines-portal/inventory/export.csv
POST
/api/officines-portal/inventory/lookup-amm

Cherche dans `amm_numbers` un produit correspondant au CIP scanné

PUT
/api/officines-portal/inventory/{item_id}
DELETE
/api/officines-portal/inventory/{item_id}
GET
/api/officines-portal/me
POST
/api/officines-portal/me/regenerate-secret
POST
/api/officines-portal/register

Officines Registry — Public

GET
/api/officines-registry/{officine_id}/logo

Officines — Public

POST
/api/public/officines/register

Lets an officine declare its inventory. The body must be HMAC-signed

PV de réunions

GET
/api/me/meetings
POST
/api/me/meetings
GET
/api/me/meetings/{mid}
PUT
/api/me/meetings/{mid}
DELETE
/api/me/meetings/{mid}
GET
/api/me/meetings/{mid}/pdf
POST
/api/me/meetings/{mid}/sign
POST
/api/me/meetings/{mid}/unsign

Payments

POST
/api/webhook/stripe

Stripe webhook. Verifies signature, then finalises either a paid

Portail Client

POST
/api/me/access-log

Enregistre un accès à une page du portail. Appelé par la SPA à chaque changement de route.

GET
/api/me/account
GET
/api/me/account-detail

Iter34k — Read-only account profile shown in the user-menu "Mon

GET
/api/me/admin-clients

Le client Primaire (Superviseur) voit tous les autres clients ayant le rôle 'admin'.

PUT
/api/me/admin-clients/{target_id}
GET
/api/me/ai/summaries

Liste les résumés IA sauvegardés de l'utilisateur appelant (les admins voient tout,

DELETE
/api/me/ai/summaries/{sid}
POST
/api/me/ai/summaries/{sid}/to-report

Convertit un résumé IA sauvegardé en Rapport (ou en Suivi si un client_id est

POST
/api/me/ai/summarize
POST
/api/me/api-trace

Records one API call from the frontend (mutations only, set up by the axios interceptor).

GET
/api/me/appointments

All users belonging to the same client see the same set of RDV.

POST
/api/me/appointments
PUT
/api/me/appointments/{appt_id}

Client may edit their own upcoming appointments (pending/confirmed).

DELETE
/api/me/appointments/{appt_id}
GET
/api/me/branding

Renvoie le branding à afficher dans la sidebar du portail connecté.

GET
/api/me/catalog/export.csv
GET
/api/me/catalog/history
POST
/api/me/catalog/quotes/mark-treated
GET
/api/me/catalog/stats
GET
/api/me/clients

Liste client minimale pour utilisateurs élevés (utilisée dans les formulaires suivis/intervention).

GET
/api/me/clients-roster

Renvoie une liste publique-sûre de clients servant à peupler le dropdown entreprise

GET
/api/me/contact-inbox

Inbox of messages submitted via the public contact form.

GET
/api/me/contacts

Liste TOUS les contacts dans le scope du client de l'utilisateur.

POST
/api/me/contacts
GET
/api/me/contacts/export.csv

Iter34w — Export the directory as CSV (Excel-compatible, UTF-8 BOM).

GET
/api/me/contacts/export.json
GET
/api/me/contacts/export.pdf

Iter34w — Generate a PDF listing of the visible directory (ReportLab).

POST
/api/me/contacts/import-cross-tenant

Crée un contact dans le scope du tenant de l'appelant depuis n'importe quel

GET
/api/me/contacts/search-cross-tenant

Recherche un numéro de téléphone à travers TOUS les tenants. Renvoie une fiche

PUT
/api/me/contacts/{cid}
DELETE
/api/me/contacts/{cid}
GET
/api/me/contacts/{cid}/active-ticket

Convenience: returns the non-closed ticket for a contact (if any).

GET
/api/me/contacts/{cid}/messages

Renvoie la conversation WhatsApp complète pour un contact de l'annuaire.

POST
/api/me/contacts/{cid}/messages/mark-read

Marque tous les messages WA entrants d'un contact donné comme lus (fixe read_by_us_at).

POST
/api/me/contacts/{cid}/photo

Upload a profile picture for a contact (à la WhatsApp avatar). Stored in

DELETE
/api/me/contacts/{cid}/photo

Remove a contact's profile picture (sets photo_url to null).

POST
/api/me/contacts/{cid}/ticket

Open a new support ticket from the WhatsApp chat window. Blocks if

POST
/api/me/contacts/{cid}/wa-sync

Read the latest WhatsApp profile name we observed for this contact's

POST
/api/me/contacts/{contact_id}/save-as-tracked-user

Identique à /admin/contacts/{id}/save-as-tracked-user mais auto-génère aussi un mot de passe,

GET
/api/me/dashboard/ticket-stats

Per-user ticket resolution score (only `done` tickets count) over the

GET
/api/me/dashboard/wa-media-summary

Renvoie une synthèse des médias WhatsApp entrants reçus durant les `days` derniers jours.

GET
/api/me/dashboard/wa-reply-stats

Renvoie les agrégats de temps de réponse WhatsApp par utilisateur sur la fenêtre courante.

GET
/api/me/demo/status

Iter35h — Frontend uses this endpoint to render the persistent

GET
/api/me/documents

RGPD: anonymizes uploaded_by_email/name for non-privileged roles.

POST
/api/me/documents
DELETE
/api/me/documents/{doc_id}
GET
/api/me/features

Résout les feature flags SMART Communications pour l'utilisateur appelant.

GET
/api/me/formations
GET
/api/me/formations/{fid}
POST
/api/me/formations/{fid}/enroll
POST
/api/me/formations/{fid}/modules/{mid}/ask

Transmet la question de l'utilisateur à l'API REST externe du module configurée par l'admin.

POST
/api/me/formations/{fid}/modules/{mid}/visit

Mark a module as visited (call when the page is OPENED).

POST
/api/me/formations/{fid}/modules/{mid}/visit/{visit_id}/close

Enregistre la durée une fois que l'utilisateur quitte le module.

POST
/api/me/formations/{fid}/stripe/checkout

Crée une session Stripe Checkout pour une formation payante.

GET
/api/me/idle-config
GET
/api/me/intervention-reasons

Return the (admin-configurable) list of preset reasons used by the

GET
/api/me/interventions

RGPD: anonymizes the technician name for non-privileged roles.

POST
/api/me/interventions
GET
/api/me/interventions/hourly-rate

Retourne le taux horaire en XOF résolu pour l'utilisateur courant.

GET
/api/me/interventions/pdf

PDF de l'historique des interventions selon les filtres (date + client + statut).

DELETE
/api/me/interventions/{int_id}
POST
/api/me/invoices/from-interventions

Génère 1 facture par tenant à partir d'interventions sélectionnées.

GET
/api/me/invoices/from-interventions

Liste des factures interventions (admin/sup voient tout, client voit

GET
/api/me/invoices/from-interventions/{inv_id}/pdf

PDF de la facture (admin/sup OU le tenant propriétaire).

GET
/api/me/media-library

Tous les médias téléversés par les utilisateurs du même client. Banque partagée.

POST
/api/me/media-library

Upload + register a media in the shared client library, returns a stable public URL

POST
/api/me/media-library/wa-cleanup

Delete WhatsApp-sourced media library entries whose underlying file is

DELETE
/api/me/media-library/{media_id}
GET
/api/me/messaging/schedules

Liste les envois WhatsApp programmés de l'utilisateur. Les admins voient tout ; les utilisateurs portail

POST
/api/me/messaging/schedules
DELETE
/api/me/messaging/schedules/{sid}
GET
/api/me/messaging/variable-tokens

Portal mirror of variable tokens. Same resolution at send time.

GET
/api/me/notes-summary

Renvoie les compteurs et timestamps de dernière mise à jour pour afficher les boutons du dashboard.

GET
/api/me/notes-targets

Iter35m — Renvoie la liste des utilisateurs auxquels une note/tâche peut être adressée

GET
/api/me/notes/{kind}
POST
/api/me/notes/{kind}
GET
/api/me/notes/{kind}/authors

Distinct authors for the kind — used to populate the filter dropdown.

PUT
/api/me/notes/{kind}/{note_id}
DELETE
/api/me/notes/{kind}/{note_id}
POST
/api/me/notes/{kind}/{note_id}/note-de-service
GET
/api/me/notifications/counts

Return the count of new items per module since the user last visited that module.

POST
/api/me/notifications/mark-seen

Mark a module as visited (resets its badge counter to 0).

POST
/api/me/payment-links
GET
/api/me/payment-links
PATCH
/api/me/payment-links/{link_id}
DELETE
/api/me/payment-links/{link_id}
GET
/api/me/payments

Liste les paiements récents de l'utilisateur appelant. Admin/superviseur voient tout.

GET
/api/me/payments-dashboard
POST
/api/me/payments/pawapay/deposit

DEPRECATED (Iter38r) — Replaced by the hosted Payment Page flow because

POST
/api/me/payments/pawapay/payment-page

Iter38r — Initiate a hosted PawaPay Payment Page session.

GET
/api/me/payments/{deposit_id}

Polling endpoint — refreshes the payment by querying PawaPay if still pending.

POST
/api/me/profile-update-request

Iter34k — Soumet une demande libre à l'admin pour corriger l'identité,

POST
/api/me/ratings/{kind}/{target_id}
DELETE
/api/me/ratings/{kind}/{target_id}
GET
/api/me/recent-activity

Return new activity events for the user's visible scope since the

POST
/api/me/sms/bulk
GET
/api/me/sms/messages
GET
/api/me/sms/providers

Tell the portal which SMS providers are configured + the default one.

GET
/api/me/sms/schedules
DELETE
/api/me/sms/schedules/{sid}
POST
/api/me/sms/send
GET
/api/me/tenant-users
GET
/api/me/ticket-motif-templates
POST
/api/me/ticket-motif-templates
DELETE
/api/me/ticket-motif-templates/{tpl_id}
POST
/api/me/tickets

Iter38r-fix9o — Quick-create a ticket from the floating bubble.

GET
/api/me/tickets
POST
/api/me/tickets/bulk-delete

Hard-delete les tickets sélectionnés par leurs ids. Admin/Sup uniquement.

GET
/api/me/tickets/cost-summary

Iter37d — Monthly cost aggregate for closed tickets.

GET
/api/me/tickets/cost-summary.csv

Iter37e — CSV export du coût mensuel des interventions clôturées.

GET
/api/me/tickets/cost-summary.pdf

Iter37e — PDF export du coût mensuel des interventions clôturées (A4 paysage).

GET
/api/me/tickets/pending-count

Renvoie le nombre de tickets non-clos dans le scope de l'utilisateur.

POST
/api/me/tickets/reset

Hard-delete TOUS les tickets (remise à zéro complète). Réservé Admin/Superviseur.

GET
/api/me/tickets/trash
PATCH
/api/me/tickets/{tid}
POST
/api/me/tickets/{tid}/archive
POST
/api/me/tickets/{tid}/assign

Assign a ticket to a user (or unassign when user_id is empty).

POST
/api/me/tickets/{tid}/close
POST
/api/me/tickets/{tid}/reopen

Re-open a closed ticket as a *new* sibling whose number ends with -R{k}.

POST
/api/me/upload
GET
/api/me/users
POST
/api/me/wa-import-by-phone

Crée un contact d'annuaire directement depuis un numéro de téléphone (utilisé par

GET
/api/me/wa-pending-imports

Liste les numéros de téléphone inconnus ayant écrit à notre WhatsApp Business

DELETE
/api/me/wa-pending-imports/{pending_id}

Permanently dismiss a pending WA inbound (won't reappear unless they

POST
/api/me/wa-pending-imports/{pending_id}/import

Promote a pending WA inbound to a full directory contact. Optionally

GET
/api/me/welcome-briefing
POST
/api/me/whatsapp/bulk

Envoie un modèle WhatsApp approuvé par Meta à plusieurs contacts CRM en une fois,

GET
/api/me/whatsapp/history
POST
/api/me/whatsapp/messages/{msg_id}/save-to-library

Register an inbound WhatsApp media in the shared client media library.

POST
/api/me/whatsapp/send
POST
/api/me/whatsapp/send-media

Envoie un message média WhatsApp libre dans la fenêtre Meta de 24h.

POST
/api/me/whatsapp/send-text

Envoie un message texte WhatsApp libre — autorisé uniquement dans la fenêtre Meta de 24h

GET
/api/me/whatsapp/templates

Utilisateurs portail : liste les modèles APPROUVÉS + uniquement ceux marqués disponibles.

GET
/api/me/whatsapp/unread

Renvoie les compteurs de non-lus par contact + un total global des messages WA entrants

GET
/api/payments/stripe/status/{session_id}

Poll the checkout status. Idempotent — enrollment only created

POST
/api/transcribe

Accepts a short audio file (webm/mp3/m4a/wav/ogg, ≤25 Mo) and returns

Portail Client — AI Media (fix9m)

POST
/api/me/ai/generate-image-imagen
POST
/api/me/ai/generate-video-veo
GET
/api/me/ai/generate-video-veo/{job_id}
POST
/api/me/ai/tts-elevenlabs
GET
/api/me/ai/voices
POST
/api/me/ai/voices/clone
DELETE
/api/me/ai/voices/{voice_id}

Portail Client — Bonus pack

PUT
/api/me/wa-tasks-digest
GET
/api/me/wa-tasks-digest

Portail Client — GDPR

GET
/api/me/gdpr/export

Portail Client — Groupes

GET
/api/me/contact-groups
POST
/api/me/contact-groups
POST
/api/me/contact-groups/resolve

Expand a (groups, contacts) selection into the unique target list.

PUT
/api/me/contact-groups/{gid}
DELETE
/api/me/contact-groups/{gid}
POST
/api/me/contact-groups/{gid}/contacts
DELETE
/api/me/contact-groups/{gid}/contacts/{contact_id}

Portail Client — IA

GET
/api/files/ai/{tenant_id}/{filename}
GET
/api/me/ai-usage
POST
/api/me/ai/edit-image
POST
/api/me/ai/generate-image
POST
/api/me/ai/generate-profile-photo
POST
/api/me/ai/generate-video
GET
/api/me/ai/history

Portail Client — Inbox

POST
/api/me/inbox/import-contact

Crée un contact à partir d'un thread inbox qui n'a aucun contact correspondant

POST
/api/me/inbox/mark-read/{channel}/{thread_id}
POST
/api/me/inbox/send
GET
/api/me/inbox/unified

Renvoie jusqu'à `limit` threads depuis WhatsApp + Messenger, triés par récence.

GET
/api/me/inbox/unified/{channel}/{thread_id}

Return ordered messages of a single thread.

Portail Client — Liluvine PRO

GET
/api/me/liluvine-pro/autoreply-feed
GET
/api/me/liluvine-pro/branding
POST
/api/me/liluvine-pro/chat
POST
/api/me/liluvine-pro/chat-with-image
POST
/api/me/liluvine-pro/chat/stream
POST
/api/me/liluvine-pro/request-help
GET
/api/me/liluvine-pro/sessions
GET
/api/me/liluvine-pro/sessions/{sid}
PATCH
/api/me/liluvine-pro/sessions/{sid}
DELETE
/api/me/liluvine-pro/sessions/{sid}

Portail Client — Meta

GET
/api/me/meta/ads/accounts
GET
/api/me/meta/ads/accounts/{ad_account_id}/insights
POST
/api/me/meta/ads/campaigns
POST
/api/me/meta/ads/campaigns/{campaign_id}/status
POST
/api/me/meta/disconnect
GET
/api/me/meta/messenger/conversations
POST
/api/me/meta/messenger/send
GET
/api/me/meta/oauth/callback
GET
/api/me/meta/oauth/url
GET
/api/me/meta/pages
POST
/api/me/meta/pages/{page_id}/comments/{comment_id}/reply
POST
/api/me/meta/pages/{page_id}/photos
GET
/api/me/meta/pages/{page_id}/posts
POST
/api/me/meta/pages/{page_id}/posts
GET
/api/me/meta/pages/{page_id}/posts/{post_id}/comments
GET
/api/me/meta/status

Portail Client — PawaPay Payouts

POST
/api/me/payments/pawapay/payout
GET
/api/me/payments/pawapay/payout/{pid}
GET
/api/me/payments/pawapay/payouts

Public

POST
/api/appointments/public
GET
/api/availability

Renvoie la liste des créneaux libres/occupés pour une date donnée.

GET
/api/blog
GET
/api/blog/tags
GET
/api/blog/{slug}
GET
/api/case-studies
GET
/api/case-studies/{slug}
GET
/api/catalog
GET
/api/client-categories
GET
/api/company-info
POST
/api/contact
GET
/api/content
GET
/api/content/{slug}
GET
/api/deployments

Liste publique, groupée par pays, avec toutes les solutions et le total d'installations.

GET
/api/document-categories
GET
/api/feedback/{token}

Récupère les infos d'un RDV via son feedback_token (formulaire NPS public).

POST
/api/feedback/{token}

Soumet un témoignage NPS via le feedback_token. payload: {score:int, comment:str, allow_publish:bool}

GET
/api/files/{file_id}
GET
/api/integrations/resolve-link

Endpoint public — décode un jeton de lien, renvoie ses claims pour que la SPA

POST
/api/newsletter/subscribe
POST
/api/newsletter/unsubscribe
POST
/api/public/catalog/track
GET
/api/public/coupons/{code}/validate

Validate a coupon for a given XOF amount (UX preview before checkout).

GET
/api/public/documents
GET
/api/public/forms/{form_id}

Récupère un formulaire public en anonyme — fonctionne uniquement si `is_public=True`.

POST
/api/public/forms/{form_id}/submission
GET
/api/public/incidents

Timeline publique des incidents (résolus + en cours). Utilisé par la page /uptime.

GET
/api/public/incidents/confirm
POST
/api/public/incidents/subscribe
GET
/api/public/incidents/unsubscribe
GET
/api/public/og/product/{product_id}
GET
/api/public/orders/{order_id}
GET
/api/public/pay/{slug}
POST
/api/public/pay/{slug}/deposit
GET
/api/public/pay/{slug}/status/{deposit_id}

Polling endpoint for the public payment landing page (no auth).

GET
/api/public/policies/{slot}

Serve a policy PDF inline so 3rd parties (Google, Facebook…) can verify it.

GET
/api/public/products
POST
/api/public/products/{product_id}/checkout
GET
/api/public/remote/support/{token}

Inspecte la charge support actuelle + la config Liluvine — protégé par jeton HMAC.

POST
/api/public/remote/support/{token}
GET
/api/public/status

Données de la page de statut publique (accessible à tous). Uniquement les sondes flag public.

GET
/api/public/subscriptions

Public : renvoie les plans actifs groupés par catégorie (max 4 catégories).

POST
/api/public/subscriptions/order
GET
/api/public/support-load
GET
/api/public/ui-flags

Iter40-route-loader (S051) + Iter40-ui-flags — Tiny anonymous endpoint

GET
/api/testimonials

Liste les témoignages clients publiés (pour le site public).

GET
/api/testimonials/stats

Statistiques NPS publiques (basées uniquement sur les témoignages publiés).

POST
/api/track

Enregistre une visite et la transmet (si configuré) à l'API REST externe.

GET
/api/version

Renvoie la version du build en cours + l'horodatage du dernier redémarrage.

GET
/api/visits/count

Total visit counter for the public homepage. Includes admin-tunable offset.

GET
/api/visits/trend

Daily visit counts for the last N days (default 7), oldest first.

Public — Ad Banners

GET
/api/public/ad-banners/active

Return ONE active banner suitable for `placement` (weighted random).

GET
/api/public/ad-banners/config
POST
/api/public/ad-banners/{banner_id}/click
POST
/api/public/ad-banners/{banner_id}/impression
GET
/api/public/ads-report/{slug}

Iter38r-fix9y — Rapport public en direct pour un annonceur. Nécessite le

POST
/api/public/ads-report/{slug}/ai-plan
POST
/api/public/ads-report/{slug}/checkout

Crée une session Stripe Checkout pour le renouvellement de la campagne.

PUT
/api/public/ads-report/{slug}/media

Self-service media update. The advertiser uploads via the admin

GET
/api/public/ads-report/{slug}/payment-status/{session_id}

Poll endpoint. Confirms the Stripe session and, on first paid

POST
/api/public/ads-report/{slug}/renew

Public — Docs

GET
/api/public/docs
GET
/api/public/docs/{slug}

Public — Incidents Webhook

POST
/api/public/incidents

Reçoit un incident depuis un serveur tiers (Watchdog, Uptime-Bot,

Public — Media Library

GET
/api/public/media-library

All `public=True` media, sorted by sort_order asc then created_at desc.

Registre des erreurs

GET
/api/me/errors
POST
/api/me/errors/acknowledge-all

Marque comme lues TOUTES les erreurs non lues, indépendamment des

POST
/api/me/errors/bulk-acknowledge
POST
/api/me/errors/bulk-delete

Hard-delete les erreurs sélectionnées par leurs ids.

POST
/api/me/errors/purge

Hard-delete errors matching the date range. Superviseur ONLY.

POST
/api/me/errors/reset

Hard-delete TOUTES les erreurs (remise à zéro complète).

GET
/api/me/errors/stats
GET
/api/me/errors/{eid}
DELETE
/api/me/errors/{eid}
POST
/api/me/errors/{eid}/acknowledge

Registre des erreurs (Webhook)

POST
/api/errors/ingest

Webhook public utilisé par les logiciels clients pour pousser des exceptions/erreurs.

Santé

GET
/api/
GET
/api/health
GET
/api/version

Iter35n — Tag de version public. Affiché sur la page de connexion pour que les utilisateurs

Tenant Meta

GET
/api/admin/countries
POST
/api/admin/countries
PATCH
/api/admin/countries/{code}
DELETE
/api/admin/countries/{code}
GET
/api/admin/tenant-country
PATCH
/api/admin/tenant-country
GET
/api/me/tenant-meta

Téléchargements protégés

POST
/api/me/download-requests
GET
/api/me/download-requests/admin/audit
GET
/api/me/download-requests/{token}
POST
/api/me/download-requests/{token}/cancel

Téléchargements protégés (public)

GET
/api/wa-action/{token}/{action}

VIDAL

POST
/api/vidal/prescription/analyze

Forwards the payload to VIDAL `/alerts/full`. Result includes alert

GET
/api/vidal/product/{product_id}
GET
/api/vidal/product/{product_id}/documents
GET
/api/vidal/products/status
GET
/api/vidal/quota/me
GET
/api/vidal/search

Voice Notifications

POST
/api/voice-notifications/trigger

Utilisé par les utilisateurs suivis ou l'admin pour envoyer une notification vocale

Webhook

GET
/api/whatsapp/webhook

Meta verifies the webhook via GET with hub.mode=subscribe, hub.verify_token, hub.challenge.

POST
/api/whatsapp/webhook

Receive Meta Cloud API events: new inbound messages + outbound status updates.

Webhooks

POST
/api/webhooks/agenda/{secret}

Inbound webhook from n8n AI Agent. Allows CRUD on appointments using a

POST
/api/webhooks/liluvine-pro/{source}/{secret}
POST
/api/webhooks/pawapay/deposits/{secret}

Iter38r-fix2 — PawaPay deposit callback. URL à coller dans le tableau

POST
/api/webhooks/pawapay/payouts/{secret}
POST
/api/webhooks/pawapay/refunds/{secret}

Iter38r-fix2 — PawaPay refund callback. URL à coller dans le tableau

POST
/api/webhooks/pawapay/{secret}

Legacy generic PawaPay callback (kept for pre-Iter38r-fix2 configs).

GETPOST
/api/webhooks/support-load/{secret}

External webhook to push the current support load (0..7).

Webhooks Paie

GET
/api/admin/payroll-webhooks/config
PATCH
/api/admin/payroll-webhooks/config
GET
/api/admin/payroll-webhooks/log
GET
/api/admin/payroll-webhooks/outbound/preview

Renvoie le JSON qui serait envoyé — utile pour revue avant expédition.

POST
/api/admin/payroll-webhooks/outbound/test
POST
/api/webhooks/n8n/payroll/{tenant_id}

i18n

GET
/api/i18n/detect

Renvoie {"suggested_lang": "fr|en|ar"} basé sur les en-têtes Cloudflare / CDN

GET
/api/i18n/languages
GET
/api/i18n/translations

Renvoie {key: text} pour la langue demandée. Bascule sur FR