> ## 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.

# v1 の使用例

> v1 API のコード例と一般的なユースケース

このページでは、v1 API の一般的なユースケース向けのコード例を紹介します。

<div id="quick-examples">
  ## クイック例
</div>

<AccordionGroup>
  <Accordion title="セッションの作成と監視">
    ```python theme={null}
    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", "finished"]:
            break
        time.sleep(5)
    ```
  </Accordion>

  <Accordion title="ファイルのアップロードと処理">
    ```python theme={null}
    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()))
    ```
  </Accordion>

  <Accordion title="インタラクティブなセッション">
    ```python theme={null}
    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."
        }
    )
    ```
  </Accordion>

  <Accordion title="セッションシークレットの使用方法">
    セッションシークレットを使用すると、単一のセッションでのみ利用可能な一時的な認証情報やAPIキーを渡すことができ、これらは組織のシークレットには保存されません。

    ```python theme={null}
    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` になります
    * セッションシークレットは、作成されたセッション内でのみ利用可能であり、組織のシークレットには保存されません
  </Accordion>

  <Accordion title="GitHub リポジトリの分析">
    ここでは、Devin API を使って GitHub リポジトリを分析する方法を示す、ひととおりのサンプルを紹介します。このサンプルでは次の点を示します:

    * 認証とエラーハンドリング
    * セッションの作成と監視
    * 構造化出力の処理
    * 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:
        """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", "finished"]:
                    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())
    ```
  </Accordion>
</AccordionGroup>

<div id="advanced-examples">
  ## 高度な例
</div>

<CardGroup>
  <Card title="自動 QA テスト" icon="vial" href="https://github.com/CognitionAI/qa-devin">
    Devin を使って Devin 自身の QA テストを実行している方法をご覧ください。Devin のブラウザ機能を使ってエンドツーエンドテストを自動化できます。
  </Card>

  <Card title="自動 PR レビュー" icon="code-pull-request" href="https://cognition.com/blog/devin-101-automatic-pr-reviews-with-the-devin-api">
    自動 PR レビューのために Devin を GitHub Actions と連携する方法を学べます。
  </Card>
</CardGroup>

<div id="support">
  ## サポート
</div>

<Card title="お困りですか？">
  APIに関するご質問や問題の報告は、[support@cognition.ai](mailto:support@cognition.ai) までメールでご連絡ください。
</Card>
