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

# Exemples d'utilisation

> Exemples de code et cas d'utilisation courants pour l'API Devin

Cette page présente des exemples de code pour les cas d'utilisation courants de l'API Devin. Tous les exemples utilisent des variables d'environnement pour les identifiants — définissez-les une fois et tous les exemples sont prêts à être copiés-collés. Pour les schémas complets de requête/réponse, consultez la page de référence de l'API de chaque endpoint.

<div id="setup">
  ## Configuration
</div>

Avant d'exécuter les exemples, définissez les variables d'environnement suivantes :

```bash theme={null}
# Obligatoire : votre API key de l'utilisateur de service (commence par cog_)
export DEVIN_API_KEY="cog_your_key_here"

# Obligatoire : l'identifiant de votre organisation (disponible dans Paramètres → Utilisateurs de service)
export DEVIN_ORG_ID="your_org_id"
```

<Tip>
  Trouvez l’identifiant de votre organisation sur la page **Paramètres → Utilisateurs de service**.
</Tip>

<div id="curl-examples">
  ## Exemples d'utilisation de curl
</div>

Ces exemples fonctionnent directement dans votre terminal après avoir défini les variables d'environnement ci-dessus.

<AccordionGroup>
  <Accordion title="Créer une session">
    ```bash theme={null}
    curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
      -H "Authorization: Bearer $DEVIN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"prompt": "Create a Python script that analyzes CSV data"}'
    ```
  </Accordion>

  <Accordion title="Lister les sessions">
    ```bash theme={null}
    curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
      -H "Authorization: Bearer $DEVIN_API_KEY"
    ```
  </Accordion>

  <Accordion title="Envoyer un message à une session">
    ```bash theme={null}
    export SESSION_ID="your_session_id"

    curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/$SESSION_ID/messages" \
      -H "Authorization: Bearer $DEVIN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"message": "Please also add unit tests"}'
    ```
  </Accordion>

  <Accordion title="Créer une note dans Knowledge">
    ```bash theme={null}
    curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes" \
      -H "Authorization: Bearer $DEVIN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Coding standards",
        "trigger": "When writing code in this repo",
        "body": "Use TypeScript strict mode. Follow the existing code style."
      }'
    ```
  </Accordion>

  <Accordion title="Lister les organisations Enterprise">
    ```bash theme={null}
    curl "https://api.devin.ai/v3/enterprise/organizations" \
      -H "Authorization: Bearer $DEVIN_API_KEY"
    ```
  </Accordion>

  <Accordion title="Récupérer les données de consommation">
    ```bash theme={null}
    # Utilise des timestamps Unix — exemple : du 1er janvier au 31 janvier 2025
    curl "https://api.devin.ai/v3/enterprise/consumption/daily?time_after=1735689600&time_before=1738368000" \
      -H "Authorization: Bearer $DEVIN_API_KEY"
    ```
  </Accordion>
</AccordionGroup>

<div id="python-examples">
  ## Exemples en Python
</div>

