> ## 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 de la v1

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

Cette page présente des exemples de code pour les cas d'utilisation courants de l'API v1.

<div id="quick-examples">
  ## Exemples rapides
</div>

<AccordionGroup>
  <Accordion title="Création et suivi des sessions">
    ```python theme={null}
    import os
    import requests
    import time

    DEVIN_API_KEY = os.getenv("DEVIN_API_KEY")

    # Créer une nouvelle session
    response = requests.post(
        "https://api.devin.ai/v1/sessions",
        headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
        json={
            "prompt": "Review PR #249",
            "idempotent": True
        }
    )

    print("Response:\n"+ str(response.json()))
    session_id = response.json()["session_id"]

    # Surveiller l'état de la session
    while True:
        status = requests.get(
            f"https://api.devin.ai/v1/sessions/{session_id}",
            headers={"Authorization": f"Bearer {DEVIN_API_KEY}"}
        ).json()
        print("Status:\n" + str(status))
        if status["status_enum"] in ["blocked", "finished"]:
            break
        time.sleep(5)
    ```
  </Accordion>

  <Accordion title="Téléversement et traitement de fichiers">
    ```python theme={null}
    import os
    import requests

    DEVIN_API_KEY = os.getenv("DEVIN_API_KEY")

    # Téléverser un fichier
    with open("data.csv", "rb") as f:
        response = requests.post(
            "https://api.devin.ai/v1/attachments",
            headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
            files={"file": f}
        )
    file_url = response.text

    # Créer une session pour traiter le fichier
    response = requests.post(
        "https://api.devin.ai/v1/sessions",
        headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
        json={
            "prompt": f"Analyze the data in the attached file.\n\nATTACHMENT:\"{file_url}\""
        }
    )

    print(str(response.json()))
    ```
  </Accordion>

  <Accordion title="Sessions interactives">
    ```python theme={null}
    import os
    import requests

    DEVIN_API_KEY = os.getenv("DEVIN_API_KEY")

    # Send a message to an active session
    requests.post(
        f"https://api.devin.ai/v1/sessions/{session_id}/message",
        headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
        json={
            "message": "Assurez-vous d'écrire des tests unitaires lorsque vous avez terminé."
        }
    )
    ```
  </Accordion>

  <Accordion title="Utilisation des secrets de session">
    Les secrets de session vous permettent de fournir des identifiants temporaires ou des clés API qui ne sont disponibles que pendant une seule session et ne sont pas enregistrés dans les secrets de votre organisation.

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

    DEVIN_API_KEY = os.getenv("DEVIN_API_KEY")

    # Créer une session avec des secrets spécifiques à la session
    response = requests.post(
        "https://api.devin.ai/v1/sessions",
        headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
        json={
            "prompt": "Deploy the application to the staging environment",
            "session_secrets": [
                {
                    "key": "DEPLOY_API_KEY",
                    "value": "your-temporary-deploy-key",
                    "sensitive": True
                },
                {
                    "key": "STAGING_URL",
                    "value": "https://staging.example.com",
                    "sensitive": False
                }
            ]
        }
    )

    print(response.json())
    ```

    **Remarques :**

    * Les clés secrètes doivent respecter les conventions de nommage des variables d'environnement (commencer par une lettre ou un tiret de soulignement `_`, suivi de lettres, de chiffres ou de tirets de soulignement `_`)
    * Le champ `sensitive` vaut `true` par défaut s’il n’est pas spécifié
    * Les secrets de session ne sont disponibles que dans la session dans laquelle ils sont créés et ne sont pas stockés dans les secrets de l’organisation
  </Accordion>

  <Accordion title="Analyse de dépôt GitHub">
    Voici un exemple complet qui montre comment utiliser l'API Devin pour analyser des dépôts GitHub. Cet exemple illustre :

    * l'authentification et la gestion des erreurs
    * la création et le suivi de sessions
    * le traitement de la sortie structurée
    * la bonne gestion des ressources avec async/await

    ```python theme={null}
    import os
    import aiohttp
    import asyncio
    from typing import List, Dict

    API_KEY = os.getenv("DEVIN_API_KEY")
    API_BASE = "https://api.devin.ai/v1"

    async def count_stars(session: aiohttp.ClientSession, repo_url: str) -> int:
        """Count stars for a GitHub repository using Devin."""
        # Create a new Devin session
        async with session.post(
            f"{API_BASE}/sessions",
            json={"prompt": f"Count stars for GitHub repository: {repo_url}"}
        ) as response:
            session_data = await response.json()
            session_id = session_data["session_id"]
            print(f"Created session {session_id} for {repo_url}")
            print(f"URL: {session_data['url']}")

        # Interroger les résultats avec une temporisation exponentielle (exponential backoff)
        backoff = 1
        print("Polling for results...")
        while True:
            async with session.get(
                f"{API_BASE}/sessions/{session_id}"
            ) as response:
                response_json = await response.json()
                if response_json["status_enum"] in ["blocked", "finished"]:
                    return response_json["structured_output"].get("star_count", 0)
            await asyncio.sleep(min(backoff, 30))
            backoff *= 2

    async def main():
        """Main function to analyze GitHub repositories."""
        headers = {"Authorization": f"Bearer {API_KEY}"}
        async with aiohttp.ClientSession(headers=headers) as session:
            # Example repositories to analyze
            repos = [
                "https://github.com/openai/openai-python",
                "https://github.com/anthropics/anthropic-sdk-python"
            ]
            
            # Count stars for each repository
            for repo in repos:
                stars = await count_stars(session, repo)
                print(f"{repo}: {stars} stars")

    if __name__ == "__main__":
        asyncio.run(main())
    ```
  </Accordion>
</AccordionGroup>

<div id="advanced-examples">
  ## Exemples avancés
</div>

<CardGroup>
  <Card title="Tests QA automatisés" icon="vial" href="https://github.com/CognitionAI/qa-devin">
    Découvrez comment nous utilisons Devin pour tester Devin lui-même en QA. Automatisez les tests de bout en bout grâce aux fonctionnalités de navigation de Devin.
  </Card>

  <Card title="Revues de PR automatisées" icon="code-pull-request" href="https://cognition.com/blog/devin-101-automatic-pr-reviews-with-the-devin-api">
    Découvrez comment intégrer Devin à GitHub Actions pour des revues de PR automatisées.
  </Card>
</CardGroup>

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

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