🚀DĂ©marrer avec les API OUPI

Introduction

Les API OUPI sont des interfaces RESTful qui vous permettent d'intégrer la puissance de la plateforme multi-AI OUPI dans vos applications. Avec un accÚs unifié à GPT, Claude, Mistral et d'autres modÚles d'IA, vous pouvez créer des applications intelligentes hébergées en Europe et conformes au RGPD.


🎯 Qu'est-ce que l'API OUPI ?

Caractéristiques principales

AccĂšs multi-modĂšles IA

Fonctionnalités complÚtes

Souveraineté des données


🔧 Configuration de base

URL de base

https://app.oupi.com/api

Toutes les requĂȘtes API commencent par cette URL.


Authentification

L'API utilise OAuth2 (Laravel Passport) pour l'authentification.

Format de l'en-tĂȘte :

Authorization: Bearer {votre_token}

Exemple de requĂȘte complĂšte :

GET https://app.oupi.com/api/auth/profile
Authorization: Bearer oupi_abc123xyz456
Content-Type: application/json

Format des réponses

Toutes les réponses sont en JSON.

Codes de statut HTTP :

Exemple de réponse réussie :

{
  "status": "success",
  "data": {
    "id": 123,
    "name": "Jean Dupont",
    "email": "[email protected]"
  }
}

Exemple de réponse d'erreur :

{
  "status": "error",
  "message": "Plus de crédits disponibles",
  "errors": ["Votre solde de crédits est insuffisant"]
}

🔑 Obtenir votre token API

Étape 1 : PrĂ©requis

Avant de commencer, assurez-vous d'avoir :


Étape 2 : AccĂ©der aux paramĂštres API

Via l'interface web :

  1. Connectez-vous Ă  app.oupi.com

  2. Cliquez sur votre profil (coin supérieur droit)

  3. Sélectionnez "ParamÚtres" ou "Settings"

  4. Naviguez vers la section "API" ou "Développeurs"


Étape 3 : GĂ©nĂ©rer un token

Dans la section API :

  1. Cliquez sur "Générer un nouveau token" ou "Create New Token"

  2. Donnez un nom Ă  votre token (ex: "Production API", "App Mobile")

  3. Cliquez sur "Générer" ou "Generate"

  4. Votre token apparaĂźt :

    oupi_abc123def456ghi789jkl012mno345pqr678stu901vwx234yz
    
  5. ⚠ CRITIQUE : Copiez immĂ©diatement le token !


Étape 4 : SĂ©curiser votre token

🔒 RĂšgles de sĂ©curitĂ© essentielles :

❌ NE JAMAIS :

✅ TOUJOURS :

Configuration recommandée (.env) :

# .env
OUPI_API_TOKEN=votre_token_ici
OUPI_API_URL=https://app.oupi.com/api

Fichier .gitignore :

.env
.env.local
*.env
node_modules/

🎓 Votre premiĂšre requĂȘte

Test simple : Récupérer votre profil

Endpoint :

GET /api/auth/profile

Description : RécupÚre les informations de votre profil pour vérifier que l'authentification fonctionne.


Exemple avec cURL

curl -X GET https://app.oupi.com/api/auth/profile \
  -H "Authorization: Bearer VOTRE_TOKEN" \
  -H "Content-Type: application/json"

Réponse attendue :

{
  "id": 123,
  "name": "Jean Dupont",
  "email": "[email protected]",
  "country": "FR",
  "remaining_credits": 5000,
  "plan": "Pro"
}

Exemple JavaScript/Node.js

const fetch = require('node-fetch');

const API_TOKEN = process.env.OUPI_API_TOKEN;
const BASE_URL = 'https://app.oupi.com/api';

