スタンプ更新API (v2)

スタンプ更新APIは、発行済みスタンプの情報を更新するための機能です。

単なる情報変更に加え、スタンプ数の増減、特典利用の処理、PINのリセットなどが可能で、ユーザーの蓄積状態を直接コントロールできます。

このAPIはパーソナルプラン以上で利用できます。

PUT

/api/stamp/v2/update

{
    "stampIdx": 1457,
    "cardIdx": 172,
    "stamps": 7,
    "useYn": "Y",
    "onsiteToken": "QsBkV0ryiCkxiV4KUNJBSWQcR8MzSlvez4ntLh2Tt2M",
    "resetPinYn": "Y",
    "userEml": "example@gmail.com",
    "branchIdx": 11,
    "storeIdx": 22,
    "useScope": "BRANCH",
    "useBranchIdx": 11
}

Request Parameters

stampIdx integer required
スタンプIDX。
cardIdx integer
カードIDX。
カードIDXはダッシュボードの「スタンプカード」ページで確認できます。
stamps integer
スタンプに貯められた押印の数を指定します。
現在顧客が集めたスタンプの合計数を示します。値を変更するとスタンプの進捗が更新され、増減の両方が可能です。
すべてのスタンプが埋まった場合(stamps = カードに設定された最大スタンプ数)、useYnをYに変更して特典使用状態として処理する必要があります。
resetPinYn string
Default:N
Enum:
YN
スタンプを利用する顧客のPINコードを初期化するかどうかを指定します。
Y: 顧客が設定したPINコードを初期化します。初期化後、顧客はスタンプページにアクセスした際に新しいPINコードを再設定する必要があります。
N: 既存のPINコードを維持します。
useYn string
Default:N
Enum:
YN
スタンプの特典利用状況を指定します。
Y: 顧客がすべてのスタンプを集め、特典(例:無料ドリンク、割引など)を利用した状態です。
特典利用後、このスタンプは無効化され、新しいスタンプを発行する必要があります。
N: まだ特典を利用していない状態です。
NからYへ変更する場合は、保存されているスタンプ数がカードの最大スタンプ数に達している必要があり、 現場用パスワードが設定されたスタンプではonsiteTokenを併せて送信する必要があります。
onsiteToken string
現場処理用の短期交換トークン。v2はパスワードの平文(onsitePwd)を受け付けません。
スタンプにonsiteYn = Yが設定されている場合、検証API(Validate)の応答にあるonsiteTokenを そのまま送信してください。
トークンを使うリクエストにはIdempotency-Keyが必須です。同じkeyの再試行は最初の結果を そのまま再生し、別のkeyで同じトークンを使うと400(エラーコード1228)で拒否されます。
検証で処理店舗を指定した場合、このリクエストの処理店舗も同じでなければなりません。
domain string
Default:https://vvd.bz
スタンプドメイン。
値が空の場合、デフォルトドメインが使用されます。
プレミアムプラン以上では、「リンクドメイン管理」で登録されたカスタムドメインを指定できます。
strtYmd date
スタンプの有効開始日。例:2025-01-01
endYmd date
スタンプの有効期限日。例:2025-12-31
有効期限は本日から最長5年まで設定できます。
activeYn string
Default:Y
Enum:
YN
スタンプの有効状態を示します。
無効化されている場合、顧客はスタンプを使用できません。
memo string
内部参照用メモ。
userId string
ユーザーID。
スタンプ発行対象者を管理するために使用されます。
通常はウェブサイト会員のログインIDを入力します。
指定されていない場合、システムによって自動的にユーザーIDが生成されます。
userNm string
ユーザー名。内部管理用。
userPhnno string
ユーザーの連絡先。内部管理用。
userEml string
ユーザーのメールアドレス。内部管理用。
userEtc1 string
追加の内部管理用フィールド。
userEtc2 string
追加の内部管理用フィールド。
branchIdx integer
発行支店IDX。省略した場合は本社発行となり、0を送ると本社に戻します。
ビジネスプラン以上でご利用いただけます。
storeIdx integer
発行店舗IDX。指定すると、その店舗が属する支店が発行支店になります。異なる支店を一緒に送るとエラーになります。
useScope string
利用可能範囲。ALL(すべての店舗)またはBRANCH(特定の支店)のみ指定できます。省略時はALLです。
useBranchIdx integer
利用可能支店IDX。useScope = BRANCHの場合のみ必要で、ALLのときは常に空です。
{
    "code": 0,
    "message": "",
    "result": null
}

Response Parameters

code integer
応答コード: 0 = 成功、それ以外の値 = エラー
message string
応答メッセージです。応答コードが0でない場合、エラーメッセージが返されます。
result null

数値パラメータの検証

数値で受け取るパラメータに数値以外の値や、サーバーが処理できる範囲を超える数値を送ると、リクエストは400(エラーコード653)で直ちに拒否されます。

この場合、スタンプ情報と付与履歴は一切変更されず、イベント記録やWebhook送信も発生しません。失敗レスポンスを受け取った場合は何も保存されていない状態です。

発行支店・店舗と利用可能範囲

ここで指定する値は発行時点で保存されるポリシーです。 「どこで発行されたか」(発行支店・発行店舗)と「お客様がどこで利用できるか」(利用可能範囲・利用可能支店)は 異なる概念のため、パラメータも分かれています。

