2026年3月更新 開発者ガイド REST API

Dify APIガイド2026: RESTでアプリにAIを統合する

Dify REST APIを使えば、任意のDifyアプリを独自のコードから呼び出せます — ウェブサイトにチャットボットを埋め込む、ドキュメント処理を自動化する、任意のSaaS製品にAI機能を統合するなど。このガイドではAPIキーの取得からストリーミングレスポンスとセルフホストのセットアップまですべてカバーします。

Dify APIとは?

Dify APIは、Difyで作成した任意のアプリをプログラムで呼び出せるREST APIです — 任意のプログラミング言語やプラットフォームから呼び出せます。Difyアプリ(チャットボット、エージェント、ワークフロー、補完アプリ)を公開すると、シークレットキーで呼び出せる固有のAPIエンドポイントが付与されます。

Dify CloudのベースURLはhttps://api.dify.ai/v1です。セルフホスティングの場合は自分のドメインに置き換えます:https://your-server.com/v1

典型的なユースケース

ウェブサイトチャットボット

Difyウィジェットを使わずに任意のウェブサイトにAIチャットを埋め込む。

ドキュメント自動化

PDFやテキストをDifyワークフローに送信して構造化出力を取得。

SaaS AI機能

AIライティング、要約、Q&Aを既存製品に組み込む。

バックエンドパイプライン

cronジョブ、Webhook、キュープロセッサーからDifyエージェントをトリガー。

モバイルアプリ

標準HTTPを通じてiOSまたはAndroidアプリからDifyを呼び出す。

ノーコードツール

HTTPリクエストノードを使ってn8n、Make、ZapierとDifyを接続。

注意: DifyアプリタイプごとにI(チャットボット、エージェント、ワークフロー、補完)エンドポイントが若干異なります。このガイドでは最もよく使われるChat Messages APIに焦点を当てています。

APIキーの作成

各DifyアプリにはI固有のAPIキーがあります。APIでアクセスしたい各アプリに対して作成する必要があります。手順:

1

スタジオでDifyアプリを開く

cloud.dify.ai(またはセルフホストURL)にアクセスして、APIで呼び出したいアプリを開く。

2

右上の「APIアクセス」をクリック

そのアプリのAPIリファレンスパネルが開きます。

3

「APIキーを作成」をクリック

後で識別できるように名前をつけてください(例:「本番」または「テスト」)。

4

すぐにシークレットキーをコピー

キーは一度しか表示されません。環境変数として保存してください — ソースコードに直接書かないでください。

5

Authorizationヘッダーで使用

すべてのAPIリクエストにこのヘッダーが必要:Authorization: Bearer YOUR_API_KEY

セキュリティ警告: クライアントサイドのJavaScriptやパブリックリポジトリにAPIキーを絶対に公開しないでください。常に環境変数として保存し、Dify APIはバックエンドサーバーから呼び出してください。

APIエンドポイント一覧

Dify APIはメッセージの送信、会話の管理、ファイルのアップロードなどのエンドポイントを提供します。すべてのエンドポイントはベースURLhttps://api.dify.ai/v1からの相対パスです。

メソッド エンドポイント 説明
POST /chat-messages チャットメッセージを送信してレスポンスを受信。blockingとstreamingをサポート。
POST /completion-messages 補完アプリにプロンプトを送信。生成されたテキストを返します。
POST /files/upload RAGまたはビジョンアプリ用にファイル(PDF、画像など)をアップロード。
GET /conversations ユーザーのすべての会話を一覧表示。userパラメーターでフィルタリング。
GET /messages 特定の会話のメッセージ履歴を取得。
DELETE /conversations/:id 会話とそのすべてのメッセージを完全に削除。
POST /messages/:id/feedbacks 特定のメッセージに評価(サムアップ/ダウン)を送信。
GET /parameters アプリの入力パラメーター、オープニングテキスト、提案質問を取得。

最初のAPIコール

実際のAPIコールを実行しましょう。YOUR_API_KEYを実際のキーに置き換えてください。userフィールドはエンドユーザーの一意識別子です — システムでそのユーザーを識別する任意の文字列を使用してください。

curlの例

