FormAPI ドキュメント
FormAPIは静的サイト向けのフォームバックエンドAPIです。HTMLフォームのaction属性を変えるだけで、メール通知・スパム対策・送信データ管理が使えます。
クイックスタート
1. アカウント作成
ダッシュボードにアクセスし、アカウントを作成します。
2. フォーム作成
ダッシュボードで「新規フォーム」を作成します。フォームを設置するサイトのドメインを設定してください(CORS検証に使用)。
3. HTMLにフォームを埋め込み
生成されたフォームIDを使い、HTMLにフォームを追加します。
<form action="https://formapi.ih1.dev/s/YOUR_FORM_ID" method="POST">
<input type="text" name="name" placeholder="お名前" required>
<input type="email" name="email" placeholder="メールアドレス" required>
<textarea name="message" placeholder="メッセージ"></textarea>
<button type="submit">送信</button>
</form>
4. テスト送信
フォームに入力して送信します。ダッシュボードの「送信一覧」に表示されれば成功です。設定したメールアドレスにも通知が届きます。
フォーム送信
エンドポイント
HTMLフォームでの使い方
標準的なHTMLフォームの action 属性にURLを設定するだけです。 method="POST" を指定してください。
<form action="https://formapi.ih1.dev/s/abc123" method="POST">
<input type="text" name="name">
<input type="email" name="email">
<button type="submit">送信</button>
</form>
JSONでの送信
fetch APIを使ってJSONで送信することも可能です。
fetch("https://formapi.ih1.dev/s/abc123", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
name: "田中太郎",
email: "tanaka@example.com",
message: "お問い合わせ内容"
})
})
.then(res => res.json())
.then(data => console.log(data));
レスポンス
HTMLフォームの場合、送信後にサンクスページへリダイレクトされます(_redirect_url で指定可能)。
JSONの場合は以下のレスポンスが返ります。
{
"ok": true,
"message": "Submission received"
}
特殊フィールド
フォームに以下の特殊フィールドを含めることで、動作をカスタマイズできます。
_redirect_url
送信後のリダイレクト先URLを指定します。
<input type="hidden" name="_redirect_url" value="https://example.com/thanks">
_secret
フォーム作成時に設定したシークレットキーを指定します(追加の認証レイヤー)。
<input type="hidden" name="_secret" value="your-secret-key">
_gotcha
ハニーポットフィールドです。CSSで非表示にし、ボットがこのフィールドに入力すると送信が拒否されます。
<input type="text" name="_gotcha" style="display:none">
スパム対策
FormAPIは3層のスパム対策を提供します。
1. ハニーポット
フォームに _gotcha フィールドを追加し、CSSで非表示にします。ボットは自動的にすべてのフィールドを入力するため、このフィールドに値が入っている場合は送信を拒否します。
<!-- CSSで非表示にする -->
<div style="display:none">
<input type="text" name="_gotcha">
</div>
2. CORS検証
フォーム作成時に登録したドメインからのリクエストのみを許可します。未登録のドメインからの送信はブロックされます。
3. IPレート制限
同一IPアドレスからの過剰なリクエストを自動的にブロックします。詳細はレート制限を参照してください。
レート制限
| 対象 | 制限 |
|---|---|
| IPアドレス | 30リクエスト / 分 |
| フォーム単位 | 20リクエスト / 分 |
| Freeプラン月間上限 | 100件 / 月 |
レート制限を超えた場合、HTTPステータス 429 Too Many Requests が返されます。
認証
FormAPIの認証方式は用途に応じて2種類あります。
ダッシュボード
メールアドレスとパスワードでログインします。ログイン後はAPIが自動的に認証されます。
開発者API
APIキーを使用します。ダッシュボードで発行した fapi_xxxx 形式のキーを Authorization ヘッダーに含めてください。
curl -H "Authorization: Bearer fapi_xxxx" \
https://formapi.ih1.dev/api/v1/forms
フォーム管理
curl -H "Authorization: Bearer fapi_xxxx" \
https://formapi.ih1.dev/api/v1/forms
{
"forms": [
{
"id": "abc123",
"name": "お問い合わせ",
"domain": "example.com",
"created_at": "2026-01-15T10:00:00Z"
}
]
}
curl -X POST \
-H "Authorization: Bearer fapi_xxxx" \
-H "Content-Type: application/json" \
-d '{"name": "お問い合わせ", "domain": "example.com"}' \
https://formapi.ih1.dev/api/v1/forms
curl -X PATCH \
-H "Authorization: Bearer fapi_xxxx" \
-H "Content-Type: application/json" \
-d '{"name": "Contact Form", "domain": "newdomain.com"}' \
https://formapi.ih1.dev/api/v1/forms/abc123
curl -X DELETE \
-H "Authorization: Bearer fapi_xxxx" \
https://formapi.ih1.dev/api/v1/forms/abc123
送信データ
curl -H "Authorization: Bearer fapi_xxxx" \
https://formapi.ih1.dev/api/v1/forms/abc123/submissions
{
"submissions": [
{
"id": "sub_001",
"data": {
"name": "田中太郎",
"email": "tanaka@example.com",
"message": "お問い合わせ内容"
},
"ip": "203.0.113.1",
"created_at": "2026-03-19T12:00:00Z"
}
],
"total": 1
}
APIキー
curl -X POST \
-H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json" \
-d '{"name": "Production Key"}' \
https://formapi.ih1.dev/api/v1/api-keys
{
"id": "key_001",
"name": "Production Key",
"key": "fapi_xxxxxxxxxxxxxxxxxxxx",
"created_at": "2026-03-19T12:00:00Z"
}
注意: APIキーの値は発行時にのみ表示されます。安全な場所に保管してください。
使用量
curl -H "Authorization: Bearer fapi_xxxx" \
https://formapi.ih1.dev/api/v1/usage
{
"plan": "free",
"period": "2026-03",
"submissions": {
"used": 42,
"limit": 100
},
"forms": {
"used": 2,
"limit": 3
}
}