パラメータ 意味 説明
branchIdx 発行支店 省略すると本社発行になります。0を送ると本社に戻します。
storeIdx 発行店舗 指定すると、その店舗が属する支店が発行支店になります。異なる支店を一緒に送ると拒否されます。
useScope 利用可能範囲 ALL(すべての店舗)またはBRANCH(特定の支店)。省略時はALLです。
useBranchIdx 利用可能支店 useScope=BRANCHの場合のみ必要です。ALLのときは常に空です。

使用できないパラメータ — processStoreIdx(処理店舗)は 検証・利用・付与・差し引きが実際に行われた店舗を指す値のため、このAPIでは使用できません。 一緒に送ると400(エラーコード1227)で拒否されます。

支店・店舗機能はビジネスプラン以上でのみご利用いただけます。

Idempotency-Key

ネットワークエラーで応答を受け取れなかったときに安全に再試行するには、Idempotency-Keyヘッダーに リクエストごとに一意の値を入れて送信します。本文のrequestIdでも送れますが、 両方を送って値が異なる場合は拒否されます。 使用できる形式は英数字と. _ : -を組み合わせた8〜64文字です。

同じkeyで同じリクエストを再送すると、再処理せずに最初の結果をそのまま返します。 重複して処理されることはなく、Webhookも再送されません。

同じkeyは同じ論理操作の再試行にのみ使用してください。 異なる操作には必ず新しいkeyを使用してください。 同じkeyを異なるリクエスト内容や別の操作に使用すると409で拒否される場合があります。

スタンプ数を直接制御する理由

スタンプシステムを運用する中で、自動付与だけではなくスタンプ数を直接調整する必要が生じます。

誤付与の修正、キャンペーンボーナスの付与、管理者による手動調整が代表的なケースです。

stamps パラメータを設定することで、既存の値を上書きせずに増減できます。
ただし、最大スタンプ数に到達した場合は、useYn を Y に設定して特典利用として処理する必要があります。

特典利用とスタンプ再発行のフロー

useYn を Y に設定すると、そのスタンプは特典利用済みとして扱われます。

利用後に再度スタンプを開始するには、スタンプ生成APIで新しいスタンプを発行します。
この流れはスタンプ型リワードの基本サイクルです。
特典利用 → 新規発行 → 再付与 を自動化することで、継続的な来店や利用を促進できます。

店頭認証トークン (onsiteToken)

v2は店頭用パスワードの平文(onsitePwd)を受け付けません。 検証API(Validate)が返したonsiteTokenをそのまま送信してください。 onsitePwdだけを送信した場合や、onsiteTokenと一緒に送信した場合は、 400(エラーコード1227)で拒否されます。

トークンを使用するリクエストではIdempotency-Keyが必須です。 同じIdempotency-Keyで再試行すると、最初の処理結果がそのまま返されます。 同じトークンを別のIdempotency-Keyで再利用すると、 400(エラーコード1228)で拒否されます。

検証した店舗と実際に処理する店舗は同じである必要があります。 検証時にprocessStoreIdxを指定した場合、このリクエストでも同じ店舗を使用する必要があります。 店舗を指定せずに検証したトークンへ、後から店舗を追加することはできません。

有効期限切れ、改ざん、使用済み、バインディング不一致はいずれも1228で応答します。 原因を個別に公開すると、第三者が別のトークンを使って内部状態を推測できるためです。

店頭認証を使用しないリソース(onsiteYn = N)にはトークンは必要ありません。 v1は従来どおりonsitePwdの平文を受け付けます。

このAPIでは、実際に特典利用への遷移(N → Y)が発生する場合にのみトークンを使用します。 メモ、期間、有効状態だけを変更する通常の更新リクエストにトークンを送信すると、 400(エラーコード1227)で拒否されます。 リクエストにuseYn = Yが含まれていても、実際のN → Y遷移が発生しない場合 (すでに特典利用済みのスタンプなど)、トークンは消費されません。

このAPIは処理店舗パラメータ(processStoreIdx)を受け取りません。 特典利用が処理される場合、処理場所はリクエスト値ではなく、 検証時にトークンへバインドされた店舗から復元され、イベントとWebhookに記録されます。 通常の更新にはこの処理場所は適用されません。

同じトークンは特典利用API(Redeem)でも使用できますが、 2つのAPIのどちらか一方で1回だけ使用できます。 一方のAPIですでに消費されたトークンを、もう一方で再利用すると拒否されます。

PIN初期化が必要な場面

resetPinYn を Y に設定すると、ユーザーのPINがリセットされます。

PINを忘れた場合、端末変更時、またはセキュリティ上の理由で再設定が必要な場合に使用します。

リセット後、スタンプページにアクセスすると新しいPINの設定が求められます。N または未指定の場合は既存のPINが維持されます。

活用例

  • 付与ミスの修正: 誤って付与されたスタンプ数を手動で修正
  • キャンペーン条件変更対応: 実施中の条件変更をデータに反映
  • ユーザー再認証: PINリセットによるオフライン認証の再設定
  • 無効化処理: キャンペーン終了時にスタンプを無効化

利用時の注意点

  • stamps の変更は既存の付与履歴と整合性を保つように注意してください
  • 利用処理(useYn)後は、元に戻せない前提で設計することを推奨します
  • 運用ログおよび変更履歴を適切に管理することが重要です