async function getProfile() {
  const response = await fetch(`${BASE_URL}/auth/profile`, {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${API_TOKEN}`,
      'Content-Type': 'application/json'
    }
  });

  if (!response.ok) {
    throw new Error(`Erreur HTTP: ${response.status}`);
  }

  const data = await response.json();
  console.log('Profil utilisateur:', data);
  return data;
}

getProfile()
  .then(profile => console.log('✅ Authentification rĂ©ussie!'))
  .catch(error => console.error('❌ Erreur:', error));

Exemple Python

import os
import requests

API_TOKEN = os.getenv('OUPI_API_TOKEN')
BASE_URL = 'https://app.oupi.com/api'

def get_profile():
    headers = {
        'Authorization': f'Bearer {API_TOKEN}',
        'Content-Type': 'application/json'
    }
    
    response = requests.get(f'{BASE_URL}/auth/profile', headers=headers)
    response.raise_for_status()
    
    data = response.json()
    print('Profil utilisateur:', data)
    return data

if __name__ == '__main__':
    try:
        profile = get_profile()
        print('✅ Authentification rĂ©ussie!')
    except Exception as error:
        print(f'❌ Erreur: {error}')

Exemple PHP

<?php
$apiToken = getenv('OUPI_API_TOKEN');
$baseUrl = 'https://app.oupi.com/api';

function getProfile($baseUrl, $apiToken) {
    $ch = curl_init("$baseUrl/auth/profile");
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer $apiToken",
        "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode !== 200) {
        throw new Exception("Erreur HTTP: $httpCode");
    }
    
    $data = json_decode($response, true);
    echo "Profil utilisateur: " . print_r($data, true);
    return $data;
}

try {
    $profile = getProfile($baseUrl, $apiToken);
    echo "✅ Authentification rĂ©ussie!\n";
} catch (Exception $e) {
    echo "❌ Erreur: " . $e->getMessage() . "\n";
}
?>

📊 VĂ©rifier votre utilisation

Endpoint d'utilisation

GET /api/app/usage-data

Description : RécupÚre vos données d'utilisation, crédits restants et détails de votre plan.

Exemple :

async function checkUsage() {
  const response = await fetch(`${BASE_URL}/app/usage-data`, {
    headers: {
      'Authorization': `Bearer ${API_TOKEN}`,
      'Content-Type': 'application/json'
    }
  });

  const usage = await response.json();
  
  console.log('Crédits restants:', usage.remaining_credits);
  console.log('Plan actuel:', usage.plan_name);
  console.log('Crédits utilisés ce mois:', usage.monthly_usage);
  
  return usage;
}

Réponse type :

{
  "plan_name": "Pro",
  "remaining_credits": 4850,
  "monthly_usage": 1150,
  "total_credits": 6000,
  "reset_date": "2025-01-01"
}

đŸ—ïž Architecture recommandĂ©e

Protection de votre token

đŸ›Ąïž Architecture Backend-Frontend sĂ©curisĂ©e :

┌─────────────────┐
│   Frontend      │  (React, Vue, Angular)
│  (Navigateur)   │
└────────┬────────┘
         │ HTTPS
         ↓
┌─────────────────┐
│  Votre Backend  │  (Node.js, Python, PHP)
│  (Serveur)      │  ← Token API stockĂ© ici
└────────┬────────┘
         │ API Token
         ↓
┌─────────────────┐
│   API OUPI      │  (app.oupi.com/api)
└─────────────────┘

Pourquoi cette architecture ?

Exemple d'implémentation :

Backend (Node.js/Express) :

// server.js
const express = require('express');
const app = express();

// Votre endpoint qui appelle OUPI
app.post('/api/generate-content', async (req, res) => {
  try {
    // Appel Ă  l'API OUPI depuis le backend
    const response = await fetch('https://app.oupi.com/api/aiwriter/generate', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.OUPI_API_TOKEN}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(req.body)
    });
    
    const data = await response.json();
    res.json(data);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

app.listen(3000);

Frontend (React) :

// App.js
async function generateContent(params) {
  // Appel Ă  VOTRE backend (pas directement Ă  OUPI)
  const response = await fetch('https://votreapp.com/api/generate-content', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(params)
  });
  
  return await response.json();
}

⚠ Gestion des erreurs

Gérer l'erreur "Plus de crédits" (419)

Code de gestion robuste :

async function callOupiAPI(endpoint, options) {
  try {
    const response = await fetch(`${BASE_URL}${endpoint}`, {
      ...options,
      headers: {
        'Authorization': `Bearer ${API_TOKEN}`,
        'Content-Type': 'application/json',
        ...options.headers
      }
    });

    // Gérer les différents codes d'erreur
    if (response.status === 419) {
      const error = await response.json();
      console.error('❌ Plus de crĂ©dits:', error.errors);
      return {
        error: 'no_credits',
        message: error.errors[0],
        redirectTo: 'https://app.oupi.com/pricing' // Rediriger vers upgrade
      };
    }

    if (response.status === 401) {
      throw new Error('Token invalide ou expiré');
    }

    if (!response.ok) {
      const error = await response.json();
      throw new Error(`Erreur ${response.status}: ${error.message || error.errors}`);
    }

    return await response.json();
  } catch (error) {
    console.error('Erreur API OUPI:', error);
    throw error;
  }
}

Retry avec backoff exponentiel

Pour les erreurs temporaires (500, timeout) :

async function callWithRetry(endpoint, options, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      const response = await callOupiAPI(endpoint, options);
      
      // Ne pas retry pour ces erreurs
      if (response.error === 'no_credits' || response.status === 401) {
        return response;
      }
      
      return response;
    } catch (error) {
      if (i === maxRetries - 1) throw error;
      
      // Attendre avant de réessayer (backoff exponentiel)
      const waitTime = 1000 * Math.pow(2, i); // 1s, 2s, 4s...
      console.log(`Retry ${i + 1}/${maxRetries} dans ${waitTime}ms...`);
      await new Promise(resolve => setTimeout(resolve, waitTime));
    }
  }
}

📚 FonctionnalitĂ©s disponibles

Vue d'ensemble des endpoints

Chat AI (Conversations)

AI Writer (Génération de contenu)

Génération d'images

Gestion des documents

Brand Voice

Abonnements et paiements


✅ Checklist de dĂ©marrage

Avant de passer Ă  la production :


🚀 Prochaines Ă©tapes

Maintenant que vous avez les bases, explorez nos guides détaillés :

  1. Guide Chat AI : Créer des conversations intelligentes

  2. Guide AI Writer : Générer du contenu avec les templates

  3. Guide Images AI : Créer des visuels avec DALL-E

  4. Guide Documents : Gérer vos contenus générés

  5. Guide avancé : Optimisation et production


Bienvenue dans l'Ă©cosystĂšme API OUPI ! 🎉


DerniÚre mise à jour : Décembre 2024
Guide de démarrage - API OUPI v1.0