curl -X POST 'https://api.dify.ai/v1/chat-messages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "inputs": {},
    "query": "こんにちは!何を手伝えますか?",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "user-123"
  }'

レスポンスの例

{
  "event": "message",
  "task_id": "abc123",
  "id": "msg_456",
  "message_id": "msg_456",
  "conversation_id": "conv_789",
  "mode": "chat",
  "answer": "こんにちは!質問、テキスト、分析など様々なことをお手伝いできます。何を探求しますか?",
  "metadata": { "usage": { "prompt_tokens": 12, "completion_tokens": 22 } },
  "created_at": 1711234567
}

Pythonの例(requestsを使用)

import requests

API_KEY = "your_api_key_here"
BASE_URL = "https://api.dify.ai/v1"

def chat(query, conversation_id="", user="user-123"):
    response = requests.post(
        f"{BASE_URL}/chat-messages",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        json={
            "inputs": {},
            "query": query,
            "response_mode": "blocking",
            "conversation_id": conversation_id,
            "user": user,
        }
    )
    response.raise_for_status()
    return response.json()

# 最初のメッセージ
result = chat("Difyとは何ですか?")
print(result["answer"])
conversation_id = result["conversation_id"]

# 同じ会話でのフォローアップ
result2 = chat("もう少し詳しく教えてもらえますか?", conversation_id=conversation_id)
print(result2["answer"])
ヒント: 最初のレスポンスからconversation_idを保存し、後続の呼び出しで渡してください。これにより会話の文脈が保持され、AIは以前に言われたことを記憶します。

ストリーミングレスポンス(SSE)

ストリーミングにより、ChatGPTのタイピング効果のように生成中にトークンを表示できます。DifyはストリーミングにServer-Sent Events(SSE)を使用します。リクエストボディに"response_mode": "streaming"を設定してください。

各イベントはdata:プレフィックス付きの行として届きます。イベントタイプにはmessage(トークンチャンク)、message_end(メタデータ付きの完了メッセージ)、errorがあります。

ストリーミングcurlの例

curl -X POST 'https://api.dify.ai/v1/chat-messages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --no-buffer \
  -d '{
    "inputs": {},
    "query": "AIについて短い詩を書いてください。",
    "response_mode": "streaming",
    "conversation_id": "",
    "user": "user-123"
  }'

Pythonストリーミングの例

import requests
import json

def stream_chat(query, user="user-123"):
    with requests.post(
        "https://api.dify.ai/v1/chat-messages",
        headers={
            "Authorization": "Bearer YOUR_API_KEY",
            "Content-Type": "application/json",
        },
        json={
            "inputs": {},
            "query": query,
            "response_mode": "streaming",
            "conversation_id": "",
            "user": user,
        },
        stream=True,
    ) as response:
        for line in response.iter_lines():
            if line and line.startswith(b"data: "):
                data = json.loads(line[6:])
                if data.get("event") == "message":
                    print(data["answer"], end="", flush=True)
                elif data.get("event") == "message_end":
                    print()
                    break

stream_chat("量子コンピューティングをわかりやすく説明してください。")

セルフホストDify APIの設定

DifyをセルフホストしているI場合、Dify CloudのベースURLを独自のインスタンスに置き換えるだけです:

Dify Cloud

https://api.dify.ai/v1

デフォルト。アカウントが必要。

セルフホスト(直接)

https://your-domain.com/v1

ドメインを自分のDifyドメインに置き換えてください。

セルフホスト(IPアドレス)

http://your-server-ip/v1

ドメインなしでテスト用に使用。本番環境では非推奨。

セルフホスト(Hetzner)

https://dify.your-domain.com/v1

HetznerにデプロイしたDifyインスタンスのカスタムドメイン。

セルフホストの利点: APIコストなし(LLMトークンのみ)、レート制限なし、CORS設定のカスタマイズ、プロキシなしでのプライベートネットワーク統合。

Difyをセルフホストしてフルコントロール

DifyをセルフホストするとAPIが完全に自分の管理下に置かれます — 独自のサーバーで動作し、APIコストなし、レート制限なし、完全なデータプライバシー。Hetznerで月額€3.79から始められます。

Difyセルフホスティングを始める → Dify入門チュートリアル ワークフローガイド