> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quivr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API personnalisée

> Connectez vos propres APIs et systèmes internes

export const WorkflowExample = ({title, whenToUse, steps = []}) => {
  const parseToolMentions = text => {
    if (!text) return text;
    const parts = text.split(/(@[\w-]+)/g);
    return parts.map((part, i) => {
      if (part.startsWith("@")) {
        const toolName = part.slice(1);
        return <span key={i} className="text-blue-500 dark:text-blue-400 font-semibold bg-blue-50 dark:bg-blue-950/50 px-1.5 py-0.5 rounded text-[0.9em] whitespace-nowrap">
            @{toolName}
          </span>;
      }
      return part;
    });
  };
  return <div className="my-6 border-2 border-dashed border-zinc-300 dark:border-zinc-600 rounded-xl p-6">
      {}
      <h3 className="text-xl font-semibold text-zinc-900 dark:text-zinc-100 m-0 mb-5">
        {title}
      </h3>

      {}
      <div className="mb-6">
        <span className="text-sm font-medium text-zinc-500 dark:text-zinc-400 block mb-2">
          When to use
        </span>
        <div className="border border-zinc-200 dark:border-zinc-700 rounded-lg p-4 bg-zinc-50/50 dark:bg-zinc-800/30">
          <p className="m-0 text-zinc-700 dark:text-zinc-300 leading-relaxed">
            {whenToUse}
          </p>
        </div>
      </div>

      {}
      <div>
        <span className="text-sm font-semibold text-zinc-900 dark:text-zinc-100 block mb-4">
          Steps
        </span>
        <div className="flex flex-col gap-4">
          {steps && steps.map((step, index) => <div key={index} className="flex gap-3 items-start">
              <span className="flex items-center gap-1.5 flex-shrink-0 pt-0.5">
                <span className="text-blue-500 dark:text-blue-400 font-medium text-sm tabular-nums">
                  {index + 1}.
                </span>
              </span>
              <span className="text-zinc-700 dark:text-zinc-300 leading-relaxed">
                {parseToolMentions(step)}
              </span>
            </div>)}
        </div>
      </div>
    </div>;
};

Créez des outils sur mesure pour connecter Quivr à n'importe quelle API.

## Qu'est-ce qu'un outil personnalisé ?

Un outil personnalisé permet d'appeler **votre propre API** depuis vos workflows. Vous pouvez ainsi :

* Récupérer des données depuis votre CRM ou ERP
* Vérifier des informations dans votre base clients
* Déclencher des actions dans vos systèmes internes
* Intégrer des services tiers non supportés nativement

**Exemple :** Vous avez une API interne qui retourne le solde de fidélité d'un client. Créez un outil `@get_loyalty_points` et utilisez-le dans vos workflows.

## Types d'authentification

Quivr supporte tous les types d'authentification courants :

<Tabs>
  <Tab title="OAuth2">
    Pour les APIs utilisant OAuth2 (Google, Salesforce, HubSpot...).

    **Informations nécessaires :**

    * Client ID
    * Client Secret
    * URL d'autorisation
    * Scopes requis
  </Tab>

  <Tab title="API Key">
    Pour les APIs avec clé d'authentification.

    **Informations nécessaires :**

    * Clé API
    * Nom du header (ex: `X-API-Key`, `Authorization`)
  </Tab>

  <Tab title="Bearer Token">
    Pour les APIs avec token fixe.

    **Informations nécessaires :**

    * Token d'accès
  </Tab>

  <Tab title="Basic Auth">
    Pour les APIs avec identifiants.

    **Informations nécessaires :**

    * Nom d'utilisateur
    * Mot de passe
  </Tab>

  <Tab title="Sans authentification">
    Pour les APIs publiques.

    Aucune information nécessaire.
  </Tab>
</Tabs>

## Créer un outil personnalisé

<Steps>
  <Step title="Préparez votre API">
    Assurez-vous que votre API :

    * Est accessible depuis Internet (ou via VPN si configuré)
    * Retourne des données en JSON
    * A une documentation des endpoints
  </Step>

  <Step title="Contactez notre équipe">
    Envoyez à **[support@quivr.app](mailto:support@quivr.app)** :

    * La documentation de votre API
    * Le type d'authentification
    * Les endpoints à exposer
    * Les cas d'usage prévus
  </Step>

  <Step title="Configuration par notre équipe">
    Nous configurons l'outil avec :

    * L'authentification sécurisée
    * Les paramètres d'entrée
    * Le format de sortie
  </Step>

  <Step title="Utilisez dans vos workflows">
    L'outil apparaît dans la liste avec `@` et est prêt à l'emploi.
  </Step>
</Steps>

## Exemple : Intégration PipeDream

PipeDream permet de créer des APIs rapidement. Voici comment l'intégrer à Quivr.

**Cas d'usage :** Récupérer le profil complet d'un client depuis plusieurs sources.

**1. Créez un workflow PipeDream** qui :

* Reçoit un email en entrée
* Agrège les données de vos différents systèmes
* Retourne un profil client unifié

**2. Demandez l'intégration** avec :

* L'URL de votre workflow PipeDream
* Les paramètres d'entrée (ex: `email`)
* Le format de sortie attendu

**3. Utilisez dans Quivr :**

<WorkflowExample
  title="Utilisation API personnalisee"
  whenToUse="Quand tu as besoin d'informations depuis une API personnalisee"
  steps={[
"Utilise @get_customer_profile avec l'email du client",
"Si le client est VIP (loyalty_tier = 'gold') : Propose une solution premium",
"Si le client a des commandes en cours : Mentionne-les dans ta reponse"
]}
/>

## Bonnes pratiques de sécurité

<Warning>
  Ne partagez jamais vos secrets API directement. Notre équipe les stocke de manière sécurisée.
</Warning>

<AccordionGroup>
  <Accordion title="Principe du moindre privilège" icon="lock">
    Créez des tokens avec uniquement les permissions nécessaires.

    ✅ Token en lecture seule si le workflow ne fait que consulter

    ❌ Token admin complet "au cas où"
  </Accordion>

  <Accordion title="Rotation des secrets" icon="rotate">
    Changez régulièrement vos clés API et prévenez-nous pour mettre à jour la configuration.
  </Accordion>

  <Accordion title="Logs et monitoring" icon="chart-line">
    Surveillez les appels à vos APIs depuis Quivr pour détecter tout comportement anormal.
  </Accordion>
</AccordionGroup>

## Limitations

* **Timeout** : Les appels API doivent répondre en moins de 30 secondes
* **Format** : Seul le JSON est supporté en entrée/sortie
* **Taille** : Les réponses sont limitées à 1 Mo

## Besoin d'aide ?

<Card title="Contacter le support" icon="headset" href="mailto:support@quivr.app">
  Notre équipe vous accompagne dans la création de vos outils personnalisés
</Card>
