API de génération de contenu par IA avec prise en charge multi-fournisseurs, contexte de marque et appariement sémantique des styles

Génération de contenu par IA avec prise en charge multi-fournisseurs, contexte de marque et appariement sémantique des styles

Version 1.0.0 • Plus de 80 endpoints • PHP 8.1+

URL de base : https://oui-compose:8890

Introduction

L’API Oui Compose est une puissante plateforme de génération de contenu avec prise en charge de plusieurs fournisseurs d’IA. Elle propose un système de compétences (skills) modulaire, un moteur de contexte de marque, un appariement sémantique des styles et des capacités de RAG (Retrieval Augmented Generation, génération augmentée par récupération).

Authentification

L’API Compose prend en charge deux méthodes d’authentification :

Limites de débit

Offre Requêtes/min Requêtes/mois Tokens/mois
Starter3010,0001,000,000
Professional60100,0005,000,000
Enterprise3001,000,00050,000,000
IllimitéIllimitéIllimitéIllimité

Génération de contenu

POST /api/generate

Génère du contenu par IA avec des options personnalisables.

Paramètres

ParamètreTypeDescription
user_prompt requis string Le prompt/la demande de contenu
content_type optionnel string social_media, blog_post
brand_id optionnel string Identifiant du contexte de marque
style_id optionnel string Identifiant du style rédactionnel
provider optionnel string anthropic, openai, openrouter
model optionnel string Nom du modèle spécifique
skills optionnel array Compétences (skills) à appliquer : social_media, blog_writer, seo, copywriting, email_marketing, storytelling, newsletter
use_rag optionnel boolean Utiliser la base de connaissances RAG
rag_query optionnel string Requête de recherche RAG (si use_rag=true)
options optionnel object temperature, max_tokens, top_p

Réponse

{
  "success": true,
  "content": {
    "text": "AI is revolutionizing marketing in ways we never imagined...",
    "platform": "linkedin",
    "hashtags": ["#AIMarketing", "#DigitalTransformation"],
    "cta": "What AI tools are you using in your marketing strategy?"
  },
  "metadata": {
    "content_type": "social_media",
    "provider": "anthropic",
    "model": "claude-3-sonnet-20240229",
    "skills_used": ["social_media", "copywriting"],
    "response_time_ms": 2340,
    "tokens_used": {
      "input": 150,
      "output": 280,
      "total": 430
    }
  },
  "_meta": {
    "response_time_ms": 2345,
    "version": "1.0.0"
  }
}

POST /api/generate/batch

Génère plusieurs contenus en une seule requête.

Réponse

{
  "success": true,
  "count": 2,
  "results": [
    { "success": true, "content": {...} },
    { "success": true, "content": {...} }
  ],
  "summary": {
    "successful": 2,
    "failed": 0
  }
}

GET /api/content-types

Liste tous les types de contenu disponibles et leur configuration.

Réponse

{
  "content_types": {
    "social_media": {
      "name": "social_media",
      "display_name": "Social Media Post",
      "description": "Platform-specific social media content",
      "required_fields": ["user_prompt"],
      "optional_fields": ["platform", "hashtags", "tone"],
      "defaults": {
        "max_tokens": 280
      }
    },
    "blog_post": {
      "name": "blog_post",
      "display_name": "Blog Post",
      "description": "Long-form blog article content",
      "required_fields": ["user_prompt"],
      "optional_fields": ["title", "sections", "seo_keywords"],
      "defaults": {
        "max_tokens": 2000
      }
    }
  }
}

Gestion des marques

GET /api/brands/{brandId}

Récupère le contexte et les réglages d’une marque.

Réponse

{
  "brand_name": "Acme Corporation",
  "industry": "Technology",
  "target_audience": "B2B SaaS decision makers",
  "products": ["Product A", "Product B"],
  "voice": {
    "tone": "Professional yet approachable",
    "vocabulary": ["innovation", "efficiency", "growth"],
    "personality_traits": ["trustworthy", "expert", "friendly"]
  },
  "metadata": {
    "website": "https://acme.com",
    "social_handles": {
      "twitter": "@acme",
      "linkedin": "acme-corporation"
    }
  }
}

