コンテンツにスキップ

Gift Card Hero REST API

REST API を使うと、CRM、分析ダッシュボード、ロイヤルティプラットフォーム、フルフィルメントサービスなどの外部システムから、プログラムでギフトカードを管理できます。

REST API の設定


ベース URL

すべての API リクエストは、次のベース URL を使用します:

https://gifthero.syncu.be/api/external

認証

すべてのリクエストには、Authorization ヘッダーに Bearer トークンを含める必要があります:

Authorization: Bearer YOUR_API_TOKEN

API トークンを取得するには、左側のナビゲーションで For developers に移動し、Enable REST API にチェックを入れて保存します。Send me access token をクリックすると、ページに表示されているストアの連絡先メールアドレスにトークンが送信されます。

トークンは、置き換えるか無効化するまで期限切れになりません。パスワードと同様に扱ってください。連携先のシークレット設定に保存し、チャット、チケット、共有ドキュメントに貼り付けないでください。

API トークンの管理

トークンは1つだけです。 ストアの API トークンは1つだけです。API を呼び出すすべてのシステム(POS、CRM、パートナーのサービスなど)が、同じトークンを使用します。

新しいトークンを送信すると、古いトークンは置き換えられます。 Send me access token をクリックするたびに新しいトークンが発行され、以前のトークンは直ちに使えなくなります。すべての連携先を、すぐに新しいトークンに更新してください。トークンを再確認するだけの場合は、新しいトークンを送信するのではなく、以前のメールを探してください。

トークンの無効化。 トークンが漏えいした可能性がある場合や、そのトークンを持っていたパートナーとの取引が終了した場合は、For developers ページで Revoke access token をクリックし、確定してください。トークンはすぐに使えなくなり、新しいトークンは発行されません。準備ができたら、Send me access token をクリックして新しいトークンを発行します。

REST API をオフにする。 Enable REST API をオフにして保存すると、トークンも無効化されます。API を再びオンにした後は、新しいトークンを自分宛に送信してください。

連携先に表示されるもの。 置き換えられたトークンまたは無効化されたトークンを使ったリクエストには、401 が返されます:

{
  "error": {
    "statusCode": 401,
    "name": "UnauthorizedError",
    "message": "Error verifying token : The token has been revoked or replaced."
  }
}

対処方法は常に同じです。現在のトークンを Authorization ヘッダーに設定してください。

トークン ID が導入される前に発行されたトークンは、新しいトークンを送信するか、無効化するまで、引き続き使用できます。

その他の認証エラー:

ステータス 意味
401 Authorization ヘッダーがないか、Bearer 形式ではないか、トークンが無効です
402 ストアに有効な Gift Card Hero プランがありません

エンドポイント

ギフトカードの一覧

GET /gift-cards

パラメーター:

パラメーター 型 説明
status 文字列 ギフトカードのステータスで絞り込みます
limit 整数 結果の最大件数(最大 250)
since_id 文字列 指定したギフトカード ID より後の結果を返します
fields 文字列 含めるフィールドのカンマ区切りのリスト

このリクエストは Shopify のギフトカード一覧に渡されるため、Shopify 独自のパラメーターも適用されます。レスポンスの各カードには、recipient オブジェクト(id、email、name)または null が含まれます。Gift Card Hero が完全なコードを記録している場合は、code フィールドも含まれます(重要な注意事項 を参照)。

HEAD /gift-cards リクエストは、本文なしで 200 を返します。一部の HTTP クライアントは、事前確認としてこれを使用します。


トランザクション付きのギフトカード一覧

GET /gift-cards/transactions

ギフトカードを新しい順に返します。各カードには、直近最大 50 件のトランザクションが含まれます。カーソルベースのページネーションに対応しています。

ページネーション:

パラメーター 型 説明
limit 整数 1ページあたりのギフトカード数(デフォルトは 50)
page_info 文字列 次のページの結果を示すカーソル

フィルター:

フィルター 型 説明
query 文字列 検索クエリ(Shopify のギフトカード検索構文)
balance_status 文字列 full、partial、empty、full_or_partial のいずれか
created_at 文字列 作成日で絞り込みます
expires_on 文字列 有効期限日で絞り込みます
source 文字列 manual、purchased、api_client のいずれか
status 文字列 disabled、enabled、expired、expiring のいずれか
initial_value 文字列 初期金額で絞り込みます
id 文字列 ギフトカード ID で絞り込みます

