メインコンテンツへスキップ
このページでは、v1 API の一般的なユースケース向けのコード例を紹介します。

クイック例

import os
import requests
import time

DEVIN_API_KEY = os.getenv("DEVIN_API_KEY")

# 新しいセッションを作成
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"]

# セッションのステータスを監視
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")

# ファイルをアップロード
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

# ファイルを処理するセッションを作成
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")

# アクティブなセッションにメッセージを送信
requests.post(
    f"https://api.devin.ai/v1/sessions/{session_id}/message",
    headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
    json={
        "message": "Make sure to write units tests when you are done."
    }
)
セッションシークレットを使用すると、単一のセッションでのみ利用可能な一時的な認証情報やAPIキーを渡すことができ、これらは組織のシークレットには保存されません。
import os
import requests

DEVIN_API_KEY = os.getenv("DEVIN_API_KEY")

# セッション固有のシークレットでセッションを作成
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())
注意事項:
  • シークレットキーは環境変数の命名規則に従う必要があります(先頭は英字またはアンダースコアとし、その後に英字、数字、またはアンダースコアを続ける必要があります)
  • sensitive フィールドは、指定されていない場合はデフォルトで true になります
  • セッションシークレットは、作成されたセッション内でのみ利用可能であり、組織のシークレットには保存されません
ここでは、Devin API を使って GitHub リポジトリを分析する方法を示す、ひととおりのサンプルを紹介します。このサンプルでは次の点を示します:
  • 認証とエラーハンドリング
  • セッションの作成と監視
  • 構造化出力の処理
  • 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:
    """Devin を使って GitHub リポジトリのスター数をカウントします。"""
    # 新しい 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']}")

    # 指数バックオフで結果をポーリング
    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():
    """GitHub リポジトリを分析するメイン関数。"""
    headers = {"Authorization": f"Bearer {API_KEY}"}
    async with aiohttp.ClientSession(headers=headers) as session:
        # 分析対象のリポジトリ例
        repos = [
            "https://github.com/openai/openai-python",
            "https://github.com/anthropics/anthropic-sdk-python"
        ]
        
        # 各リポジトリのスター数をカウント
        for repo in repos:
            stars = await count_stars(session, repo)
            print(f"{repo}: {stars} stars")

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

高度な例

サポート

お困りですか?

APIに関するご質問や問題の報告は、[email protected] までメールでご連絡ください。