Authentification
Tous les endpoints protégés nécessitent un jeton JWT valide. Obtenez-en un en appelant l'un des quatre endpoints de connexion, puis incluez-le dans chaque requête :
Authorization: Bearer <votre-jeton>
Les jetons sont émis pour l'un des quatre rôles : admin, entreprise, employé ou client. Chaque rôle a des niveaux d'accès différents, notamment pour les endpoints de base de données.
Requêtes
Tous les endpoints acceptent et retournent du JSON sauf indication contraire (ex. : les téléversements utilisent multipart/form-data, les téléchargements de documents retournent du binaire). L'URL de base pour toutes les requêtes est :
https://api.jamiiai.com
La documentation Swagger interactive est disponible à /docs lors de l'exécution du serveur API.
Chat IA
IA conversationnelle propulsée par GPT-4o-mini avec historique de conversation persistant, prompts système personnalisés et support du streaming. Chaque session utilisateur maintient son propre contexte.
Envoyer un message et recevoir une réponse générée par l'IA. L'historique de conversation est maintenu côté serveur.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
message | string | Oui | Le message à envoyer à l'IA |
Réponse
{
"response": "L'informatique quantique utilise des qubits..."
}
Retourner l'historique complet de la conversation pour la session en cours.
Réponse
{
"history": [
{"role": "user", "content": "Bonjour"},
{"role": "assistant", "content": "Bonjour ! Comment puis-je vous aider ?"}
]
}
Effacer l'historique de conversation et recommencer à zéro.
Réponse
{"message": "Conversation history cleared"}
Mettre à jour le prompt système qui guide le comportement de l'IA.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
prompt | string | Oui | Le nouveau prompt système |
Réponse
{"message": "System prompt updated", "prompt": "Tu es un pirate..."}
Chat Vocal
Pipeline audio complet — transcription parole-en-texte avec OpenAI Whisper, synthèse texte-en-parole, et conversations audio de bout en bout. Téléversez des fichiers audio et recevez des réponses textuelles ou audio.
Envoyer de l'audio, obtenir la transcription + réponse IA texte + réponse audio. Pipeline complet STT → Chat → TTS.
Requête
multipart/form-data avec un champ file contenant le fichier audio.
Réponse
{
"transcription": "Qu'est-ce que l'IA ?",
"response": "L'IA signifie...",
"audio": "<MP3 encodé en base64>"
}
Transcrire un fichier audio en texte avec OpenAI Whisper.
Requête
multipart/form-data avec un champ file.
Réponse
{"text": "Bonjour, comment allez-vous ?"}
Convertir du texte en audio MP3 avec OpenAI TTS.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à synthétiser |
Réponse
Audio MP3 binaire (audio/mpeg).
Envoyer du texte, obtenir la réponse IA texte + réponse audio (Chat → TTS).
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Message à envoyer |
Réponse
{
"response": "Voici ma réponse...",
"audio": "<MP3 encodé en base64>"
}
Chat Vidéo
Extraire l'audio et les images des vidéos téléversées avec ffmpeg. Transcrire l'audio vidéo, converser sur le contenu vidéo et décrire les images avec GPT-4 Vision.
Téléverser une vidéo → extraire l'audio → chat IA → réponse texte + audio.
Requête
multipart/form-data avec un champ file contenant la vidéo.
Téléverser une vidéo → extraire l'audio → transcrire en texte avec Whisper.
Envoyer du texte → chat → TTS → réponse texte + audio.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Message à envoyer |
Téléverser une vidéo → extraire une image à 1 seconde → décrire avec AI Vision.
Assistant Code
Générer, réviser, expliquer et refactoriser du code avec l'IA et des prompts système spécifiques pour des résultats ciblés et de haute qualité. Supporte tous les langages de programmation.
Générer du code à partir d'une description en langage naturel.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
description | string | Oui | Ce qu'il faut générer |
language | string | Non | Langage cible (ex. « python ») |
Réviser du code et retourner des commentaires sur les bugs, problèmes de sécurité et améliorations.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
code | string | Oui | Code à réviser |
Expliquer ce qu'un morceau de code fait en langage simple.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
code | string | Oui | Code à expliquer |
Refactoriser du code pour une meilleure qualité, lisibilité et maintenabilité.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
code | string | Oui | Code à refactoriser |
instructions | string | Non | Instructions de refactorisation spécifiques |
Agent IA
Exécution de tâches autonome avec outils intégrés. L'agent planifie, appelle des outils, observe les résultats et itère jusqu'à complétion. Outils intégrés : calculator, datetime_now, text_transform, json_extract.
Soumettre une tâche pour exécution autonome par l'agent IA avec appel d'outils.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
task | string | Oui | Description de la tâche |
Réponse
{
"result": "La réponse est 15.",
"tools_available": ["calculator", "datetime_now", "text_transform", "json_extract"]
}
Retourner l'historique de conversation et d'utilisation des outils de l'agent.
Effacer l'historique de conversation de l'agent.
Intelligence Image
Décrire des images, répondre à des questions visuelles avec GPT-4 Vision, et générer des images à partir de prompts textuels avec DALL-E 3. Supporte PNG, JPEG, GIF et WebP.
Décrire une image téléversée avec OpenAI Vision.
Requête
multipart/form-data avec un champ file.
Réponse
{"description": "Un coucher de soleil sur une chaîne de montagnes..."}
Répondre à une question spécifique sur une image téléversée.
Requête
multipart/form-data avec les champs file et question.
Générer une image à partir d'un prompt textuel avec DALL-E 3.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
prompt | string | Oui | Description de l'image |
size | string | Non | 1024x1024, 1024x1792 ou 1792x1024 |
quality | string | Non | standard ou hd |
Réponse
{"url": "https://oaidalleapi...", "prompt": "Un chat avec un chapeau haut-de-forme"}
Génération de Documents
Transformer du texte en documents Word professionnels, présentations PowerPoint et fichiers PDF — prêts à télécharger. Utilise python-docx, python-pptx et fpdf2.
Générer un document Word (.docx) à partir de texte. Retourne un fichier binaire à télécharger.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Contenu du document |
title | string | Non | Titre du document |
Générer une présentation PowerPoint (.pptx) à partir de texte. Le texte long est automatiquement réparti sur plusieurs diapositives.
Générer un document PDF (.pdf) à partir de texte.
Intelligence Base de données
Posez des questions en français — Jamii AI les traduit en SQL, les exécute de manière sécurisée et retourne des réponses lisibles. Contrôle d'accès à quatre rôles au niveau des lignes : les admins voient tout, les employés sont restreints aux tables autorisées, les clients sont filtrés par leurs propres données.
Requête base de données en langage naturel avec contrôle d'accès au niveau des lignes par rôle.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
question | string | Oui | Question en langage naturel |
Réponse
{"answer": "Il y a eu 1 247 commandes passées en février."}
Retourner le schéma de la base de données (tables et colonnes).
Exécuter une requête SELECT ou SHOW brute. Rôle admin/entreprise uniquement.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
query | string | Oui | Instruction SQL SELECT ou SHOW |
Effacer l'historique de conversation du chatbot BD.
Sélectionner une base de données de travail après la connexion client.
Lister les entreprises auxquelles l'utilisateur appartient.
Sélectionner une base de données d'entreprise par numéro d'entreprise.
Texte IA
Traduire du texte entre langues, générer des résumés avec style configurable, analyser le sentiment avec scores de confiance, et extraire des données structurées à partir de texte non structuré — le tout propulsé par GPT.
Traduire du texte vers une langue cible.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à traduire |
target_language | string | Oui | Langue cible (ex. « Français ») |
source_language | string | Non | Langue source (auto-détectée si omise) |
Réponse
{"translated": "Hello world", "target_language": "English"}
Résumer du texte avec style et longueur configurables.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à résumer |
max_length | string | Non | Longueur cible (ex. « 100 mots ») |
style | string | Non | Style de résumé (ex. « concis », « détaillé ») |
Réponse
{"summary": "Un résumé concis du texte d'entrée..."}
Analyser le sentiment d'un texte — retourne l'étiquette de sentiment, le score de confiance et l'explication.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à analyser |
Réponse
{
"sentiment": "positif",
"confidence": 0.95,
"explanation": "Langage fortement positif détecté"
}
Extraire des données structurées à partir de texte non structuré selon une description de schéma.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte source |
schema_description | string | Oui | Champs à extraire (ex. « nom, email, téléphone ») |
Réponse
{
"data": {"nom": "Alice", "email": "alice@exemple.com", "telephone": "555-1234"}
}
Modération de contenu
Détectez instantanément le contenu nuisible, haineux, violent ou sexuel avec le modèle de modération d'OpenAI. Retourne des indicateurs par catégorie et des scores de confiance pour un filtrage de contenu granulaire.
Vérifier si un texte contient du contenu nuisible avec l'API de Modération OpenAI.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à modérer |
Réponse
{
"flagged": false,
"categories": {},
"category_scores": {"violence": 0.0012, "hate": 0.0003}
}
Embeddings
Générer des vecteurs d'embedding pour la recherche sémantique, le clustering et la recommandation. Calculer la similarité cosinus entre deux textes. Utilise le modèle text-embedding-3-small d'OpenAI.
Générer un vecteur d'embedding pour une chaîne de texte.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à encoder |
Réponse
{
"embedding": [0.012, -0.034, 0.056, ...],
"dimensions": 1536
}
Calculer la similarité cosinus entre deux textes (0 à 1).
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text1 | string | Oui | Premier texte |
text2 | string | Oui | Deuxième texte |
Réponse
{"text1": "chat", "text2": "chaton", "score": 0.92}
Intelligence Web
Récupérer n'importe quelle URL publique, extraire son contenu textuel et obtenir un résumé alimenté par l'IA ou poser des questions spécifiques sur la page. Inclut une protection SSRF qui bloque les IP privées et les schémas non-HTTP.
Récupérer une URL et résumer son contenu, ou répondre à une question spécifique à son sujet.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
url | string | Oui | URL publique à récupérer (http/https uniquement) |
question | string | Non | Question spécifique sur le contenu de la page |
Réponse
{
"url": "https://exemple.com/article",
"summary": "L'article traite de..."
}
Mémoire persistante
Stocker, rappeler sémantiquement et gérer des mémoires persistantes avec recherche basée sur les embeddings. Idéal pour construire des assistants IA contextuels qui se souviennent des préférences utilisateur et des interactions passées.
Stocker une mémoire avec des métadonnées optionnelles. Un vecteur d'embedding est généré automatiquement pour le rappel sémantique.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
content | string | Oui | Contenu de la mémoire à stocker |
metadata | object | Non | Métadonnées clé-valeur optionnelles |
Réponse
{
"id": 0,
"content": "L'utilisateur préfère le mode sombre",
"metadata": {"category": "preferences"}
}
Rappeler les mémoires les plus pertinentes par similarité sémantique à une requête.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
query | string | Oui | Requête de recherche |
top_k | integer | Non | Nombre max de résultats (défaut : 5) |
Réponse
{
"memories": [
{"id": 0, "content": "L'utilisateur préfère le mode sombre", "metadata": {}, "score": 0.92}
],
"count": 1
}
Effacer toutes les mémoires stockées.
Réponse
{"message": "All memories cleared"}
Base de connaissances
Ingestion de documents par espace de noms (texte et URL) avec génération augmentée par récupération (RAG) pour des Q&R alimentées par l'IA. Créez des bases de connaissances personnalisées pour toute application web.
Ingérer du texte brut dans un espace de noms. Le texte est automatiquement découpé et vectorisé.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
namespace | string | Oui | Nom de la base de connaissances |
text | string | Oui | Contenu textuel à ingérer |
source | string | Non | Libellé source optionnel |
Réponse
{"namespace": "mon-app", "chunks_added": 3, "source": "faq.md"}
Récupérer une URL, extraire le texte, découper, vectoriser et stocker. Protection SSRF.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
namespace | string | Oui | Nom de la base de connaissances |
url | string | Oui | URL publique (http/https uniquement) |
Réponse
{"namespace": "mon-app", "chunks_added": 12, "source": "https://example.com/faq"}
Interroger une base de connaissances. Utilise le RAG pour trouver les passages pertinents et générer une réponse.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
namespace | string | Oui | Base de connaissances à interroger |
question | string | Oui | Question à répondre |
top_k | integer | Non | Passages max (défaut 5, max 20) |
Réponse
{"answer": "Les retours sont acceptés sous 30 jours.", "sources": ["faq.md"], "namespace": "mon-app"}
Lister tous les espaces de noms avec leur nombre de passages.
Réponse
{"knowledge_bases": [{"namespace": "mon-app", "chunks": 15}]}
Supprimer tous les documents d'un espace de noms.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
namespace | string | Oui | Base de connaissances à vider |
Réponse
{"message": "Knowledge base 'mon-app' cleared."}
Afrique Lang
Traduction et détection de langues africaines, voix STT/TTS avec indices linguistiques, chat contextuel sur l’Afrique, modération de contenu pour langues africaines et liste des langues supportées.
Traduire du texte entre langues africaines (swahili, yoruba, haoussa, amharique, wolof, lingala, zoulou, etc.).
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à traduire |
target_language | string | Oui | Langue cible (ex. « Swahili ») |
source_language | string | Non | Indice de langue source |
Réponse
{"translated": "Habari, u hali gani?", "target_language": "Swahili"}
Détecter dans quelle langue africaine un texte est écrit.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à identifier |
Réponse
{"language": "Swahili", "confidence": 0.95, "script": "Latin", "region": "Afrique de l'Est"}
Lister toutes les langues africaines supportées.
Réponse
{"languages": ["Swahili", "Yoruba", "Hausa", "Amharic", "Wolof", "Lingala", "Zulu", "..."]}
Transcrire de l'audio avec support des langues africaines. Envoyez l'audio en données multipart avec un indice language optionnel (ISO-639-1).
Champs du formulaire
| Champ | Type | Requis | Description |
|---|---|---|---|
file | fichier | Oui | Fichier audio (mp3, wav, webm) |
language | string | Non | Code ISO-639-1 (ex. « sw », « yo », « ha ») |
Réponse
{"text": "Habari yako"}
Convertir du texte en langue africaine en parole. Retourne des octets audio/mpeg.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
message | string | Oui | Texte à synthétiser |
Discuter avec une IA experte en géographie, histoire, cultures, économie et actualités africaines.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
message | string | Oui | Question sur l'Afrique |
Réponse
{"response": "Les principales exportations du Kenya comprennent le thé, le café, les produits horticoles..."}
Effacer l'historique de conversation du chat contextuel africain.
Réponse
{"message": "African chat history cleared."}
Modérer du contenu en langues africaines, détectant les discours haineux, le tribalisme et la désinformation.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
text | string | Oui | Texte à vérifier |
Réponse
{"flagged": false, "reason": "", "language_detected": "Swahili", "categories": {"hate_speech": false, "tribalism": false, "misinformation": false, "violence": false, "discrimination": false}}
Afrique Vie
Formatage et conversion de devises africaines, analyse de transactions d’argent mobile (M-Pesa, MTN MoMo, Orange Money), conseiller agricole, éducation et préparation aux examens, et guidance juridique et réglementaire.
Formater un montant dans une devise africaine (CFA, Naira, Shilling, Rand, Cedi, etc.).
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
amount | float | Oui | Montant numérique |
currency_code | string | Oui | Code devise ISO (ex. « KES ») |
Réponse
{"formatted": "KSh 1 500,50", "currency_code": "KES", "currency_name": "Shilling kényan", "amount": 1500.5}
Estimer la conversion entre devises africaines.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
amount | float | Oui | Montant à convertir |
source_currency | string | Oui | Code ISO source |
target_currency | string | Oui | Code ISO cible |
Réponse
{"source_amount": 1000, "source_currency": "KES", "target_amount": 3150, "target_currency": "NGN", "rate": 3.15, "note": "Taux approximatif"}
Lister toutes les devises africaines supportées.
Réponse
{"currencies": {"KES": "Shilling kényan", "NGN": "Naira nigérian", "ZAR": "Rand sud-africain", "...": "..."}}
Poser une question sur les services d'argent mobile (M-Pesa, MTN MoMo, Orange Money, Airtel Money, EcoCash).
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
question | string | Oui | Question sur l'argent mobile |
Réponse
{"response": "Pour envoyer de l'argent via M-Pesa, composez *334# et suivez les instructions..."}
Analyser un message de transaction d'argent mobile ou un code USSD en données structurées.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
message | string | Oui | SMS de transaction ou code USSD |
Réponse
{"provider": "M-Pesa", "transaction_type": "send", "amount": 500, "currency": "KES", "recipient": "+254712345678", "reference": "QH45G7Z2", "status": "completed", "raw_text": "Confirmé. Ksh500 envoyé à +254712345678"}
Poser des questions sur l’agriculture, les cultures et l’élevage africains.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
question | string | Oui | Question sur l’agriculture |
Réponse
{"response": "Le manioc est l'une des cultures les plus importantes en Afrique subsaharienne..."}
Questions d’éducation et de préparation aux examens africains (WAEC, JAMB, KCSE, Baccalauréat).
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
question | string | Oui | Question d’étude ou d’examen |
exam_system | string | Non | Système d’examen cible |
Réponse
{"response": "Dans le programme de biologie du WAEC, la photosynthèse est..."}
Questions sur le droit des affaires et la réglementation en Afrique.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
question | string | Oui | Question juridique ou réglementaire |
country | string | Non | Pays (ex: Nigeria, Kenya) |
Réponse
{"response": "Au Nigeria, la loi CAMA exige que..."}
Afrique Culture
Proverbes et sagesse africains par thème ou culture, et contes — légendes et folklore de tout le continent.
Obtenir un proverbe africain par thème ou culture.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
theme | string | Non | Thème (sagesse, patience, unité) |
culture | string | Non | Culture ou ethnie |
Réponse
{"proverb": "Si tu veux aller vite, va seul...", "language": "Igbo", "culture": "Igbo", "meaning": "...", "theme": "unité"}
Raconter un conte, une légende ou une histoire folklorique africaine.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
topic | string | Oui | Sujet ou personnage |
culture | string | Non | Contexte culturel |
Réponse
{"story": "Il y a longtemps, au pays des Ashanti..."}
Streaming (SSE)
Streaming en temps réel des réponses de chat token par token via Server-Sent Events. Idéal pour construire des interfaces de chat réactives qui affichent le texte au fur et à mesure de sa génération.
Streamer une réponse de chat token par token. Retourne text/event-stream.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
message | string | Oui | Message à envoyer |
Réponse (flux SSE)
data: Il
data: était
data: une
data: fois
data: [DONE]
Traitement par lots
Traiter plusieurs messages de chat en un seul appel API. Chaque message est traité indépendamment — le chatbot est réinitialisé entre les messages pour éviter toute contamination croisée du contexte.
Envoyer plusieurs messages et recevoir des réponses individuelles pour chacun.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
messages | tableau de strings | Oui | Liste de messages (min 1) |
Réponse
{
"results": ["Réponse au premier...", "Réponse au second..."],
"count": 2
}
Endpoints d'authentification
Authentification JWT à quatre rôles avec contrôle d'accès au niveau des lignes. Admins, entreprises, employés et clients obtiennent chacun un accès adapté. Toutes les informations utilisent la table customers_credential avec correspondance insensible à la casse du secret_answer.
Connexion client — valide contre customers_credential + customers, nécessite is_verified = 'yes'.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
username | string | Oui | Nom d'utilisateur (userN) |
secret_answer | string | Oui | Réponse secrète (insensible à la casse) |
Réponse
{
"access_token": "eyJhbGciOi...",
"token_type": "bearer",
"role": "customer",
"firstname": "Alice"
}
Connexion admin — nécessite company_employee_links.is_admin = 1 et status = 1.
Connexion employé — nécessite company_employee_links.status = 1. Le JWT inclut allow_tables_list.
Connexion entreprise — nécessite customers.type = 'webcompany'. Mêmes droits d'accès que l'admin.
Obtenir les statistiques d'utilisation de l'API pour l'utilisateur actuellement authentifié.
Système
Endpoints système pour les vérifications de santé et la surveillance.
Vérification de santé — retourne le statut de l'API et la version. Aucune authentification requise.
Réponse
{"status": "ok", "version": "0.1.0"}