PUT /api/brands/{brandId}

Met à jour le contexte de marque.

Corps de la requête

{
  "brand_name": "Acme Corporation",
  "industry": "Technology",
  "target_audience": "Enterprise software buyers",
  "products": ["Product A", "Product B", "Product C"],
  "voice": {
    "tone": "Professional and authoritative",
    "vocabulary": ["enterprise", "scalable", "secure"],
    "personality_traits": ["innovative", "reliable"]
  }
}

POST /api/brands/{brandId}/analyze-style

Analyse des échantillons de texte pour en extraire, grâce à l’IA, la voix de marque et les schémas de style.

Corps de la requête

{
  "samples": [
    "First sample of brand content to analyze...",
    "Second sample of brand content...",
    "Third sample text showing brand voice..."
  ]
}

Réponse

{
  "success": true,
  "analysis": {
    "tone": "Professional with friendly undertones",
    "vocabulary_level": "Advanced but accessible",
    "common_phrases": ["drive results", "empower teams", "innovative solutions"],
    "sentence_structure": "Mix of short impactful sentences and detailed explanations",
    "key_patterns": {
      "opening_style": "Question or bold statement",
      "closing_style": "Call to action",
      "transition_words": ["moreover", "consequently", "indeed"]
    }
  },
  "style_id": "style_abc123"
}

Stratégie de contenu

GET /api/brands/{brandId}/strategy

Récupère la stratégie de contenu d’une marque.

Réponse

{
  "brand_id": "acme-corp",
  "content_pillars": [
    {
      "name": "Thought Leadership",
      "description": "Industry insights and trends",
      "weight": 0.3,
      "themes": ["AI trends", "Future of work", "Digital transformation"]
    },
    {
      "name": "Product Education",
      "description": "How-to guides and tutorials",
      "weight": 0.4,
      "themes": ["Feature highlights", "Use cases", "Best practices"]
    },
    {
      "name": "Company Culture",
      "description": "Behind the scenes and team stories",
      "weight": 0.3,
      "themes": ["Team spotlights", "Company values", "Events"]
    }
  ],
  "monthly_themes": {
    "January": "New Year, New Goals",
    "February": "Love Your Data"
  }
}

PUT /api/brands/{brandId}/strategy

Met à jour la stratégie de contenu.

Corps de la requête

{
  "content_pillars": [
    {
      "name": "Thought Leadership",
      "description": "Industry insights",
      "weight": 0.35,
      "themes": ["AI trends", "Innovation"]
    }
  ],
  "monthly_themes": {
    "March": "Spring Cleaning Your Tech Stack"
  }
}

POST /api/brands/{brandId}/schedule

Construit le planning de contenu à partir de la stratégie.

Corps de la requête

{
  "start_date": "2024-02-01",
  "end_date": "2024-02-28",
  "frequency": "daily",
  "content_types": ["social_media", "blog_post"],
  "num_items": 30
}

Réponse

{
  "success": true,
  "schedule": [
    {
      "date": "2024-02-01",
      "content_type": "social_media",
      "theme": "Product Education",
      "suggested_topics": ["New feature announcement", "Tutorial teaser"]
    },
    {
      "date": "2024-02-02",
      "content_type": "blog_post",
      "theme": "Thought Leadership",
      "suggested_topics": ["AI trends in 2024"]
    }
  ]
}

POST /api/brands/{brandId}/calendar

Génère un calendrier de contenu complet, avec génération automatique facultative.

Corps de la requête

{
  "month": 3,
  "year": 2024,
  "auto_generate": false
}

Réponse

{
  "success": true,
  "calendar": {
    "2024-03-01": {
      "content_pieces": [
        {
          "type": "social_media",
          "theme": "Thought Leadership",
          "priority": 1
        }
      ]
    },
    "2024-03-04": {
      "content_pieces": [
        {
          "type": "blog_post",
          "theme": "Product Education",
          "priority": 2
        }
      ]
    }
  }
}

