Passer au contenu principal
Cette page présente des exemples de code pour les cas d’utilisation courants de l’API v1.

Exemples rapides

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", "stopped"]:
        break
    time.sleep(5)
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()))
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é."
    }
)
Les secrets de session vous permettent de fournir des identifiants temporaires ou des clés API qui ne sont valables que pour une seule session et ne sont pas stockés parmi les secrets de votre organisation.
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
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
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:
    """Compter les étoiles d'un dépôt GitHub à l'aide de Devin."""
    # Créer une nouvelle session Devin
    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", "stopped"]:
                return response_json["structured_output"].get("star_count", 0)
        await asyncio.sleep(min(backoff, 30))
        backoff *= 2

async def main():
    """Fonction principale pour analyser des dépôts GitHub."""
    headers = {"Authorization": f"Bearer {API_KEY}"}
    async with aiohttp.ClientSession(headers=headers) as session:
        # Exemples de dépôts à analyser
        repos = [
            "https://github.com/openai/openai-python",
            "https://github.com/anthropics/anthropic-sdk-python"
        ]
        
        # Compter les étoiles pour chaque dépôt
        for repo in repos:
            stars = await count_stars(session, repo)
            print(f"{repo}: {stars} stars")

if __name__ == "__main__":
    asyncio.run(main())

Exemples avancés

Support

Besoin d'aide ?

Pour toute question relative à l’API ou pour signaler un problème, contactez [email protected].