POST /v1/actions/promotion-code/deactivate-promotion-code
無効化は取り消せません。無効化したプロモーションコードを再度有効にすることはできません。同じコードを再び提供するには、そのコードで新しいプロモーションコードを作成してください。
リクエストボディ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | はい | プロモーションコード ID(Short ID 形式 PMC_xxx) |
リクエスト例
const { promotionCode } = await client.promotionCodes.deactivate({ id: "PMC_6eYCunG3IMmIgcQOnaXdoA" });
console.log(promotionCode.status); // => "inactive"
MERCHANT_ID="MER_2aUyqjCzEIiEcYMKj7TZtw"
TIMESTAMP=$(date +%s)
BODY='{"id":"PMC_6eYCunG3IMmIgcQOnaXdoA"}'
BODY_HASH=$(echo -n "$BODY" | openssl dgst -sha256 -binary | base64 | tr -d '\n')
CANONICAL_REQUEST="POST
/v1/actions/promotion-code/deactivate-promotion-code
$TIMESTAMP
$BODY_HASH"
SIGNATURE=$(echo -n "$CANONICAL_REQUEST" | openssl dgst -sha256 -sign private_key.pem | base64 | tr -d '\n')
curl -X POST "https://api.waffo.ai/v1/actions/promotion-code/deactivate-promotion-code" \
-H "Content-Type: application/json" \
-H "X-Merchant-Id: $MERCHANT_ID" \
-H "X-Timestamp: $TIMESTAMP" \
-H "X-Signature: $SIGNATURE" \
-d "$BODY"
import hashlib, time, base64, json, requests
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
merchant_id = "MER_2aUyqjCzEIiEcYMKj7TZtw"
timestamp = str(int(time.time()))
body = {"id": "PMC_6eYCunG3IMmIgcQOnaXdoA"}
body_json = json.dumps(body, separators=(",", ":"))
body_hash = base64.b64encode(hashlib.sha256(body_json.encode()).digest()).decode()
path = "/v1/actions/promotion-code/deactivate-promotion-code"
canonical = f"POST\n{path}\n{timestamp}\n{body_hash}"
with open("private_key.pem", "rb") as f:
private_key = serialization.load_pem_private_key(f.read(), password=None)
signature = base64.b64encode(
private_key.sign(canonical.encode(), padding.PKCS1v15(), hashes.SHA256())
).decode()
resp = requests.post(
f"https://api.waffo.ai{path}",
headers={
"Content-Type": "application/json",
"X-Merchant-Id": merchant_id,
"X-Timestamp": timestamp,
"X-Signature": signature,
},
data=body_json,
)
print(resp.json())
成功レスポンス (200)
{
"data": {
"promotionCode": {
"id": "PMC_6eYCunG3IMmIgcQOnaXdoA",
"couponId": "CPN_5dXBtmF2HLlHfbPNm0Wcnz",
"code": "KOL-ALICE",
"status": "inactive",
"restrictions": {
"customerEmails": [],
"perCustomerLimit": null,
"maxRedemptions": 100,
"expiresAt": "2026-12-01T00:00:00.000Z",
"minimumAmount": { "USD": "50.00" }
},
"batchId": null,
"createdAt": "2026-11-02T08:00:00.000Z"
}
}
}
レスポンスフィールド
プロモーションコードの作成のレスポンスと同じです。既存の注文は注文時のコードを保持し、影響を受けません。すでに無効化されたプロモーションコードに対して呼び出すと、変更されずに
200 が返ります。プロモーションコードを無効化してもクーポンは無効化されません。クーポン自身のコードはクーポンを無効化することでのみ無効化でき、そのときすべてのプロモーションコードも無効化されます。エラー
リトライポリシー:4xx は一切リトライしない — リクエストを修正してから再送信。5xx は指数バックオフでリトライ(5s 開始、最大 3 回)。
| ステータス | errors[0].message | 意味 | 推奨処理 |
|---|---|---|---|
| 400 | Missing or invalid header: x-context-environment | 環境 header が欠落、または test / prod ではない | X-Environment を test または prod に設定 |
| 400 | Invalid JSON body | ボディが正しい JSON ではない | ボディを修正して再送信 |
| 400 | Missing required field: id | id が指定されていない | id を追加して再送信 |
| 400 | Expected format: PMC_xxx, got "X" | id が正しい Short ID ではない | PMC_ 接頭辞付きの Short ID を使用 |
| 401 | Authentication required | 認証失敗 | API Key、タイムスタンプ、署名を確認 |
| 404 | Promotion code not found | プロモーションコードが存在しない、他のマーチャントに属する、または別の環境にある | id と API Key の環境を確認 |
| 409 | The coupon's own code can only be deactivated together with the coupon | この ID はクーポン自身のコードで、プロモーションコードではない | 代わりにクーポンを無効化 |
| 500 | Internal server error | サーバ側の予期しない障害 | 指数バックオフでリトライ(5s 開始、最大 3 回) |