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");
}
});