Giftpack API を使うと、ギフト・ノベルティ(swag)・リワードにまたがる関係性重視の贈答フロー(relationship-driven gifting workflows)をグローバルにプログラムできます。
個別のリワードポータルを新規構築したり、ベンダーを手作業で調整したりする代わりに、既存の CRM、HRIS、社内オペレーション基盤から贈答イベント(gifting events)を直接オーケストレーションできます。API により、アプリケーションはエンゲージメントの瞬間をプログラムでトリガー・管理・監視でき、Giftpack は業務実行(fulfillment)、在庫可用性、物流、コンプライアンスを担います。
Giftpack は従来の EC API のような構造ではありません。商品カタログとチェックアウト中心ではなく、贈答(gifting)を関係イベントとしてモデル化します。受取人の属性、タイミング、ビジネスコンテキストは、送付アイテムと同等に重要な入力として扱われます。これにより、オンボーディング、記念日、商談成約、リテンション施策、顧客エンゲージメントのマイルストーンなどの実業務トリガーに自然にマッピングできます。
API は redemption ステータス、fulfillment 進行、配送トラッキング(delivery tracking)を含む各段階のライフサイクル可視性を提供します。これらのエンドポイントにより、成果測定、フォローアップ自動化、レポーティングや業務フローへの贈答(gifting)組み込みが可能になります。
システムレベルでは、Giftpack は次のライフサイクルモデルに従います。
Intent → Campaign → Recipient → Redemption → Fulfillment → Tracking
各ステージはエンゲージメントライフサイクルにおける状態遷移を表します。
Intent はビジネストリガーまたは目的を定義します。Campaign はエンゲージメントのコンテナとして機能します。Recipient はキャンペーンに参加する対象を表します。Redemption は受取人のアクションを捉えます。Fulfillment は業務実行プロセスを処理します。Tracking は事後の可視化と分析を提供します。BUSINESS EVENT
│
▼
[ Intent ]
│
│ (同期 API)
▼
[ Campaign Created ]
│
│ (同期 API)
▼
[ Recipient Attached ]
│
│ (同期 API)
▼
[ Redemption Link Issued ]
│
│ ────── ユーザーアクション(非同期) ──────
▼
[ Redemption Claimed ]
│
│ (Webhook: giftee.preparing)
▼
[ Shipment Processing ]
│
│ (Webhook: giftee.shipped)
▼
[ Tracking / Delivered ]
│
│ (Webhook: giftee.delivered / giftee.failed / giftee.returned)
▼
[ Final Tracking State ]
│
│ (Webhook: giftee.reviewed)
●
ライフサイクル前半は API 呼び出しで同期的に開始されます。後半は受取人の行動と業務実行イベント(fulfillment events)により非同期で進行します。即時完了を前提にせず、ステータス項目と webhook イベントを基準に連携してください。
このモデルは、スマート贈答(smart gifting)AutoMatch™ キャンペーン、マーケットプレイス注文(marketplace orders)、ノベルティ運用フロー(swag workflows)、エンタープライズ自動化ユースケース全体で一貫して適用されます。特に非同期・イベント駆動環境で信頼性の高い連携を構築するには、このモデルの理解が不可欠です。

