メインコンテンツへスキップ
POST /v1/actions/subscription-product/create-product
認証: API Key

リクエストボディ

フィールド必須説明
storeIdstringYesStore ID(STO_xxx フォーマット)
namestringYes商品名(64 文字以下)
billingPeriodstringYesweeklymonthlyquarterly、または yearly
pricesobjectYesマルチ通貨価格(価格フォーマットを参照)
descriptionstring | nullNo商品説明(Markdown 対応;null または "" で消去可能)
mediaarrayNo商品画像/動画(メディアフォーマットを参照)
successUrlstring | nullNoサブスクリプション成功後のリダイレクト URL(512 文字以下、有効な http(s) URL であること;null または "" で消去可能)
metadataobjectNoカスタムキー値データ。無料トライアル期間を提供するために trialDays(整数、1-365)を含めることができます

リクエスト例

import { WaffoPancake, BillingPeriod, TaxCategory } from "@waffo/pancake-ts";

const client = new WaffoPancake({
  merchantId: process.env.WAFFO_MERCHANT_ID!,
  privateKey: process.env.WAFFO_PRIVATE_KEY!,
});

const { product } = await client.subscriptionProducts.create({
  storeId: "STO_2D5F8G3H1K4M6N9P",
  name: "Pro Plan",
  billingPeriod: BillingPeriod.Monthly,
  prices: {
    USD: { amount: "29.00", taxIncluded: false, taxCategory: TaxCategory.SaaS },
    EUR: { amount: "27.00", taxIncluded: false, taxCategory: TaxCategory.SaaS },
  },
  description: "Full access to all Pro features.",
  successUrl: "https://example.com/welcome",
  metadata: { trialDays: 14 },
});

成功レスポンス (200)

{
  "data": {
    "product": {
      "id": "PROD_3F7H2J5L8N1Q4S6U",
      "storeId": "STO_2D5F8G3H1K4M6N9P",
      "name": "Pro Plan",
      "description": "Full access to all Pro features.",
      "billingPeriod": "monthly",
      "prices": {
        "USD": { "amount": "29.00", "taxCategory": "saas" },
        "EUR": { "amount": "27.00", "taxCategory": "saas" }
      },
      "media": [],
      "successUrl": "https://example.com/welcome",
      "metadata": { "trialDays": 14 },
      "status": "active",
      "createdAt": "2026-03-30T10:30:00.000Z",
      "updatedAt": "2026-03-30T10:30:00.000Z"
    }
  }
}

レスポンスフィールド

レスポンスは data.product でラップされます。商品オブジェクトは、商品とバージョンのフィールドを結合したフラット化された詳細ビューです。
フィールド説明
idstring商品 ID(PROD_xxx
storeIdstringStore ID(STO_xxx
namestring商品名(現在のバージョンから)
descriptionstring | null商品説明(現在のバージョンから)
billingPeriodstring請求サイクル: weeklymonthlyquarterly、または yearly
pricesobjectマルチ通貨価格マップ(以下参照)
mediaarrayメディアアイテム(現在のバージョンから)
successUrlstring | null成功時のリダイレクト URL(現在のバージョンから)
metadataobjectカスタムメタデータ(現在のバージョンから、trialDays を含む場合あり)
statusstring現在の環境でのステータス: active または inactive
createdAtstring商品作成タイムスタンプ(ISO 8601)
updatedAtstring商品最終更新タイムスタンプ(ISO 8601)
レスポンスの価格オブジェクト(通貨ごと):
フィールド説明
amountstring表示フォーマット文字列としての価格(例:"29.00"
taxCategorystring税計算用のカテゴリ

エラー

リトライポリシー:4xx は一切リトライしない — リクエストを修正してから再送信。5xx は指数バックオフでリトライ(5s 開始、最大 3 回)。
ステータスerrors[0].message意味推奨処理
400Missing header: x-context-merchant-idマーチャントコンテキスト header が転送されていないSDK 設定を修正
400Missing or invalid header: x-context-environment環境 header が欠落、または test / prod ではないX-Environmenttest または prod に設定
400Missing required field: storeId / Missing required field: name / Missing required field: prices (must have at least one currency)必須フィールド欠落フィールドを追加して再送信
400Expected format: STO_xxx, got "X"storeId が正しい Short ID ではないSTO_ 接頭辞付きの Short ID を使用
400Invalid or missing billingPeriodbillingPeriodweekly / monthly / quarterly / yearly の集合に含まれない4 つの許可値のいずれかに変更
400Invalid currency code: "X". Must be 3 uppercase letters (e.g., "USD", "EUR", "JPY")prices のキーが ISO 4217 コードに準拠していない3 文字の大文字を使用
400Invalid amount for X: "Y". Must be a positive number string (e.g., "9.99", "1000")金額文字列がパースできない正の十進数文字列を使用
401Unauthorized認証失敗API Key、タイムスタンプ、署名を確認
404Store not foundデコード後の storeId が存在しない(外部キー制約)ストアが現在のマーチャントに帰属することを確認
500Internal server error一時的な下流障害指数バックオフでリトライ(5s 開始、最大 3 回)