<AccordionGroup>
  <Accordion title="Créer une session">
    ```python theme={null}
    import os
    import requests

    API_KEY = os.environ["DEVIN_API_KEY"]
    ORG_ID = os.environ["DEVIN_ORG_ID"]
    BASE_URL = "https://api.devin.ai/v3"

    response = requests.post(
        f"{BASE_URL}/organizations/{ORG_ID}/sessions",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        },
        json={
            "prompt": "Create a Python script that analyzes CSV data"
        }
    )
    response.raise_for_status()

    session = response.json()
    print(f"Session created: {session['session_id']}")
    print(f"URL: {session['url']}")
    ```
  </Accordion>

  <Accordion title="Sonder l’état de la session">
    ```python theme={null}
    import os
    import time
    import requests

    API_KEY = os.environ["DEVIN_API_KEY"]
    ORG_ID = os.environ["DEVIN_ORG_ID"]
    BASE_URL = "https://api.devin.ai/v3"
    SESSION_ID = os.environ.get("SESSION_ID", "your_session_id")

    while True:
        response = requests.get(
            f"{BASE_URL}/organizations/{ORG_ID}/sessions/{SESSION_ID}",
            headers={"Authorization": f"Bearer {API_KEY}"}
        )
        response.raise_for_status()
        session = response.json()

        status = session["status"]
        print(f"Status: {status}")

        # Statuts finaux : "exit" (terminé), "error", "suspended"
        if status in ("exit", "error", "suspended"):
            break

        time.sleep(10)
    ```
  </Accordion>

  <Accordion title="Flux de travail multi‑organisation (Enterprise)">
    Automatisez à l’échelle de plusieurs organisations :

    ```python theme={null}
    import os
    import requests

    API_KEY = os.environ["DEVIN_API_KEY"]
    BASE_URL = "https://api.devin.ai/v3"

    # Récupérer toutes les organisations
    orgs_response = requests.get(
        f"{BASE_URL}/enterprise/organizations",
        headers={"Authorization": f"Bearer {API_KEY}"}
    )
    orgs_response.raise_for_status()
    organizations = orgs_response.json()["items"]

    # Créer une session dans chaque organisation
    for org in organizations:
        session_response = requests.post(
            f"{BASE_URL}/organizations/{org['org_id']}/sessions",
            headers={
                "Authorization": f"Bearer {API_KEY}",
                "Content-Type": "application/json"
            },
            json={
                "prompt": f"Run daily health check for {org['name']}"
            }
        )

        if session_response.ok:
            session = session_response.json()
            print(f"Created session for {org['name']}: {session['session_id']}")
        else:
            print(f"Failed for {org['name']}: {session_response.status_code}")
    ```
  </Accordion>

  <Accordion title="Récupération paginée du journal d’audit (offre Enterprise)">
    ```python theme={null}
    import os
    import requests
    from datetime import datetime, timedelta, timezone

    API_KEY = os.environ["DEVIN_API_KEY"]
    BASE_URL = "https://api.devin.ai/v3"

    # Les 7 derniers jours en horodatages Unix
    now = datetime.now(timezone.utc)
    seven_days_ago = now - timedelta(days=7)

    params = {
        "time_after": int(seven_days_ago.timestamp()),
        "time_before": int(now.timestamp()),
        "first": 100,
    }

    all_logs = []
    while True:
        response = requests.get(
            f"{BASE_URL}/enterprise/audit-logs",
            headers={"Authorization": f"Bearer {API_KEY}"},
            params=params,
        )
        response.raise_for_status()
        data = response.json()

        all_logs.extend(data["items"])
        print(f"Fetched {len(data['items'])} logs (total: {len(all_logs)})")

        if not data.get("has_next_page"):
            break
        params["after"] = data["end_cursor"]

    for log in all_logs:
        ts = datetime.fromtimestamp(log["created_at"], tz=timezone.utc).isoformat()
        actor = log.get("service_user_id") or log.get("user_id") or "system"
        print(f"{ts} - {log['action']} (actor={actor})")
    ```
  </Accordion>

  <Accordion title="Gestion des erreurs">
    ```python theme={null}
    import os
    import requests

    API_KEY = os.environ["DEVIN_API_KEY"]
    ORG_ID = os.environ["DEVIN_ORG_ID"]
    BASE_URL = "https://api.devin.ai/v3"

    try:
        response = requests.get(
            f"{BASE_URL}/organizations/{ORG_ID}/sessions",
            headers={"Authorization": f"Bearer {API_KEY}"}
        )
        response.raise_for_status()
        data = response.json()
    except requests.exceptions.HTTPError as e:
        if e.response.status_code == 401:
            print("Invalid or expired API key")
        elif e.response.status_code == 403:
            print("Service user lacks required permission")
        elif e.response.status_code == 429:
            print("Rate limit exceeded — wait and retry")
        else:
            print(f"API error: {e.response.status_code} {e.response.text}")
    ```
  </Accordion>
</AccordionGroup>

<div id="support">
  ## Support
</div>

<Card title="Besoin d'aide ?">
  Pour toute question relative à l'API ou pour signaler un problème, écrivez à [support@cognition.ai](mailto:support@cognition.ai)
</Card>
