コンテンツにスキップ

ワークフロー

Show:

Workflows APIを使用すると、ブロックとエッジから決定論的なDAGベースのパイプラインを構築できます。ワークフローをプログラムで作成し、同期または非同期で実行し、実行とログを確認し、ワークフロー定義をYAMLとしてインポートまたはエクスポートできます。

すべてのワークフルートはAPIキーで認証され、キーを所有する組織にスコープされています。

注意: ダッシュボードユーザーは、/v1/organizations/\{org_id\}/workflowsの組織スコープのルートを通じてワークフローを管理することもできます。以下のルートは公開APIキーのサーフェスです。

すべてのリクエストにはBearer APIキーを含める必要があります:

Terminal window
curl -H "Authorization: Bearer $SCHIFT_API_KEY" \
https://api.schift.io/v1/workflows

すべてのワークフローエンドポイントは以下にホストされています:

https://api.schift.io/v1/workflows

ワークフローは、ブロックとエッジで構成された有向非巡回グラフ(DAG)です。

FieldTypeDescription
idstringワークフロー識別子。
namestring人間が読める名前。
descriptionstringオプションの説明。
statusstringdraftpublished、またはarchived
graph.nodesarrayワークフロー内のブロック。
graph.edgesarrayブロック間の接続。
created_atstringISO 8601タイムスタンプ。
updated_atstringISO 8601タイムスタンプ。

新しいワークフローを作成します。空のグラフから始めるか、組み込みのテンプレートから始めることができます。

ParameterTypeRequiredDescription
namestringYesワークフロー名。
descriptionstringNoオプションの説明。
templatestringNo組み込みテンプレートIDの1つ。graphと相互排他的。
graphobjectNonodesedgesを持つ初期DAG。

組み込みテンプレート: basic_ragdocument_qaconversational_ragmulti_source_ragagentic_ragimage_ocr_ingestchat_ragchatroom_memory_search

Terminal window
curl -X POST https://api.schift.io/v1/workflows \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Document QA",
"description": "Upload, parse, chunk, embed, and store documents.",
"template": "document_qa"
}'
{
"id": "wf_abc123def456",
"name": "Document QA",
"description": "Upload, parse, chunk, embed, and store documents.",
"status": "draft",
"graph": {
"nodes": [
{
"id": "start_001",
"type": "start",
"title": "Start",
"position": {"x": 100, "y": 100},
"config": {}
}
],
"edges": []
},
"created_at": "2026-06-19T05:00:00+00:00",
"updated_at": "2026-06-19T05:00:00+00:00"
}
// 400
{
"detail": "Code blocks are disabled in hosted workflows"
}

認証された組織のすべてのワークフローをリストします。

[
{
"id": "wf_abc123def456",
"name": "Document QA",
"description": "Upload, parse, chunk, embed, and store documents.",
"status": "draft",
"block_count": 1,
"updated_at": "2026-06-19T05:00:00+00:00"
}
]

単一のワークフロー定義を取得し、その完全なグラフを含みます。

NameTypeDescription
workflow_idstringワークフロー識別子。
// 404
{
"detail": "Workflow not found"
}

ワークフローのメタデータまたはグラフを更新します。グラフを変更すると、検証がトリガーされます。

ParameterTypeRequiredDescription
namestringNo新しいワークフロー名。
descriptionstringNo新しい説明。
statusstringNodraftpublished、またはarchived
graphobjectNonodesedgesを持つ置き換えDAG。

注意: ワークフローは実行する前にpublishedステータスである必要があります。

// 400 invalid_graph
{
"error": "invalid_graph",
"errors": ["Missing required input on block chunk_001"]
}
// 400
{
"detail": "Code blocks are disabled in hosted workflows"
}

ワークフローとその定義を削除します。成功時には204 No Contentを返します。

// 404
{
"detail": "Workflow not found"
}

既存のワークフローにブロックを追加します。

ParameterTypeRequiredDescription
typestringYesブロックタイプ。GET /v1/workflows/meta/block-typesを参照。
titlestringNo表示タイトル。デフォルトはブロックタイプのラベルです。
positionobjectNo{"x": number, "y": number}。デフォルトは{"x": 0, "y": 0}です。
configobjectNoブロック固有の設定。
Terminal window
curl -X POST https://api.schift.io/v1/workflows/wf_abc123def456/blocks \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "llm",
"title": "Answer generator",
"position": {"x": 400, "y": 200},
"config": {
"model": "gemini-2.5-flash-lite",
"temperature": 0.7,
"max_tokens": 1024
}
}'
{
"id": "llm_7a8b9c0d",
"type": "llm",
"title": "Answer generator",
"config": {
"model": "gemini-2.5-flash-lite",
"temperature": 0.7,
"max_tokens": 1024
},
"position": {"x": 400, "y": 200}
}
// 400
{
"detail": "Code blocks are disabled in hosted workflows"
}