Base de connaissances (RAG)

GET /api/brands/{brandId}/knowledge

Interroge la base de connaissances de la marque par recherche sémantique.

Paramètres

ParamètreTypeDescription
q requis string Requête de recherche
limit optionnel integer Nombre de résultats (par défaut : 5)

Réponse

{
  "success": true,
  "results": [
    {
      "document_id": "doc_123",
      "content": "Relevant content from knowledge base...",
      "metadata": {
        "source": "Product documentation",
        "tags": ["features", "pricing"]
      },
      "relevance_score": 0.92
    }
  ]
}

POST /api/brands/{brandId}/knowledge

Ajoute un document à la base de connaissances avec génération automatique des embeddings.

Corps de la requête

{
  "content": "Your document content to add to the knowledge base...",
  "metadata": {
    "source": "Company blog",
    "tags": ["marketing", "best-practices"],
    "author": "Marketing Team"
  }
}

Réponse

{
  "success": true,
  "document_id": "doc_456"
}

Tableau de bord d’administration

GET /admin/dashboard

Récupère les statistiques générales du tableau de bord.

Réponse

{
  "active_keys": 45,
  "total_requests": 125000,
  "total_tokens": 5800000,
  "unique_users": 32,
  "top_content_types": [
    {"type": "social_media", "count": 45000},
    {"type": "blog_post", "count": 12000}
  ],
  "top_providers": [
    {"provider": "anthropic", "count": 80000},
    {"provider": "openai", "count": 45000}
  ],
  "alerts": 2,
  "system_health": "healthy"
}

Gestion des clés d’API

GET /admin/keys

Liste toutes les clés d’API.

Paramètres

ParamètreTypeDescription
status string active, revoked, expired
limit integer Résultats par page (par défaut : 50)

Réponse

{
  "keys": [
    {
      "key_id": "key_abc123",
      "name": "Production Key",
      "key": "oui_live_xxxx",
      "status": "active",
      "tier": "professional",
      "permissions": ["generate", "brands", "strategy"],
      "created_at": "2024-01-01T00:00:00Z",
      "last_used_at": "2024-01-22T14:00:00Z",
      "expires_at": null
    }
  ],
  "total": 45
}

POST /admin/keys

Crée une nouvelle clé d’API. Remarque : la clé complète n’est affichée qu’une seule fois, à sa création.

Corps de la requête

{
  "name": "New Production Key",
  "tier": "professional",
  "permissions": ["generate", "strategy", "brands", "rag"],
  "brand_ids": ["brand_123"],
  "expires_at": "2025-01-01T00:00:00Z"
}

Réponse

{
  "success": true,
  "key_id": "key_def456",
  "key": "oui_live_abc123def456...",
  "message": "API key created successfully"
}

POST /admin/keys/{keyId}/rotate

Effectue la rotation (régénération) d’une clé d’API. L’ancienne clé est immédiatement invalidée.

Réponse

{
  "success": true,
  "new_key": "oui_live_newkey789...",
  "message": "Key rotated successfully"
}

Analytique

GET /admin/analytics

Récupère les données analytiques par type.

Paramètres

ParamètreTypeDescription
type string usage, content_types, providers, brands, errors, performance
period string 7d, 30d, 90d, 1y (default: 30d)

Supervision

GET /admin/monitoring

Récupère l’état de supervision du système.

Réponse

{
  "status": "healthy",
  "database": "connected",
  "uptime": 864000,
  "active_workers": 4,
  "memory_usage": 256,
  "cpu_usage": 15.5,
  "last_check": "2024-01-22T14:00:00Z"
}

GET /admin/monitoring/health

Contrôle de santé détaillé de tous les services.

Réponse

{
  "status": "healthy",
  "checks": {
    "database": "ok",
    "cache": "ok",
    "providers": {
      "anthropic": "ok",
      "openai": "ok",
      "openrouter": "ok"
    }
  },
  "last_check": "2024-01-22T14:00:00Z"
}