この定義は、Giftpack API 連携で使用する主要なドメインオブジェクトを説明します。 ワークフロー構築前に、オブジェクト同士の関係を理解することが重要です。 Giftpack は次の 3 つの主要レイヤーで構成されます。
エンゲージメントレイヤー (Engagement Layer)コマースレイヤー (Commerce Layer)サプライ & オペレーションレイヤー (Supply & Operations Layer)このレイヤーは、送信者と受信者の関係ライフサイクルをモデル化します。 イベント駆動 (event-driven) で、非同期処理が多いのが特徴です。
ギフトやリワードを受け取る可能性がある実在の個人(従業員、顧客、パートナー)です。API 上で Recipient は Giftpack ワークスペース内の永続的な識別子です。Recipient は Campaign と独立して存在でき、時間の経過とともに複数の Campaign に参加できます。
ターゲティングや一括割り当てに使う論理的な受信者集合です。グループは組織上の構造であり、取引を表すものではありません。
Campaign は単一のエンゲージメント意図を表します。
定義する要素:
Campaign は注文(order)ではありません。 Campaign は redemption と fulfillment イベントが進行するライフサイクルコンテナです。
Recipient が Campaign に紐づくと Giftee になります。 Giftee はキャンペーン単位での参加状態を表します。 この区別は重要です。
Recipient = identityGiftee = campaign-bound stateCampaign の表示・伝達レイヤーを定義し、次を含みます。
Template はコミュニケーションに影響し、fulfillment ロジックには影響しません。
受信者がギフトを受け取るために行うアクションを表します。 発生経路:
Redemption は状態を “invited” から “claimed” へ遷移させます。
Giftee がギフトを受け取るための一意 URL です。
Campaign Template を用いて redemption link を配信するメールです。
このレイヤーは取引と fulfillment 関連処理を扱います。 Campaign ワークフローとは独立して動作する場合があります。
送信者が直接選択する固定商品です。 通常は注文作成後すぐに fulfilled されます。
1 人以上の受信者向けの直接購入トランザクションです。 Campaign 型の redemption を経由せず、fulfillment に直接進む場合があります。 Marketplace Order ≠ Campaign。
Marketplace Order の fulfillment 対象として割り当てられた受信者です。
Giftpack の在庫・倉庫システムで管理されるカスタマイズ可能商品です。 次を要する場合があります。
Marketplace または Swag カタログ内の販売可能コンテナオブジェクトです。
商品の購入可能な具体構成です。例:
トランザクションは常に Product Variant 単位で発生します。
このレイヤーは fulfillment と vendor 管理を支えます。 多くの連携では抽象化されますが、ステータス遷移理解には重要です。
以下を担う運用レイヤー:
Giftpack エコシステムへ商品を供給する vendor です。
カタログ品質、onboarding、運用管理のために Procurement Office が監督する Provider です。
API 操作で Provider を参照するための一意識別子です。
以下は各エンティティの関係を示します。
Recipient
└─ may belong to Recipient Group
└─ becomes Giftee when attached to Campaign
Campaign (Engagement Container)
├─ defines Redemption rules
├─ manages Giftee states
└─ may generate Fulfillment Orders
Commerce Layer
├─ Marketplace Order (direct transaction)
└─ Swag Order (inventory-based transaction)
Redemption
├─ Link-based
├─ Email-based
└─ Transitions state before fulfillment

