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を接続。
APIキーの作成
各DifyアプリにはI固有のAPIキーがあります。APIでアクセスしたい各アプリに対して作成する必要があります。手順:
スタジオでDifyアプリを開く
cloud.dify.ai(またはセルフホストURL)にアクセスして、APIで呼び出したいアプリを開く。
右上の「APIアクセス」をクリック
そのアプリのAPIリファレンスパネルが開きます。
「APIキーを作成」をクリック
後で識別できるように名前をつけてください(例:「本番」または「テスト」)。
すぐにシークレットキーをコピー
キーは一度しか表示されません。環境変数として保存してください — ソースコードに直接書かないでください。
Authorizationヘッダーで使用
すべてのAPIリクエストにこのヘッダーが必要:Authorization: Bearer YOUR_API_KEY
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インスタンスのカスタムドメイン。
Difyをセルフホストしてフルコントロール
DifyをセルフホストするとAPIが完全に自分の管理下に置かれます — 独自のサーバーで動作し、APIコストなし、レート制限なし、完全なデータプライバシー。Hetznerで月額€3.79から始められます。