複数のフィルターを組み合わせた場合、すべてのフィルターは AND 条件で適用されます。

レスポンス:

各ギフトカードには、id、balance、currency、initial_value、created_at、updated_at、disabled_at、customer_id、recipient、note、expires_on、template_suffix、last_characters、order_id、transactions、issued_by が含まれます。レスポンスにはギフトカードのコードは含まれません。各トランザクションには、id、amount(引き落としの場合は負の値)、processed_at、note、pos_user、pos_order_name が含まれます。

トランザクション ID:

transactions[].id は、ギフトカードのトランザクションの数値の Shopify ID です。gid://shopify/GiftCardDebitTransaction/… または gid://shopify/GiftCardCreditTransaction/… の GID 末尾の数字です。以前のバージョンの API では、ここは null を返していました。

POS フィールド:

Gift Card Hero POS で発行または利用されたギフトカードには、その操作を行ったレジ担当者の情報が含まれます。これらのフィールドは、標準のレスポンスに追加されます:

フィールド 型 説明
transactions[].pos_user オブジェクトまたは null POS で行われた引き落としの場合は { "username": "woodgrove", "name": "Woodgrove" }。それ以外は null
transactions[].pos_order_name 文字列または null その引き落としについて POS で入力された注文名(ある場合)。それ以外は null
issued_by オブジェクトまたは null POS で発行されたカードの場合は { "username", "name", "issued_at" }。それ以外は null

POS のアクティビティログには Shopify のトランザクション ID が保存されないため、引き落としは、カード、金額、時刻によって POS での利用と照合されます(利用は、トランザクションの数秒前から1分後までの間にログされている必要があります)。オンラインの支払い、Shopify 管理画面での変更、対応する POS の記録がない引き落としには null が設定されます。POS ユーザーが後に削除されている場合、name は null になります。


1枚のギフトカードを取得する

GET /gift-cards/{gift_card_id}

ID を指定して、1枚のギフトカードの詳細を返します。recipient と、Gift Card Hero が保持している場合は code が含まれます。


ギフトカードを作成する

POST /gift-cards

リクエストボディ:

{
  "note": "Loyalty reward",
  "initial_value": "50.00",
  "code": "ABCD-EFGH-IJKL-MNOP",
  "template_suffix": "custom"
}
フィールド 型 必須 説明
note 文字列 いいえ ギフトカードの社内用メモ
initial_value 文字列 はい 初期残高
code 文字列 いいえ 任意のギフトカードコード(一意である必要があります。省略すると自動生成されます)
template_suffix 文字列 いいえ Shopify のテンプレートサフィックス
customer_id 整数 いいえ カードを所有する Shopify の顧客
email 文字列 いいえ 顧客のメールアドレス。customer_id が送信されていない場合に使用されます。Gift Card Hero は顧客を検索するか、gifthero:import のタグを付けて新規作成します

リクエストボディは Shopify のギフトカードエンドポイントに渡されます。このエンドポイントは expires_on などの追加フィールドも受け付けます。レスポンスは Shopify のギフトカードで、完全な code が含まれます。

重要: 必要な場合は、作成時のレスポンスから完全なコードを保存してください。後のレスポンスに完全な code が含まれるのは、Gift Card Hero がそのコードを記録しているカードだけです。それ以外の場合は、末尾4文字(last_characters)のみが返されます。


ギフトカードの残高を更新する

PUT /gift-cards/{gift_card_id}/balance

リクエストボディ:

{
  "balance": "100.00"
}

ギフトカードの残高を、指定した値に設定します。"+25.00" や "-10.00" のように符号を付けた値は、代わりに現在の残高への調整として適用されます。残高が変わらない場合は、現在の残高が返され、何も記録されません。ストアで Increase limit がオンの場合、チャージ額は Shopify の標準のギフトカード上限を超えることができます。

これは残高の修正です。お客様への通知は送信されず、店舗も記録されません。お客様がレジでカードを使う場合は、代わりに ギフトカードを利用する を使用してください。