Giftpack Integration API へのすべてのリクエストは、有効な API Key による認証が必要です。
すべてのエンドポイントで認証は必須であり、workspace 境界で強制されます。 未認証または不正な認証リクエストは、業務ロジック実行前に拒否されます。
各 Giftpack workspace は、Giftpack ダッシュボードで 1 つ以上の API Key を発行できます。
API Key の用途:
API Key は workspace-scoped です。
発行元 workspace 以外のリソースにはアクセスできません。
Giftpack は workspace 間で API Key を共有しません。
セキュリティ通知: API Key は workspace レベルのリソースへアクセスできます。機密資格情報として取り扱ってください。
API Key 作成手順:
API Key は作成後すぐに有効化されます。 キー生成イベントは監査・追跡のため内部ログに記録されます。
重要: API Key は安全に保管し、client-side コードや公開リポジトリに公開しないでください。
すべてのリクエストで X-API-KEY header に API Key を含めてください。
GET /v1/recipients HTTP/1.1
Host: developer.giftpack.ai
X-API-KEY: YOUR_API_KEY
有効な API Key がないリクエストは認証エラーとなります。 認証はリクエスト処理とリソース評価より先に実行されます。
認可は workspace レベルで適用されます。 API Key がアクセスできるのは次のみです:
workspace をまたぐアクセスは禁止されています。 認可判定はサーバー側で実行され、クライアント引数で上書きできません。
エンタープライズ連携では、適切なキーライフサイクル管理を実装してください。
推奨事項:
API Key が失効された場合、そのキーの後続リクエストはすべて拒否されます。
Giftpack は API Key の自動ローテーションを行いません。キー管理は連携側の責任です。
すべての API リクエストは HTTPS を使用する必要があります。
TLS 1.2転送中データは業界標準 TLS で暗号化されます。
対象例:
Giftpack は非暗号化接続をサポートしません。
プラットフォーム安定性と公平利用のため、API リクエストにはレート制限が適用されます。 上限超過時の応答:
429RATE_LIMIT_EXCEEDED エラーコード連携側は以下を実装してください:
高トラフィックまたはバースト型ワークロードについては Giftpack へご相談ください。
Giftpack API は個人識別情報(PII)を処理する場合があります。例:
開発者の責任:
Giftpack は贈答・リワードワークフロー実行目的に限定してデータを処理します。 受信者データを広告や無関係なプロファイリングに使用しません。
エンタープライズ環境では、連携側で以下を推奨します:
Giftpack は以下を内部記録します:
認証・認可エラーは一貫した形式です。
{
"error_code": "UNAUTHORIZED",
"message": "Invalid or missing API key",
"action": "Verify your API key and include it in the X-API-KEY header"
}
代表的な認証関連エラーコード:
UNAUTHORIZEDFORBIDDENRATE_LIMIT_EXCEEDED本番運用では以下を推奨します:
API Key の侵害が疑われる場合:

Giftpack API は標準的な HTTP ステータスコードを使用し、構造化されたエラー payload を返します。
すべてのエラーレスポンスには、機械可読なエラーコードと request_id が含まれます。
サポートへ問い合わせる際は、必ず request_id を共有してください。
すべてのエラーは次の構造に従います:
{
"error": {
"code": "invalid_request",
"message": "Recipient email is required.",
"request_id": "req_123"
}
}
code – 機械可読のエラー識別子message – 人間可読の説明request_id – デバッグ追跡用の一意なリクエスト ID運用トラブルシュートのため、request_id はログに保存してください。
Giftpack は標準 HTTP ステータス意味論を使用します:
200 / 201 – リクエスト成功400 – バリデーション失敗または不正なリクエスト401 – API Key がない、または無効403 – 権限不足404 – リソース未検出409 – 競合(例:重複リソースや状態違反)429 – レート制限超過5xx – サーバー内部エラーすべてのエラーがリトライ対象ではありません。
リトライしてよいケース
429(レート制限超過)5xx(サーバーエラー)リトライ時は exponential backoff を使用してください。 即時かつ連続的な強いリトライは避けてください。
再試行しないケース
400(バリデーションエラー)401 / 403(認証または権限エラー)404(無効なリソース参照)409(業務ロジック競合)これらはクライアント側修正後に再送すべきエラーです。
HTTP 成功レスポンスは、fulfillment 完了を保証しません。
例:
201 Created は campaign 作成成功を示すのみGiftpack の多くの処理は非同期に進行します。
ライフサイクル状態を判断するには:
GET エンドポイントで状態を確認するHTTP 成功は「受理」、業務完了ではないと扱ってください。
連携でリトライを行う場合、重複リクエストによる副作用を防いでください。
該当する場合:
Giftpack はエンドポイント仕様に応じて重複作成を拒否する場合があります。
レート制限超過時:
429 を返却連携側の推奨:
想定外エラーが発生した場合:
request_id を記録request_id を共有これによりサーバーログ上で迅速に追跡できます。

