Imago/API_GUIDE.md
Bruno Charest cc99fea20a
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Tests (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
Add comprehensive test suite for image processing and related services
- Implement tests for database generator to ensure proper session handling.
- Create tests for EXIF extraction and conversion functions.
- Add tests for image-related endpoints, ensuring proper data retrieval and isolation between clients.
- Develop tests for OCR functionality, including language detection and text extraction.
- Introduce tests for the image processing pipeline, covering success and failure scenarios.
- Validate rate limiting functionality and ensure independent counters for different clients.
- Implement scraper tests to verify HTML content fetching and error handling.
- Add unit tests for various services, including storage and filename generation.
- Establish worker entry point for ARQ to handle background image processing tasks.
2026-02-24 11:22:10 -05:00

7.1 KiB

Guide d'utilisation de l'API Imago

📍 Sommaire


🔐 Authentification

Tous les endpoints (sauf /health et /) nécessitent une authentification via une Clé API.

Header Authorization

Vous devez inclure votre clé dans le header Authorization de chaque requête :

Authorization: Bearer VOTRE_CLE_API_SECRET

Warning

Traitez votre clé API comme un mot de passe. Ne la partagez jamais et ne l'incluez pas dans du code client (frontend) accessible publiquement.


🛡️ Scopes (Permissions)

L'accès aux fonctionnalités est contrôlé par des scopes. Chaque clé API est limitée à un ensemble de permissions :

Scope Description Fonctions incluses
images:read Lecture seule Lister les images, voir les détails, EXIF, OCR, AI.
images:write Écriture Uploader des images, relancer le pipeline de traitement.
images:delete Suppression Supprimer définitivement des images.
ai:use Utilisation IA Résumé d'URL, rédaction de tâches.
admin Administration Gérer les clients API, voir les clés, modifier les plans.

📊 Plans et Rate Limiting

Le système applique des limites de requêtes (Rate Limits) basées sur le Plan de votre client. Les compteurs sont réinitialisés toutes les heures.

Plan Uploads / heure Requêtes AI / heure
free 20 50
standard 100 200
premium 500 1000

Les requêtes de lecture (GET) ne sont pas limitées par défaut.


👥 Gestion des Clients (Admin uniquement)

Si vous avez le scope admin, vous pouvez gérer les accès.

Créer un nouveau client

curl -X POST http://localhost:8000/auth/clients \
  -H "Authorization: Bearer CLE_ADMIN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Application Mobile",
    "scopes": ["images:read", "images:write", "ai:use"],
    "plan": "standard"
  }'

Réponse (Importante) :

{
  "id": "uuid-...",
  "api_key": "cle_generee_en_clair_une_seule_fois",
  "name": "Application Mobile",
  ...
}

Caution

La clé API n'est affichée qu'une seule fois à la création. Stockez-la immédiatement de manière sécurisée.

Régénérer une clé (Rotation)

En cas de compromission, invalidez l'ancienne clé et générez-en une nouvelle :

curl -X POST http://localhost:8000/auth/clients/{id}/rotate-key \
  -H "Authorization: Bearer CLE_ADMIN"

📁 Multi-tenancy et Isolation

L'API est multi-tenant. Cela signifie que :

  • Vous ne voyez que les images uploadées avec votre clé.
  • Les IDs d'images sont globaux, mais si vous tentez d'accéder à l'ID d'un autre client, vous recevrez une erreur 404 Not Found.
  • Vos fichiers physiques sont stockés dans un sous-répertoire dédié sur le serveur (/data/uploads/{votre_client_id}/).

📖 Référence des Endpoints

📸 Gestion des Images

Lister les images

GET /images

  • Scope required : images:read
  • Query Params :
    • page : Numéro de page (défaut: 1)
    • page_size : Taille de page (défaut: 20, max: 100)
    • tag : Filtrer par tag AI
    • status : Filtrer par statut (pending, processing, done, error)
    • search : Recherche textuelle dans le nom, la description AI ou l'OCR.

Uploader une image

POST /images/upload

  • Scope required : images:write
  • Body : multipart/form-data
    • file : Le fichier image (JPEG, PNG, WebP, etc.)
  • Note : Lance automatiquement le pipeline AI en arrière-plan.

Détail complet d'une image

GET /images/{id}

  • Scope required : images:read
  • Description : Retourne toutes les données (Source, EXIF, OCR, AI).

Statut du traitement

GET /images/{id}/status

  • Scope required : images:read
  • Description : Pour savoir si l'analyse par l'IA est terminée.

Métadonnées spécifiques

  • GET /images/{id}/exif : Données techniques de l'appareil et GPS.
  • GET /images/{id}/ocr : Texte extrait de l'image.
  • GET /images/{id}/ai : Description textuelle et tags générés.

Retraitement

POST /images/{id}/reprocess

  • Scope required : images:write
  • Description : Réinitialise et relance le pipeline d'analyse AI.

Suppression

DELETE /images/{id}

  • Scope required : images:delete
  • Description : Supprime l'entrée en base et les fichiers sur le disque.

Tags globaux

GET /images/tags/all

  • Scope required : images:read
  • Description : Liste tous les tags uniques utilisés par le client.

🤖 Intelligence Artificielle

Résumé d'URL

POST /ai/summarize

  • Scope required : ai:use
  • Body (JSON) :
    {
      "url": "https://...",
      "language": "français"
    }
    

Rédaction de tâche

POST /ai/draft-task

  • Scope required : ai:use
  • Body (JSON) :
    {
      "description": "Texte libre décrivant la tâche",
      "context": "Contexte optionnel",
      "language": "fr"
    }
    

🔑 Administration (Admin uniquement)

Nécessite le scope admin.

  • POST /auth/clients : Créer un client (retourne la clé).
  • GET /auth/clients : Lister tous les clients.
  • GET /auth/clients/{id} : Voir les détails d'un client.
  • PATCH /auth/clients/{id} : Modifier un client (nom, scopes, plan).
  • POST /auth/clients/{id}/rotate-key : Changer la clé API.
  • DELETE /auth/clients/{id} : Désactiver un client (suspension d'accès).

🏥 Santé et Status

Ces endpoints sont publics et ne nécessitent aucune clé API.

  • GET / : Informations de base sur l'application (Version, Status).
  • GET /health : Vérification complète de l'état (AI configurée, OCR actif, Modèle utilisé).

🚀 Exemples Rapides

Lister mes images (Python / httpx)

import httpx

headers = {"Authorization": "Bearer ma_super_cle"}
r = httpx.get("http://localhost:8000/images", headers=headers)

for img in r.json()["items"]:
    print(f"ID: {img['id']} | Name: {img['original_name']}")

Uploader une image (Node.js / Axios)

const axios = require('axios');
const fs = require('fs');
const FormData = require('form-data');

const form = new FormData();
form.append('file', fs.createReadStream('vacances.jpg'));

axios.post('http://localhost:8000/images/upload', form, {
    headers: {
        ...form.getHeaders(),
        'Authorization': 'Bearer ma_super_cle'
    }
}).then(console.log);