DELETE /v1/workflows/{workflow_id}/blocks/{block_id}

Section titled “DELETE /v1/workflows/{workflow_id}/blocks/{block_id}”

ワークフローからブロックを削除します。接続されたエッジは自動的に削除されます。

NameTypeDescription
workflow_idstringワークフロー識別子。
block_idstringブロック識別子。

成功時には204 No Contentを返します。

2つのブロック間にエッジを追加します。

ParameterTypeRequiredDescription
sourcestringYesソースブロックID。
targetstringYesターゲットブロックID。
source_handlestringNo出力ポート。デフォルトはoutputです。
target_handlestringNo入力ポート。デフォルトはinputです。
Terminal window
curl -X POST https://api.schift.io/v1/workflows/wf_abc123def456/edges \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source": "retriever_001",
"target": "llm_7a8b9c0d",
"source_handle": "results",
"target_handle": "vars"
}'
{
"id": "edge_a1b2c3d4",
"source": "retriever_001",
"target": "llm_7a8b9c0d",
"source_handle": "results",
"target_handle": "vars"
}
// 400
{
"detail": "Source block not found: retriever_001"
}

DELETE /v1/workflows/{workflow_id}/edges/{edge_id}

Section titled “DELETE /v1/workflows/{workflow_id}/edges/{edge_id}”

ワークフローからエッジを削除します。成功時には204 No Contentを返します。

ワークフローを実行します。

NameTypeRequiredDescription
modestringNoasync(デフォルト)またはsync
ParameterTypeRequiredDescription
inputsobjectNoワークフローに渡されるキーと値の入力。

非同期実行はバックグラウンドジョブとしてキューに入れられます。レスポンスには、GET /v1/workflows/\{workflow_id\}/runs/\{run_id\}でポーリングできる実行IDが含まれます。

Terminal window
curl -X POST "https://api.schift.io/v1/workflows/wf_abc123def456/run?mode=async" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {"query": "What is vector search?"}
}'
{
"id": "run_9f8e7d6c",
"workflow_id": "wf_abc123def456",
"status": "pending"
}

同期実行はワークフローが終了するまで待機し、最終的な実行状態を返します。

Terminal window
curl -X POST "https://api.schift.io/v1/workflows/wf_abc123def456/run?mode=sync" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputs": {"query": "What is vector search?"}
}'
{
"id": "run_9f8e7d6c",
"workflow_id": "wf_abc123def456",
"status": "completed",
"inputs": {"query": "What is vector search?"},
"outputs": {"answer": "Vector search finds similar vectors in a database."},
"block_states": {
"llm_7a8b9c0d": {
"block_id": "llm_7a8b9c0d",
"status": "completed",
"inputs": {"vars": {"query": "What is vector search?"}},
"outputs": {"response": "Vector search finds similar vectors in a database."},
"error": null,
"started_at": "2026-06-19T05:05:00+00:00",
"finished_at": "2026-06-19T05:05:01+00:00",
"duration_ms": 1200
}
},
"error": null,
"started_at": "2026-06-19T05:05:00+00:00",
"finished_at": "2026-06-19T05:05:02+00:00"
}
// 409 workflow_not_published
{
"error": "workflow_not_published",
"message": "Publish workflow before running",
"status": "draft"
}
// 403
{
"detail": "Upgrade your plan to continue"
}
// 402
{
"allowed": false,
"reason": "quota_exceeded"
}
// 400
{
"detail": "Workflow exceeds maximum of 100 blocks (has 120)"
}

POST /v1/workflows/{workflow_id}/webhook/{path}

Section titled “POST /v1/workflows/{workflow_id}/webhook/{path}”

受信したWebhookからワークフローの実行をトリガーします。リクエストボディ、ヘッダー、クエリパラメータ、メソッド、パスは、ワークフローの入力として渡されます。

NameTypeDescription
workflow_idstringワークフロー識別子。
pathstring残りのWebhookパス。
Terminal window
curl -X POST https://api.schift.io/v1/workflows/wf_abc123def456/webhook/incoming \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event": "document.uploaded"}'
{
"id": "run_a1b2c3d4",
"workflow_id": "wf_abc123def456",
"status": "pending"
}
// 413
{
"detail": "Workflow webhook body exceeds 1MB cap"
}
// 400
{
"detail": "Invalid JSON body: Expecting value"
}

ワークフローの実行をリストします。

[
{
"id": "run_9f8e7d6c",
"workflow_id": "wf_abc123def456",
"status": "completed",
"inputs": {"query": "What is vector search?"},
"outputs": {"answer": "Vector search finds similar vectors in a database."},
"started_at": "2026-06-19T05:05:00+00:00",
"finished_at": "2026-06-19T05:05:02+00:00"
}
]

GET /v1/workflows/{workflow_id}/runs/{run_id}

