API Reference

購入

コンテストエントリーに紐づく購入を記録・追跡

購入

コンテスト参加者による購入を追跡します。購入は、コンテストの購入追跡設定に基づいてエントリーにポイントを付与できます。


購入を記録

POST/api/v1/contests/:contestId/purchases
Private API Key Required

コンテスト参加者の購入を記録します。参加者にはコンテストの購入追跡設定に基づいてポイントが付与されます。同じ orderId の重複購入は検出され、ポイントは二重に付与されません。

パスパラメータ

contestIdstring required

一意のコンテスト識別子

リクエストボディ

emailstring required

購入者のメールアドレス(既存のエントリーと一致する必要があります)

orderIdstring required

システム内で一意の注文識別子

amountnumber required

購入金額(0より大きい必要があります)

currencystring

通貨コード(デフォルト:'USD')

リクエスト

bash
curl -X POST https://blitzrocket.com/api/v1/contests/clx1abc123/purchases \
  -H "x-api-key: your_private_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "orderId": "order-12345",
    "amount": 49.99,
    "currency": "USD"
  }'

レスポンス (201 Created)

json
{
  "success": true,
  "data": {
    "purchaseId": "purchase_xyz789",
    "entryId": "entry_abc123",
    "pointsAwarded": 50,
    "alreadyExists": false,
    "message": "購入が正常に記録されました"
  }
}

レスポンス (200 - 重複)

同じ orderId の購入が既に存在する場合、APIは既に処理済みであることを示すために 200 ステータスを返します:

json
{
  "success": true,
  "data": {
    "purchaseId": "purchase_xyz789",
    "entryId": "entry_abc123",
    "pointsAwarded": 0,
    "alreadyExists": true,
    "message": "購入は既に記録されています"
  }
}

レスポンスフィールド

purchaseIdstring

購入記録の一意の識別子

entryIdstring

購入が紐づけられたエントリー

pointsAwardednumber

この購入に対して付与されたポイント(重複の場合は0)

alreadyExistsboolean

この購入が既に記録されているかどうか

messagestring

人間が読みやすいステータスメッセージ

エラー応答

ステータスエラー説明
400無効なリクエストボディemail、orderId、またはamountが欠落または無効
400金額は正の値でなければなりませんamountの値は0より大きくなければなりません
403プライベートキーが必要このエンドポイントはプライベートAPIキーが必要です
404コンテストが見つかりません指定されたIDのコンテストが存在しません

統合例

ShopifyのWebhookと購入トラッキングを統合する完全な例を示します:

javascript
app.post("/webhooks/shopify/order-created", async (req, res) => {
  const order = req.body;

  try {
    const response = await fetch(
      `https://blitzrocket.com/api/v1/contests/${CONTEST_ID}/purchases`,
      {
        method: "POST",
        headers: {
          "x-api-key": process.env.BLITZROCKET_PRIVATE_KEY,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          email: order.email,
          orderId: order.id.toString(),
          amount: parseFloat(order.total_price),
          currency: order.currency,
        }),
      }
    );

    const data = await response.json();
    console.log("購入がトラッキングされました:", data);
    res.status(200).send("OK");
  } catch (error) {
    console.error("購入のトラッキングに失敗しました:", error);
    res.status(500).send("Error");
  }
});