ギフトカードを利用する

POST /gift-cards/{gift_card_id}/redeem

Shopify のチェックアウトの外で、サードパーティの POS またはレジアプリからギフトカードを引き落とします(利用処理)。カード保有者は、店舗名を含むストアの利用通知(メールまたは SMS)を受け取ります。Redemption notifications の設定で Who gets notified が指定されている場合は、代わりに購入者が受け取るか、両方が受け取ります。また、利用は店舗名とともに Gift Card Hero のレポートに表示されます。Shopify の giftCardDebit を直接呼び出す代わりに、この方法を使用してください。直接の引き落としでは、店舗名も通知も送信されません。

利用と残高の更新の違い: 誰にも通知せずに残高を値に設定する場合は、ギフトカードの残高を更新する を使用してください。お客様がカードを使い、通知と店舗の記録を残したい場合は、ギフトカードを利用する を使用してください。

リクエストボディ:

{
  "amount": "1500.00",
  "branch": "Westgate",
  "reference": "pos-app:7f3c2b9e-0d1a-4c55-9b7e-2f8a6c1d3e4f",
  "note": "Table 12"
}
フィールド 型 必須 説明
amount 文字列 はい 利用する金額です。0より大きく、カードの残高以下で、カードの通貨で指定し、小数点以下は2桁までとします
branch 文字列 はい 店舗名または拠点名です。利用メールと SMS(Redemption notifications で Include the store location がオンの場合)およびレポートに表示されます
reference 文字列 はい この利用に対する一意の ID です。最大 255 文字。再試行と重複 を参照してください
note 文字列 いいえ Shopify のギフトカードのトランザクションに記録されます。Gift Card Hero はメモに [ref:<reference>] を追加するため、API によるすべての利用を、Shopify 管理画面で対応する reference と照合できます

レスポンス(200):

{
  "id": 661944893757,
  "last_characters": "7nsf",
  "amount": "1500.00",
  "currency": "KES",
  "balance_before": "5090.00",
  "balance": "3590.00",
  "branch": "Westgate",
  "reference": "pos-app:7f3c2b9e-0d1a-4c55-9b7e-2f8a6c1d3e4f",
  "processed_at": "2026-10-12T10:30:00Z",
  "notification": "queued",
  "duplicate": false
}
フィールド 説明
notification queued: 利用通知がストアの Redemption notifications 設定に渡されました。送信するかどうかは、この設定によって決まります(すべての利用、またはカードの残高を使い切った場合のみ)。disabled: ストアで利用通知がオフになっています
duplicate この reference がすでに処理済みで、レスポンスが元の結果である場合は true

エラー:

エラーは通常の形式で返されます: {"error": {"statusCode": 422, "name": "...", "message": "..."}}。

ステータス 意味 対処方法
400 amount、branch、reference のいずれかがないか、無効です リクエストボディを修正してください
401 トークンがないか、無効か、無効化されているか、新しいトークンに置き換えられています Authorization ヘッダーを確認してください。トークンが無効化または置き換えられている場合は、新しいトークンを取得してください
403 アプリにストアのアクセススコープが不足しています ストアのオーナーが、Shopify 管理画面でアプリの更新された権限を承認する必要があります
404 ギフトカードが見つかりません ギフトカード ID を確認してください
409 この reference が、別のカードまたは金額ですでに使用されているか、この reference のリクエストがまだ処理中です 新しい利用の場合は、新しい reference を使用してください。リクエストがまだ処理中の場合は、数秒待ってから、同じ reference で再試行してください
422 カードが無効または期限切れであるか、金額が残高を超えています。message に理由が示されます。残高は変わりません 原因を修正してください。reference は使用済みになっていないため、同じ reference で再試行してください
429 Shopify がストアのリクエストを制限しています 間隔を空けて、同じ reference で再試行してください
500 Shopify で結果を確認できませんでした 同じ reference で再試行してください。カードが二重に引き落とされることはありません

失敗したリクエスト(404 または 422)では、reference は使用済みになりません。

再試行と重複