Section titled “GET /v1/workflows/{workflow_id}/runs/{run_id}”

単一の実行を取得し、ブロックレベルの状態を含みます。

// 404
{
"detail": "Workflow run not found"
}

GET /v1/workflows/{workflow_id}/runs/{run_id}/logs

Section titled “GET /v1/workflows/{workflow_id}/runs/{run_id}/logs”

実行ログをポーリングします。

NameTypeRequiredDescription
after_seqintegerNoこのシーケンス番号以降のログを返します。デフォルトは0です。
{
"run_id": "run_9f8e7d6c",
"status": "completed",
"logs": [
{"seq": 1, "level": "info", "message": "Run started", "timestamp": "2026-06-19T05:05:00+00:00"},
{"seq": 2, "level": "info", "message": "Block llm_7a8b9c0d completed", "timestamp": "2026-06-19T05:05:01+00:00"}
]
}

ワークフローグラフを変更せずに検証します。

{
"valid": true,
"errors": []
}
{
"valid": false,
"errors": ["Block llm_7a8b9c0d has unconnected required input"]
}

YAMLからワークフローをインポートします。

ParameterTypeRequiredDescription
yamlstringYesYAMLワークフロー定義。

YAMLにはversion: 1name、および少なくとも1つのブロックが含まれている必要があります。codeブロックはインポート中に拒否されます。

Terminal window
curl -X POST https://api.schift.io/v1/workflows/import \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"yaml": "version: 1\nname: Simple RAG\nblocks:\n - id: start\n type: start\nedges: []"
}'
{
"id": "wf_imported123",
"name": "Simple RAG",
"status": "draft",
"graph": {
"nodes": [{"id": "start", "type": "start", "title": "Start", "position": {"x": 0, "y": 0}, "config": {}}],
"edges": []
},
"created_at": "2026-06-19T05:10:00+00:00",
"updated_at": "2026-06-19T05:10:00+00:00"
}
// 400
{
"detail": "Missing required field: 'version'"
}
// 400
{
"detail": "Code blocks are disabled in hosted workflows"
}

ワークフロー定義をYAMLまたはJSONとしてエクスポートします。

NameTypeRequiredDescription
formatstringNoyaml(デフォルト)またはjson

yamlの場合、レスポンスはtext/yamlです。jsonの場合、レスポンスはJSONです。

自然言語のプロンプトからワークフローを生成します。これはプレミアム機能です。

ParameterTypeRequiredDescription
promptstringYes生成するワークフローの説明。
modelstringNo使用するモデル。デフォルトはgemini-2.5-flash-liteです。
// 403
{
"error": "upgrade_required",
"message": "Agentic workflow generation is a premium feature. Upgrade your plan to use it."
}
// 502
{
"error": "upstream_error",
"message": "Workflow execution failed"
}

利用可能なすべてのブロックタイプ、そのカテゴリ、入力/出力ポート、およびデフォルト設定をリストします。

ノードの記述子をリストし、カテゴリまたは検索クエリでフィルタリングできます。

NameTypeRequiredDescription
categorystringNoブロックカテゴリでフィルタリング。
qstringNo検索用語。

GET /v1/workflows/meta/descriptors/grouped

Section titled “GET /v1/workflows/meta/descriptors/grouped”

カテゴリ別にグループ化されたノードの記述子をリストします。

GET /v1/workflows/meta/descriptors/{block_type}

Section titled “GET /v1/workflows/meta/descriptors/{block_type}”

単一のブロックタイプの記述子を取得します。

// 404
{
"detail": "No descriptor for block type 'unknown_block'"
}

組み込みのワークフローテンプレートをリストします。

[
{"id": "basic_rag", "label": "Basic Rag"},
{"id": "document_qa", "label": "Document Qa"},
{"id": "conversational_rag", "label": "Conversational Rag"}
]
LimitValueNotes
ワークフローあたりのブロック数100ハードリミット。
ワークフローあたりのエッジ数200ハードリミット(ブロックリミットの2倍)。
Webhookボディサイズ1 MBHTTP 413で拒否されます。
同期実行タイムアウト60 sワークフローの合計タイムアウト。
ブロックごとのタイムアウト30 s個々のブロックタイムアウト。
実行コンテキストサイズ10 MB変数と出力の合計。
サブワークフローの深さ5最大ネストされたサブワークフロー呼び出し。

デフォルトの実行支出上限:

CapValue
external_calls_total60
llm_calls20
web_search_calls10

実行は次のいずれかの状態になります:

StatusDescription
pendingキューに入れられたが開始されていない。
running現在実行中。
completed正常に終了。
failedエラーのため停止。
cancelled完了前にキャンセル。
VersionStatusNotes
v1Currentここに文書化されているすべての/v1/workflows/*ルートは現在の公開サーフェスです。

現在、v2 Workflows APIはありません。新しい統合は/v1/workflows/*ルートを使用する必要があります。