Giftpack のワークフローは非同期です。
API 成功レスポンスは、リクエストが受理されたことのみを示します。 redemption、fulfillment、shipping、delivery などのライフサイクル更新は webhook イベントで通知されます。
本番連携では webhook を主要な状態更新手段として扱う必要があります。 ステータス API のポーリングは整合性確認やリカバリー用途に限定してください。
Webhook イベントタイプは Giftpack ダッシュボードで管理・表示されます。 利用可能なイベントトリガーの確認・設定:
https://giftpack.ai/app/developer/webhooks
ダッシュボード UI が本番利用可能なイベントのソースオブトゥルースです。
現在サポートされる例:
giftee.createdgiftee.launchedgiftee.preparinggiftee.shippedgiftee.deliveredgiftee.failedgiftee.returnedgiftee.reviewedイベント提供範囲は将来変更される可能性があります。常にダッシュボードを参照してください。
Webhook は workspace 単位でダッシュボードから設定します。 各設定には以下が含まれます:
nameendpointevent_typesactive トグルsecret key設定例:
{
"name": "Giftpack Delivery Updates",
"endpoint": "https://example.com/webhooks/giftpack",
"event_types": [
"giftee.created",
"giftee.shipped",
"giftee.delivered"
]
}
1 つの workspace に複数の webhook 設定を作成できます。
Webhook 配信は at-least-once delivery モデルです。
つまり:
エンドポイントが 2xx HTTP ステータスを返せば配信成功とみなされます。
2xx 以外は追加リトライの対象です。
Webhook 受信側は以下を満たしてください:
POST + JSON payload を受け取る2xx HTTP ステータスを返す応答例:
HTTP/1.1 200 OK
Content-Type: application/json
{"ok": true}
重複排除キーとして webhook event ID を使用してください。
Giftpack ダッシュボードには webhook イベントの完全なログがあります。 各イベントには以下が含まれます:
ログ内ステータス:
0 – failed1 – processing2 – successイベント詳細 API は次を公開します:
イベント詳細例:
{
"webhook_event_id": "wev_01H...",
"webhook_setting_id": "whs_01H...",
"webhook_event_type": "giftee.shipped",
"webhook_event_resource_type": "giftee",
"webhook_event_resource_id": "gft_01H...",
"webhook_event_status": 2,
"webhook_event_attempts": 1,
"webhook_event_data": "{...raw payload...}",
"webhook_event_created_at": "2026-02-20T02:00:00.000Z",
"webhook_event_updated_at": "2026-02-20T02:00:01.000Z"
}
各試行レコードには以下を含みます:
このログにより配信トレーサビリティが確保され、デバッグが容易になります。
Giftpack にはダッシュボード内蔵の Webhook テストコンソールがあります。 可能な操作:
用途:
テストレスポンス例:
{
"event_data": {
"type": "giftee.created",
"resource_type": "giftee",
"resource_id": "gft_01H..."
},
"response_http_status": "200",
"response_http_headers": {"content-type": "application/json"},
"response_http_body": "{\"ok\":true}"
}
テストコンソールは本番有効化前の検証用です。
現行 UI では http / https の両方を入力できる場合がありますが、本番連携では必ず HTTPS を使用してください。
HTTPS により:
Webhook を安定運用するため:
Webhook はライフサイクル更新の権威ソースです。 同期 API 成功を最終状態と見なさないでください。
Webhook が Giftpack 由来で改ざんされていないことを保証するため、各リクエストは workspace ごとの secret で署名されます。
本番連携では 署名検証が必須 です。
各 webhook リクエストには次のヘッダーが含まれます:
X-GIFTPACK-SIGNATURE: t=1708459200,v1=abcdef1234567890...
構成要素
t — Unix timestamp(秒)v1 — HMAC SHA-256 署名署名生成式:
HMAC_SHA256(secret, `${timestamp}.${raw_body}`)
raw_body は受信した生データをそのまま使う必要があります。
検証手順:
X-GIFTPACK-SIGNATURE を取得t と v1 を解析expected_signature = HMAC_SHA256(secret, `${timestamp}.${raw_body}`)
v1 と比較リプレイ攻撃防止のため:
時間窓例:
current_time - timestamp <= 300 seconds
例(Node.js)
const crypto = require('crypto');
function verifySignature(rawBody, signatureHeader, secret) {
if (!signatureHeader) return false;
const elements = signatureHeader.split(',');
const timestamp = elements.find(e => e.startsWith('t='))?.split('=')[1];
const signature = elements.find(e => e.startsWith('v1='))?.split('=')[1];
if (!timestamp || !signature) return false;
const payload = `${timestamp}.${rawBody}`;
const expected = crypto
.createHmac('sha256', secret)
.update(payload, 'utf8')
.digest('hex');
const isValid = crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
const currentTime = Math.floor(Date.now() / 1000);
const tolerance = 300;
if (Math.abs(currentTime - Number(timestamp)) > tolerance) {
return false;
}
return isValid;
}
Express 例:
app.post('/webhooks/giftpack',
express.raw({ type: 'application/json' }),
(req, res) => {
const signature = req.headers['x-giftpack-signature'];
const isValid = verifySignature(
req.body.toString(),
signature,
process.env.GIFTPACK_WEBHOOK_SECRET
);
if (!isValid) {
return res.status(400).send('Invalid signature');
}
const event = JSON.parse(req.body.toString());
// Process event safely
res.status(200).json({ ok: true });
});
Webhook secret は:
secret をローテーションした場合、連携側も即時更新してください。
署名検証に失敗した場合:
2xx HTTP ステータスを返す署名失敗が続く場合は以下の可能性があります:
Webhook 配信は at-least-once モデルです。 重複イベントは発生し得ます。