利用ごとに1つの reference を生成し、同じ利用を再試行する場合にのみ再利用してください。リクエストがタイムアウトした場合やネットワークで失敗した場合は、同じ reference で再試行してください。これは常に安全です。カードが二重に引き落とされることはなく、"duplicate": true を伴って元の結果が返されます。


ギフトカードを更新する

PUT /gift-cards/{gift_card_id}

更新できるのは次のフィールドのみです:

フィールド 型 説明
expires_on 文字列 有効期限日
note 文字列 社内用メモ
template_suffix 文字列 Shopify のテンプレートサフィックス
customer_id 整数 カードを所有する Shopify の顧客。カードを作成するときと同様に、代わりに email を送信することもできます

Gift Card Hero がコードを記録している場合、レスポンスには code が含まれます。


ギフトカードを無効にする

POST /gift-cards/{gift_card_id}/disable

ギフトカードを完全に無効にします。この操作は元に戻せません。無効化されたギフトカードを返します。


ギフトカードを検索する

GET /gift-cards/search

パラメーター:

パラメーター 型 説明
order 文字列 並び順
query 文字列 検索クエリ(例: last_characters:mnop)。受取人に送られたカードを探すには recipient:name@example.com を使用します
limit 整数 結果の最大件数
fields 文字列 含めるフィールドのカンマ区切りのリスト

インデックス化されたフィールド(検索クエリで利用可能):

created_at, updated_at, disabled_at, balance, initial_value, amount_spent, last_characters


注文にギフトカードコードを割り当てる

POST /gift-cards/assign-to-order

アプリの外でコードを生成しているストア向けに、独自のギフトカードコードを Shopify の注文に割り当てます。Regular products as gift cards の設定で Skip gift codes generation がオンの場合にのみ動作します。オフの場合は 400 を返します。また、orderId が数値でない場合、またはストアにすでに同じコードが存在する場合も 400 を返します。注文が見つからない場合は 404 を返します。

1つのコードの割り当てと、複数のコードの割り当ての両方に対応しています。

1つのコード:

{
  "orderId": "1234567890",
  "giftCode": "ABCD-EFGH-IJKL-MNOP"
}

複数のコード:

{
  "orderId": "1234567890",
  "giftCodes": [
    { "lineItemId": "111", "code": "ABCD-EFGH-IJKL-MNOP" },
    { "lineItemId": "222", "code": "QRST-UVWX-YZ12-3456" }
  ]
}

レスポンス:

{
  "scheduled": true
}

注文に処理するギフトカードがない場合、scheduled は false になります。


ページネーション

トランザクションのエンドポイントは、カーソルベースのページネーションを使用します。レスポンスには、次のページのカーソルを含む Link ヘッダーが含まれます:

Link: <https://gifthero.syncu.be/api/external/gift-cards/transactions?page_info=CURSOR>; rel="next"

最後のページには、このヘッダーはありません。Link ヘッダーから page_info の値を読み取り、同じフィルターとともに、次のリクエストのクエリパラメーターとして渡してください。次のページの URL には、すでにこれらが含まれています。


重要な注意事項

  • コードの一意性 — 任意のコードでギフトカードを作成する場合、各コードは一意である必要があります。重複したコードを送信すると、API はエラーを返します。
  • コードの表示 — 作成時のレスポンスには、完全なコードが含まれます。後のレスポンスで code フィールドが表示されるのは、Gift Card Hero が完全なコードを記録しているカードだけです(Gift Card Hero が生成したカードと、割り当てたコード)。それ以外の場合は、末尾4文字(last_characters)のみが返されます。トランザクションのエンドポイントは、コードを返しません。
  • 利用の再試行 — ギフトカードを利用する場合は、必ず一意の reference を送信し、タイムアウト後は同じ reference で再試行してください。再試行と重複 を参照してください。
  • レート制限 — リクエストは Shopify に渡されるため、ストアに対する Shopify の制限が適用されます。429 レスポンスを受け取った場合は、間隔を空けて再試行してください。
  • Postman コレクション — /gift-cards/transactions と /gift-cards/assign-to-order を除く、ギフトカードのエンドポイントを含みます。

Postman コレクション

API をすばやく試せるよう、Postman コレクションをダウンロードしてください:

Postman コレクションをダウンロード