Webhooks

GET /admin/webhooks/events

Liste les événements webhook disponibles.

Réponse

{
  "events": {
    "content.generated": "When content is successfully generated",
    "content.failed": "When content generation fails",
    "batch.completed": "When a batch generation completes",
    "api_key.created": "When a new API key is created",
    "api_key.revoked": "When an API key is revoked",
    "rate_limit.exceeded": "When rate limit is exceeded",
    "brand.updated": "When brand context is updated",
    "schedule.generated": "When a content schedule is generated",
    "document.added": "When a document is added to knowledge base",
    "test": "Test webhook event"
  }
}

POST /admin/webhooks

Créer un nouvel abonnement webhook.

Corps de la requête

{
  "name": "Content Notifications",
  "url": "https://your-app.com/webhooks/compose",
  "events": ["content.generated", "content.failed"],
  "is_active": true,
  "retry_count": 3,
  "timeout_seconds": 30
}

Réponse

{
  "success": true,
  "id": 1,
  "secret": "whsec_abc123...",
  "message": "Webhook created successfully. Save the secret - it will only be shown once."
}

Identifiants des fournisseurs

GET /admin/credentials

Liste tous les identifiants des fournisseurs d’IA (les clés d’API ne sont pas exposées).

Réponse

{
  "credentials": [
    {
      "id": 1,
      "provider": "anthropic",
      "name": "Claude Production",
      "organization_id": null,
      "base_url": null,
      "model_override": null,
      "is_active": true,
      "is_default": true,
      "settings": {},
      "created_at": "2024-01-01T00:00:00Z"
    }
  ]
}

POST /admin/credentials

Ajoute un nouvel identifiant de fournisseur.

Corps de la requête

{
  "provider": "anthropic",
  "name": "Claude Backup",
  "api_key": "sk-ant-api03-...",
  "is_active": true,
  "is_default": false
}

POST /admin/credentials/{credId}/test

Teste la connexion avec l’identifiant d’un fournisseur.

Réponse

{
  "success": true,
  "message": "Connection successful",
  "details": {
    "status": "connected",
    "http_code": 200
  }
}

Jobs et tâches cron

GET /admin/jobs

Liste tous les jobs avec filtrage.

Paramètres

ParamètreTypeDescription
status string pending, processing, completed, failed
type string Filtre par type de job

Réponse

{
  "jobs": [
    {
      "id": "job_abc123",
      "type": "batch_generation",
      "queue": "default",
      "status": "completed",
      "data": {},
      "result": {},
      "attempts": 1,
      "max_attempts": 3,
      "created_at": "2024-01-22T13:00:00Z",
      "completed_at": "2024-01-22T13:05:00Z"
    }
  ],
  "total": 150
}

GET /admin/cron

Liste les tâches cron.

Réponse

{
  "tasks": [
    {
      "id": "cron_123",
      "name": "Daily Analytics Report",
      "handler": "AnalyticsHandler::dailyReport",
      "expression": "0 6 * * *",
      "description": "Generate daily analytics report",
      "is_active": true,
      "last_run_at": "2024-01-22T06:00:00Z",
      "next_run_at": "2024-01-23T06:00:00Z",
      "last_result": "success"
    }
  ]
}

POST /admin/cron/{taskId}/run

Exécute immédiatement une tâche cron.

Réponse

{
  "success": true,
  "job_id": "job_xyz789"
}

Codes d’erreur

CodeStatutDescription
UNAUTHORIZED401Authentification invalide ou manquante
FORBIDDEN403Droits insuffisants
NOT_FOUND404Ressource introuvable
VALIDATION_ERROR400Échec de la validation de la requête
RATE_LIMIT_EXCEEDED429Limite de débit dépassée
PROVIDER_ERROR502Le fournisseur d’IA a renvoyé une erreur
INTERNAL_ERROR500Erreur interne du serveur