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. テスト送信

フォームに入力して送信します。ダッシュボードの「送信一覧」に表示されれば成功です。設定したメールアドレスにも通知が届きます。

フォーム送信

エンドポイント

POST /s/{form_id}
フォームデータを送信します。

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

フォーム管理

GET /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"
    }
  ]
}
POST /api/v1/forms
新しいフォームを作成します。
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
PATCH /api/v1/forms/{form_id}
フォーム設定を更新します。
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
DELETE /api/v1/forms/{form_id}
フォームを削除します。関連する送信データもすべて削除されます。
curl -X DELETE \
  -H "Authorization: Bearer fapi_xxxx" \
  https://formapi.ih1.dev/api/v1/forms/abc123

送信データ

GET /api/v1/forms/{form_id}/submissions
フォームの送信データ一覧を取得します。
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
}
GET /api/v1/forms/{form_id}/submissions/{id}
送信データの詳細を取得します。
DELETE /api/v1/forms/{form_id}/submissions/{id}
送信データを削除します。

APIキー

POST /api/v1/api-keys
新しい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キーの値は発行時にのみ表示されます。安全な場所に保管してください。

GET /api/v1/api-keys
APIキー一覧を取得します(キーの値は含まれません)。
DELETE /api/v1/api-keys/{key_id}
APIキーを無効化(削除)します。

使用量

GET /api/v1/usage
月次使用量を取得します。
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
  }
}