---
title: Déclencheur d'API
description: Démarrez un flux de travail à partir d'une requête HTTP authentifiée
---

import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'

## Aperçu

Le déclencheur d'API expose votre flux de travail en tant que point de terminaison HTTP sécurisé. Envoyez des données JSON au point de terminaison et votre flux de travail les traite immédiatement. Les appels API s'exécutent toujours sur votre dernier déploiement.

## Configurer le format d'entrée

<div className='flex justify-center my-6'>
  <Image
    src='/static/triggers/api-trigger-light.png'
    alt="Format d'entrée du déclencheur d'API"
    width={400}
    height={250}
    className='rounded-xl border border-border shadow-sm'
  />
</div>

Ajoutez un champ **Format d'entrée** pour chaque paramètre. Les clés de sortie d'exécution reflètent le schéma et sont également disponibles sous `<api.input>`.

Les exécutions manuelles dans l'éditeur utilisent la colonne `value` pour que vous puissiez tester sans envoyer de requête. Pendant l'exécution, le résolveur remplit à la fois `<api.userId>` et `<api.input.userId>`.

## Exemple de requête

```bash
curl -X POST \
  https://sim.ai/api/workflows/WORKFLOW_ID/execute \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: YOUR_KEY' \
  -d '{"userId":"demo-user","maxTokens":1024}'
```

Les réponses réussies renvoient le résultat d'exécution sérialisé de l'exécuteur. Les erreurs révèlent des problèmes de validation, d'authentification ou d'échec du workflow.

## Réponses en streaming

Activez le streaming en temps réel pour recevoir les résultats du workflow au fur et à mesure qu'ils sont générés, caractère par caractère. Cela est utile pour afficher progressivement les réponses de l'IA aux utilisateurs.

### Paramètres de requête

Ajoutez ces paramètres pour activer le streaming :

- `stream` - Définissez à `true` pour activer le streaming Server-Sent Events (SSE)
- `selectedOutputs` - Tableau des sorties de blocs à diffuser en streaming (par exemple, `["agent1.content"]`)

### Format de sortie de bloc

Utilisez le format `blockName.attribute` pour spécifier quelles sorties de blocs diffuser en streaming :
- Format : `"blockName.attribute"` (par exemple, si vous souhaitez diffuser en streaming le contenu du bloc Agent 1, vous utiliseriez `"agent1.content"`)
- Les noms de blocs ne sont pas sensibles à la casse et les espaces sont ignorés

### Exemple de requête

```bash
curl -X POST \
  https://sim.ai/api/workflows/WORKFLOW_ID/execute \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: YOUR_KEY' \
  -d '{
    "message": "Count to five",
    "stream": true,
    "selectedOutputs": ["agent1.content"]
  }'
```

### Format de réponse

Les réponses en streaming utilisent le format Server-Sent Events (SSE) :

```
data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":"One"}

data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", two"}

data: {"blockId":"7b7735b9-19e5-4bd6-818b-46aae2596e9f","chunk":", three"}

data: {"event":"done","success":true,"output":{},"metadata":{"duration":610}}

data: [DONE]
```

Chaque événement comprend :
- **Fragments en streaming** : `{"blockId": "...", "chunk": "text"}` - Texte en temps réel au fur et à mesure qu'il est généré
- **Événement final** : `{"event": "done", ...}` - Métadonnées d'exécution et résultats complets
- **Terminateur** : `[DONE]` - Signale la fin du flux

### Streaming de plusieurs blocs

Lorsque `selectedOutputs` inclut plusieurs blocs, chaque fragment indique quel bloc l'a produit :

```bash
curl -X POST \
  https://sim.ai/api/workflows/WORKFLOW_ID/execute \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: YOUR_KEY' \
  -d '{
    "message": "Process this request",
    "stream": true,
    "selectedOutputs": ["agent1.content", "agent2.content"]
  }'
```

Le champ `blockId` dans chaque fragment vous permet d'acheminer la sortie vers l'élément d'interface utilisateur approprié :

```
data: {"blockId":"agent1-uuid","chunk":"Processing..."}

data: {"blockId":"agent2-uuid","chunk":"Analyzing..."}

data: {"blockId":"agent1-uuid","chunk":" complete"}
```

## Référence des sorties

| Référence | Description |
|-----------|-------------|
| `<api.field>` | Champ défini dans le format d'entrée |
| `<api.input>` | Corps de requête structuré complet |

Si aucun format d'entrée n'est défini, l'exécuteur expose uniquement le JSON brut à `<api.input>`.

<Callout type="warning">
Un workflow ne peut contenir qu'un seul déclencheur API. Publiez un nouveau déploiement après les modifications pour que le point de terminaison reste à jour.
</Callout>

### Format de téléchargement de fichiers

L'API accepte les fichiers dans deux formats :

**1. Fichiers encodés en Base64** (recommandé pour les SDK) :

```json
{
  "documents": [{
    "type": "file",
    "data": "data:application/pdf;base64,JVBERi0xLjQK...",
    "name": "document.pdf",
    "mime": "application/pdf"
  }]
}
```

- Taille maximale de fichier : 20 Mo par fichier
- Les fichiers sont téléchargés vers le stockage cloud et convertis en objets UserFile avec toutes les propriétés

**2. Références URL directes** :

```json
{
  "documents": [{
    "type": "url",
    "data": "https://example.com/document.pdf",
    "name": "document.pdf",
    "mime": "application/pdf"
  }]
}
```

- Le fichier n'est pas téléchargé, l'URL est transmise directement
- Utile pour référencer des fichiers existants

### Propriétés des fichiers

Pour les fichiers, accédez à toutes les propriétés :

| Propriété | Description | Type |
|----------|-------------|------|
| `<api.fieldName[0].url>` | URL de téléchargement signée | chaîne |
| `<api.fieldName[0].name>` | Nom de fichier original | chaîne |
| `<api.fieldName[0].size>` | Taille du fichier en octets | nombre |
| `<api.fieldName[0].type>` | Type MIME | chaîne |
| `<api.fieldName[0].uploadedAt>` | Horodatage du téléchargement (ISO 8601) | chaîne |
| `<api.fieldName[0].expiresAt>` | Horodatage d'expiration de l'URL (ISO 8601) | chaîne |

Pour les fichiers référencés par URL, les mêmes propriétés sont disponibles à l'exception de `uploadedAt` et `expiresAt` puisque le fichier n'est pas téléchargé vers notre stockage.

Si aucun format d'entrée n'est défini, l'exécuteur expose uniquement le JSON brut à `<api.input>`.

<Callout type="warning">
Un flux de travail ne peut contenir qu'un seul déclencheur API. Publiez un nouveau déploiement après les modifications pour que le point de terminaison reste à jour.
</Callout>