Giftpack API は実際の業務ワークフローを中心に設計されています。
エンドポイントを直接たどるのではなく、まず実装したい業務ケースを選んでください。各ケースでは次を示します:
Webhook 署名検証の詳細は Webhook と非同期イベント を参照してください。
ビジネスシナリオ
実現したいこと:
これは Campaign ベースの Giftee フローです。
ライフサイクル概要
Create Campaign
↓
Add Giftee
↓
Generate Redemption Link
↓
Recipient Claims
↓
Order Processing
↓
Shipped
↓
Delivered / Failed / Returned
POST /v1/campaigns
定義内容:
POST /v1/giftees
各 giftee はキャンペーン内の 1 受取人を表します。
POST /v1/campaigns/{campaignId}/giftees/{gifteeId}/redeemlink
戻り値:
share_claim_link送信方法:
このケースでは giftee ライフサイクル購読を推奨:
giftee.created
giftee.launched
giftee.preparing
giftee.shipped
giftee.delivered
giftee.failed
giftee.returned
giftee.reviewed
これらは各 giftee の運用状態を表します。 Webhook と非同期イベント章で次を確認できます:
ビジネスシナリオ
実現したいこと:
これは Direct Marketplace Order フローです。
ライフサイクル概要
Select Product
↓
Create Marketplace Order
↓
Preparing
↓
Shipped
↓
Delivered / Failed / Returned
GET /v1/providers/{providerCode}/products
このエンドポイントで商品一覧を取得。 必要に応じて詳細取得:
GET /v1/providers/{providerCode}/products/{productId}
選択:
POST /v1/marketplaceorders
指定:
注文は非同期受理され、fulfillment が開始されます。
Marketplace 履約は giftee ライフサイクルへ解決されます:
giftee.preparing
giftee.shipped
giftee.delivered
giftee.failed
giftee.returned
Webhook と非同期イベント章を参照:
ビジネスシナリオ
実現したいこと:
これは Points-based gifting フローです。
ライフサイクル概要
Enable Points
↓
Allocate Points
↓
Recipient Redeems
↓
Giftee Created
↓
Fulfillment Lifecycle
POST /v1/pointrecipients/{memberId}/enablepointfeature
受取人がポイント保有・交換できるようになります。
PATCH /v1/pointrecipients/{memberId}/points
指定:
残高は即時更新されます。
受取人がポイント交換すると:
ポイント交換の結果は giftee ライフサイクルに反映されます:
giftee.created
giftee.preparing
giftee.shipped
giftee.delivered
giftee.failed
giftee.returned
Webhook と非同期イベント章を参照: