KITのすべてを、このページに
ForHosting KITは、すぐに使えるタスクを7447種類そろえたカタログです。文書の変換、請求書の読み取り、音声の文字起こし、IBANの検証、QRコードの生成まで、14のカテゴリにわたります。ブラウザ上でそのまま実行することも、認証付きのPOST1回でコードから呼び出すこともできます。このページはAPIの完全なリファレンスです。エンドポイント、非同期モデル、Webhookの仕様、エラー、料金をまとめています。
KITとは
モデルではなく、タスクのカタログです
すべての機能はタスクです。入力を送ると、結果が返ります。トークンもコンテキストウィンドウも、プロンプトエンジニアリングもありません。各タスクには、公開された料金、明記された単位、決まった形式があります。
実行方法は4つあります。ウェブ — 全機能に専用ページがあり、ブラウザ上で動作します。無料の機能はデータが端末から出ません。API — 認証付きのPOST1回です。以下で説明します。メールとTelegram — KIT宛のアドレスにタスクを送ります。APIはご利用方法の1つであり、製品そのものではありません。
クイックスタート
3回の呼び出しで結果まで
アカウントを作成し、キーを取得し、タスクを実行します。営業との面談も、順番待ちもありません。
APIキーを取得する
POST /signup にメールアドレスを送ると、kit_live_ で始まるキーが返ります。表示されるのは1回だけです。当サービスが保存するのはSHA-256ハッシュのみのため、紛失した場合は復元できません。新しいキーを発行します。
機能を選ぶ
GET /catalog で7447件すべてを、現在の料金と単位つきで一覧できます。このページ下部のカタログからも探せます。
実行する
その機能のエンドポイントにPOSTします。task_idが即時に返り、結果はWebhookに届きます。
認証
Bearerトークン、表示は1回だけ
すべてのAPIリクエストに Authorization: Bearer kit_live_… を付けます。キーは、プレフィックスに続く48桁の16進数です。
当サービスが保存するのは、キーのSHA-256ハッシュのみです。これは意図的な設計です。データベースが流出しても認証情報そのものは渡りませんが、同時に、キーをメールで再送することも本当にできません。紛失した場合は、失効させたうえで新しいキーを発行します。
不正なキーには常に 401 を返し、理由は示しません。失効済み・入力ミス・そもそも存在しない、のいずれであっても区別できないようにしています。どれだったかをお伝えすることは、攻撃者にも同じことを伝えることになるためです。
非同期モデル
すべてのタスクが非同期です。例外はありません。
タスクをPOSTする
202 と task_id、ステータス queued、そして想定される料金が返ります。金額は保留されるだけで、まだ課金されません。
エッジで実行される
計算系のタスクは1秒未満、AI・メディア系は数秒です。
結果が届く
webhook_url を指定していれば、そこにPOSTされます。指定がない場合は GET /tasks/{id}/result で取得します。結果はサイズに応じて保持されます。1 MB までは168時間、大きいものは最短6時間です。
失敗しても費用はゼロ
タスクは間隔を空けながら、合計で最大3回まで実行されます。それでも失敗した場合は保留が解除され、課金されません。一度もありません。
APIリファレンス
KITが応答するすべてのエンドポイント
ルートにバージョンのプレフィックスはありません。/v1/* も旧クライアント向けに引き続き解決されますが、正式な形式ではないため、新しいコードでは使わないでください。
ベースURL: https://api.kit.forhosting.com
| メソッド | ルート | 認証 | 内容 |
|---|---|---|---|
ANY |
/ |
公開 | サービスのインデックスです。バージョン、機能の件数、そしてAPIが自ら公表しているエンドポイントの一覧を返します。キーは不要で、どのメソッドでも応答します。 |
POST |
/{alias} |
APIキー | type を固定した POST /tasks の機能別ショートカットです。たとえば POST /ocr/invoice。各機能ページが示しているのがこの形です。 |
GET |
/account |
APIキー | 残高です。available_usd が実際の残高で、これに held_usd が加わります。残高を顧客エリアが管理している場合は balance.source が "portal" になり、balance_endpoint が最新の数値を指します。 |
POST |
/agent/ask |
APIキー 近日公開 | 未実装です。キーがあれば 501、なければ 401 を返します。対話型アシスタントは別途構築中です。機能を探すには POST /catalog/search をお使いください。 |
GET |
/catalog |
公開 | すべての機能を、現在の料金と単位つきで返します。?lang=en|es、絞り込みの ?q=、?limit=、入力スキーマの ?schema=1、そして ?channel= でそのチャネルに調整済みの料金が返ります。請求するチャネルを指定してください。そうしないと、表示する金額と請求する金額が食い違います。 |
POST |
/catalog/search |
公開 | {query} → 該当する機能を、それぞれすでに文章になった料金つきで返します。キーは不要です。単語単位の一致率にしきい値を設けて採点するため、理解できない問い合わせには推測せず何も返しません。これは意図した動作です。 |
POST |
/estimate |
APIキー | {type, input} → 単位数、料金、内訳を返します。実行せずに見積もります。実際の数量が事前に分からない場合(URLの先にあるPDFのページ数など)は、応答に estimated: true が付きます。 |
GET |
/mobile/bootstrap |
公開 | モバイルアプリの起動に必要なもの、つまりカテゴリ、ラベル、そして同じくチャネル調整済みの料金です。キーは不要。こちらも公開契約の一部ではありません。理由は上と同じです。 |
GET |
/mobile/catalog |
公開 | モバイルアプリ向けのカタログ投影で、料金はアプリのチャネルに調整済みです。キーは不要。公開契約の一部ではありません。形式はアプリに追随し、予告なく変わることがあります。開発は GET /catalog に対して行ってください。 |
GET |
/plans |
公開 | チャージ額です。currency と topup(sku、default_amount、min_amount)のみ。ほかには何もありません。加入するプランは存在しません。 |
POST |
/signup |
公開 | {email} → 201 とともに api_key が返ります。表示は一度きりです。メールアドレスが既にあれば 409、IPあたり10件/時を超えると 429。 |
GET |
/tasks |
APIキー | あなたのタスク一覧です。?status=、?limit=(既定25件、最大100件)。 |
POST |
/tasks |
APIキー | {type, input, webhook_url?, max_cost_usd?} → 202。課金はタスクの実測単位(ページ、分、画像)に対して行われ、事前の見積もりではありません。max_cost_usd は厳密な上限です。実費がこれを超えるとタスクは失敗し、課金は発生しません。Idempotency-Key を送れば再送しても安全で、同じ内容の再送は元のタスクを idempotent: true つきで返します。 |
DELETE |
/tasks/{id} |
APIキー | 待機中のタスクを取り消し、その予約を解放します。 |
GET |
/tasks/{id} |
APIキー | タスクの状態です。1タスクにつき10秒あたり10回まで。超えると 429 と Retry-After: 1 が返ります。Webhookのご利用をおすすめします。 |
GET |
/tasks/{id}/events |
APIキー 近日公開 | 未実装です。501 を返します。SSEは今後対応予定ですので、Webhookをご利用ください。 |
GET |
/tasks/{id}/result |
APIキー | JSONの結果、またはファイルを添付として返します。409 は未完了、410 は期限切れ、422 は失敗です。保持期間は結果のサイズによって決まり、小さいものは168時間、非常に大きいものは6時間です。 |
POST |
/tasks/{id}/retry |
APIキー | 失敗したタスクをキューに戻します。 |
POST |
/uploads |
APIキー | ローカルのファイルを送ります。本文は生のバイナリ、Content-Type はそのファイルのものにしてください。→ 201 と ref: "kit://upl_…" が返り、URLを書く場所にそのまま置けます:{"input": {"pdf": "kit://upl_…"}}。1回のアップロードを複数のタスクで使えます。refの有効期間は24時間、1回あたり最大100 MiB (104.9 MB)です。機能ごとにさらに独自の上限があります。 |
Webhook
署名付きの配信と、その検証方法
タスクの作成時に webhook_url を指定すると、結果が用意でき次第そこにPOSTします。ポーリングより費用が抑えられ、しかも早く届くため、こちらを推奨しています。
本文を信頼する前に、必ず署名を検証してください。すべての配信には KIT-Signature: v1=<hex> と KIT-Timestamp: <unix seconds> が付きます。署名は <timestamp>.<raw body> という文字列に対するHMAC-SHA256です。タイムスタンプとドットは飾りではなく、署名対象そのものに含まれます。再シリアライズしたオブジェクトではなく、受信した生のバイト列に対して署名を計算してください。
配信は、間隔を指数的に空けながら最大5回まで試行されます。エンドポイントが 4xx を返した場合は、その時点で再試行を止めます。「あとで試してほしい」ではなく「ハンドラー側が誤っている」という意味に解釈するためです。再試行されるのは 5xx とネットワークエラーだけです。それでも届かない配信は、デッドレターに送られます。
POSTする内容
{
"event": "task.completed",
"created_at": "2026-07-16T10:31:04.120Z",
"data": {
"task_id": "tsk_a1b2c3d4e5f6",
"type": "ocr.invoice",
"status": "done",
"units": 1,
"price_usd": 0.021,
"result_url": "https://api.kit.forhosting.com/tasks/tsk_a1b2c3d4e5f6/result"
}
}{
"event": "task.failed",
"created_at": "2026-07-16T10:31:04.120Z",
"data": {
"task_id": "tsk_a1b2c3d4e5f6",
"type": "ocr.invoice",
"status": "failed",
"error": {
"code": "engine_error",
"message": "Upstream timed out after 3 attempts."
},
"charged": false
}
}署名の検証
const crypto = require("crypto");
// req.body tiene que ser el cuerpo CRUDO, no un objeto re-serializado.
function verify(rawBody, headers, secret) {
const sig = (headers["kit-signature"] || "").replace(/^v1=/, "");
const ts = headers["kit-timestamp"];
const mine = crypto.createHmac("sha256", secret)
.update(ts + "." + rawBody) // el timestamp va firmado
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(mine));
}import hmac, hashlib
def verify(raw_body: bytes, headers, secret: str) -> bool:
sig = headers["KIT-Signature"].removeprefix("v1=")
ts = headers["KIT-Timestamp"]
mine = hmac.new(secret.encode(),
f"{ts}.".encode() + raw_body, # el timestamp va firmado
hashlib.sha256).hexdigest()
return hmac.compare_digest(sig, mine)エラー
標準のHTTPと、機械可読なスラッグ
すべてのエラーは、本文に安定した error スラッグを含みます。判定にはメッセージではなくスラッグをご利用ください。メッセージは各言語に翻訳され、変更される場合があります。
| HTTP | エラー | 意味 |
|---|---|---|
400 | flow_depth | 複合機能の入れ子が許容の深さを超えました。手順を平らにしてください。 |
400 | invalid_amount | 金額がないか、数値でないか、許容範囲の外です。 |
400 | invalid_email | メールアドレスが未指定か、形式が正しくありません。 |
400 | invalid_input | 入力に必須フィールドが欠けているか、このタスクが想定する形式ではありません。 |
400 | invalid_json | リクエストのボディが有効なJSONではありません。 |
400 | missing_type | リクエストに 'type' フィールドがありません。GET /catalog をご確認ください。 |
400 | unknown_op | この機能では未知の操作です。名称をカタログでご確認ください。 |
400 | unsafe_url | そのURLは取得しない宛先を指しています。内部アドレス、または公開されていないアドレスです。 |
401 | auth_required | この手順には識別されたアカウントが必要ですが、リクエストに含まれていません。 |
401 | no_key | リクエストにAPIキーがないか、アカウントに有効なキーがありません。 |
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | account_suspended | アカウントが停止されています。多くは利用上限が原因です。再開のご相談はご連絡ください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
402 | max_cost_exceeded | タスクの費用が設定した max_cost_usd を超えました。課金はされていません。 |
403 | forbidden | 資格情報は有効ですが、この操作は許可されていません。 |
404 | input_not_found | その kit:// 参照は存在しません。POST /uploads でファイルを再アップロードしてください。 |
404 | not_found | そのパスにタスクもリソースもありません。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
409 | alias_taken | その受信用エイリアスは他の方が使用中です。別のものをお選びください。 |
409 | already_accepted | その承諾はすでに使われています。承諾は一度きり有効です。 |
409 | email_taken | そのメールアドレスのアカウントはすでに存在します。 |
409 | need_lease | 別のワーカーがこのタスクを実行中です。終わるまでお待ちください。 |
409 | not_cancellable | タスクはすでに待機列にないため、取り消せません。取り消せるのは待機中のものだけです。 |
409 | not_ready | タスクはまだ完了していません。ステータスを確認するか、Webhookをお待ちください。 |
409 | not_retryable | 再実行できるのは失敗したタスクだけです。これは別の状態にあります。 |
410 | expired | 結果の保持期間が過ぎたため、すでに保存されていません。 |
410 | input_expired | その kit:// 参照は期限切れです。アップロードの有効期間は24時間です。再度アップロードしてください。 |
410 | quote_expired | 見積もりの有効期間が過ぎています。新しく取り直してください。 |
413 | input_too_large | 入力データが上限を超えています。サイズを小さくして再度お試しください。 |
413 | resolution_too_high | 画像または動画が、この機能の受け付ける解像度を超えています。 |
422 | conversion_failed | ファイルを変換できませんでした。多くは破損した形式か、想定外の形式です。 |
422 | engine_error | 処理がすべての試行で失敗しました。予約は解放され、課金はされていません。 |
422 | needs_rework | 結果が自身の品質チェックを通らなかったため、お渡ししていません。課金もされません。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
500 | lease_error | タスクを実行のために確保できませんでした。待機列に戻ります。 |
500 | ledger_error | 残高の確保または精算ができませんでした。もう一度お試しください。 |
500 | no_hold | 精算すべき予約がタスクにありません。通常は起こりません。起きた場合はご連絡ください。 |
500 | no_result | タスクは終了しましたが、結果がありませんでした。 |
501 | coming_soon | この機能は近日公開予定で、まだ利用できません。 |
501 | mail_not_configured | この機能はメールを送信しますが、アカウントに差出人がまだ設定されていません。 |
501 | not_implemented | このエンドポイントまたは機能はまだ利用できません。 |
501 | tickets_not_configured | このアカウントではチケット連携が設定されていません。 |
501 | unsupported | この操作はまだサポートされていません(例:フローは見積もりできません)。 |
502 | model_output_invalid | モデルの応答が、宣言された出力形式と一致しませんでした。課金はされません。 |
502 | tickets_unreachable | チケットシステムから応答がありませんでした。課金はされていません。もう一度お試しください。 |
503 | all_busy | この機能のワーカーがすべて処理中です。少し置いてからお試しください。 |
料金
公開された、タスクごとの料金。クレジットはありません
使った分だけ、お支払いいただきます。アカウントに残高をチャージし($10.00から。有効期限はありません)、各タスクはそこから公開されたタスクごとの料金で差し引かれます。ポイントではなく、実際の米ドルです。
各タスクの料金は、基本料金と単位あたりの料金の合計です。どちらも機能ごとのページと下のカタログで公開しており、1リクエストあたり$0.002からです。POST /estimate は実行せずに見積もりを返し、タスクに max_cost_usd を指定すると、その金額を超える場合は実行を拒否します。
失敗したタスクは課金されません。無料の機能はブラウザ内で動作し、料金は一切発生しません。
制限
サービス側で適用される制限
上限は3種類あり、数え方がそれぞれ異なります。アカウントごと: 全体で毎分600リクエスト、アップロードは毎分60件まで。タスクごと: 10秒あたり10回までのステータス取得。いずれかを超えると 429 と Retry-After: 1 が返ります。ポーリングではなくWebhookをご利用ください。費用が抑えられ、到着も早くなります。結果はサイズに応じて保持されます(1 MB までは168時間、非常に大きいものは6時間)。GET /tasks は既定で25件、最大100件を返します。新規登録は、IPごとに1時間あたり10アカウントまでです。
機能カタログ
7447件すべてを、カテゴリから
各機能には専用のページがあります。ページ上でそのまま実行でき、実際の例と公開料金 — このAPIが実際に課金するのと同じ料金 — を確認できます。カタログ全体を開くか、カテゴリから直接お探しください。
保証はありません
当サービスが約束しないこと
KITは「現状有姿」で提供されます。保証、稼働率の約束、SLA(SLA付きの専用インフラは有償のオプションです)、およびサポートの保証はありません。KITに関する条項の全文は、利用規約をご覧ください。