Shoply Merchant API の使い方
Shoply Merchant API を使うと、マーチャントは自分の Shoply データを、レポートツール、サポート業務フロー、定期エクスポート、非公開の業務アプリケーションで安全に利用できます。
各連携は、Shoply Settings で作成された、取り消し可能でストア単位にスコープされた認証情報を使って認証されます。Shopify Admin API のアクセストークンを共有する必要はなく、各連携はその認証情報を発行したストアにのみアクセスできます。
Merchant API では何ができますか?
Merchant API では次のことができます。
- 日次、週次、月次のパフォーマンス結果をスプレッドシートやデータウェアハウスにエクスポートする。
- セッション、チャット、検索、商品クリック、カート追加イベント、購入、アトリビューション収益のための非公開ダッシュボードを構築する。
- 顧客アクティビティを監視し、エンゲージメントの異常な変化を見つける。
- サポート、マーチャンダイジング、回答品質改善のためにチャットおよび検索セッションを確認する。
- 顧客の問題を調査するときに、個別の会話タイムラインを取得する。
- Shoply AI で使われるカスタムナレッジを作成、更新、一覧表示、削除する。
- 外部ウェブページ、またはアップロードした PDF、テキスト、Markdown ファイルをナレッジベースに追加する。
- UTC のイベントデータをストアのローカルタイムゾーンに合わせる。
このガイドでは 7 つのエンドポイントを説明します。5 つは Shoply Admin → Analytics で使われているものと同じで、2 つはナレッジベース管理用です。
| API | カテゴリ | 返される内容 |
|---|---|---|
admin_store_analytics | パフォーマンス | 日次、週次、月次のパフォーマンス行と合計 |
query_api_usage_count | エンゲージメント | UTC の分または日でグループ化されたアクティビティ件数 |
query_sessionized_chat | 会話 | チャットおよび検索セッションの概要 |
query_log_visualization | 会話 | 選択した 1 つのセッションの完全なイベントタイムライン |
admin_get_store_metadata | ストア設定 | UTC データを正しく表示するために使うストアのタイムゾーン |
admin_store_knowledge | ナレッジ | カスタムテキスト、外部ページ、アップロードファイル、削除、再クロール |
user_generated_file | ナレッジファイル | ナレッジとして登録する前に PDF、テキスト、Markdown ファイルをアップロード |
以下のレスポンス本文は代表例です。実際のフィールドと値は、あなたのストアで記録されたアクティビティを反映します。
デプロイ要件: ストアオーナーシークレット認証が、呼び出す API サーバーにデプロイされている必要があります。有効なシークレットで HTTP
403とNo access_token foundが返る場合、そのサーバーはまだ古いアクセストークン専用の認証コードで動作しています。
API シークレットはどう作成しますか?
- Shoply AI admin を開きます。
- Settings → Store owner API secret に移動します。
- シークレットを作成し、
Weekly reporting exportのように連携を識別できる名前を付けます。 - 表示されたらシークレットをコピーします。Shoply は平文の値を 1 回だけ表示します。
各シークレットの有効期間は 90 日です。1 つのストアで連携ごとに別々のシークレットを持つことができ、他の連携を止めることなく 1 つのシークレットだけを取り消せます。
これらの値はサーバー側の環境変数として保存してください。
export SHOPLY_STORE_KEY="your-store.myshopify.com"
export SHOPLY_STORE_OWNER_API_SECRETE="shoply_owner_key_example123.secret-value"SHOPLY_STORE_KEY には、購入者が通常カスタムドメインを訪れている場合でも、ストアの恒久的な myshopify.com ドメインを使ってください。

認証はどのように動作しますか?
Merchant API のすべてのリクエストは、値が JSON 文字列の Authorization ヘッダーを送信します。
{
"store_key": "your-store.myshopify.com",
"store_owner_api_secrete": "YOUR_STORE_OWNER_API_SECRET"
}store_owner_api_secrete は、過去のスペルも含めた正確な公開フィールド名です。これは Bearer トークンではありません。完全な JSON 文字列をそのまま Authorization ヘッダーに入れてください。
シークレットはバックエンドコード内だけで保持してください。URL、ブラウザバンドル、公開リポジトリ、分析イベント、アプリケーションログには置かないでください。
公式の Python / Node.js パッケージはありますか?
はい。Shoply は、必要な認証を自動で追加し、Merchant API を型付き関数として公開する 2 つのサーバーサイドパッケージを公開しています。どちらのパッケージも shoplyai-public GitHub organization でオープンソースとして公開されています。
Python パッケージ
shoply-merchant-api パッケージは Python 3.12 をサポートし、Pydantic v2 のレスポンスモデルを使用します。固定バージョン 2.1.3 をインストールしてください。
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install "git+https://github.com/shoplyai-public/shoply-merchant-api.git@v2.1.3"最新のチャットおよび検索セッションを、型付きの SessionSummary モデルとして取得します。
import os
from shoply_merchant_api import ShoplyMerchantClient
with ShoplyMerchantClient(
store_key=os.environ["SHOPLY_STORE_KEY"],
api_secret=os.environ["SHOPLY_STORE_OWNER_API_SECRETE"],
) as shoply:
session_response = shoply.list_sessions(limit=40)
for conversation in session_response.data:
print(conversation.customer_id, conversation.user_questions)このパッケージは、分析、アクティビティ件数、完全なセッションタイムライン、ストアタイムゾーン、ナレッジ管理のための関数も提供します。詳しくは business-use-case guide と API reference を参照してください。
Node.js / TypeScript パッケージ
shoply-merchant-api-js リポジトリでは、Node.js 20 以降向けの @shoplyai/merchant-api パッケージを提供しています。これは ESM パッケージで、TypeScript 宣言を内蔵し、ランタイム依存関係はありません。固定バージョン 2.1.3 を GitHub から直接インストールしてください。
npm install "github:shoplyai-public/shoply-merchant-api-js#v2.1.3"Node.js サーバーから同じ最新セッションを取得します。
import { ShoplyMerchantClient } from "@shoplyai/merchant-api";
const storeKey = process.env.SHOPLY_STORE_KEY;
const apiSecret = process.env.SHOPLY_STORE_OWNER_API_SECRETE;
if (!storeKey || !apiSecret) {
throw new Error("SHOPLY_STORE_KEY and SHOPLY_STORE_OWNER_API_SECRETE are required");
}
const shoply = new ShoplyMerchantClient({
storeKey,
apiSecret,
});
const sessionResponse = await shoply.listSessions({ limit: 40 });
for (const conversation of sessionResponse.data) {
console.log(conversation.customer_id, conversation.user_questions);
}この npm パッケージは、Python パッケージと同じ Merchant API エンドポイントをカバーしています。詳しくは business-use-case guide と API reference を参照してください。
どちらのパッケージも、信頼できるバックエンドサービス、定期ジョブ、非公開の社内ツール向けです。どちらのパッケージもストアフロントのコードに import したり、API シークレットをブラウザバンドル内に公開したりしないでください。
パッケージなしで HTTP API を呼び出せますか?
はい。Merchant API は標準の HTTPS API のままです。以下の低レベル Python 例では Requests を使い、完全な通信契約を確認したり、別の言語から連携したりできるようにしています。
環境に Requests が含まれていない場合はインストールしてください。
python -m pip install requests以下のヘルパーは、すべてのリクエストにストアキーと認証ヘッダーを追加します。
import json
import os
from typing import Any
import requests
BASE_URL = "https://api.shoplyai.ai"
STORE_KEY = os.environ["SHOPLY_STORE_KEY"]
STORE_OWNER_API_SECRETE = os.environ["SHOPLY_STORE_OWNER_API_SECRETE"]
session = requests.Session()
session.headers.update({
"Authorization": json.dumps({
"store_key": STORE_KEY,
"store_owner_api_secrete": STORE_OWNER_API_SECRETE,
})
})
def shoply_get(api_name: str, **params: Any) -> dict[str, Any]:
"""Call one store-scoped Shoply API and surface HTTP or API-level errors."""
response = session.get(
f"{BASE_URL}/{api_name}",
params={"store_key": STORE_KEY, **params},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("error") is not None or payload.get("statusCode") not in (None, 200):
raise RuntimeError(payload.get("error", "Shoply API request failed"))
return payload
def shoply_post(
api_name: str,
payload: dict[str, Any] | None = None,
**params: Any,
) -> dict[str, Any]:
"""Write store-scoped data and surface HTTP or API-level errors."""
response = session.post(
f"{BASE_URL}/{api_name}",
params={"store_key": STORE_KEY, **params},
json=payload,
timeout=60,
)
response.raise_for_status()
result = response.json()
if result.get("error") is not None or result.get("statusCode") not in (None, 200):
raise RuntimeError(result.get("error", "Shoply API request failed"))
return result以下の例ではこの共通クライアントを使います。どちらのヘルパーも認証済みのストアキーを自動的に追加します。
API 経由で Shoply AI のナレッジを管理できますか?
はい。admin_store_knowledge は GET でナレッジを取得し、POST で作成、更新、削除、再クロールを行います。既存のナレッジ ID を使った POST はそのエントリを更新し、新しい ID を使うと新規作成になります。
更新を自動化する前に、トレーニングガイドの例を使って、ストアに役立つナレッジを計画してください。
ナレッジの書き込みは、購入者に表示される回答を変更する可能性があります。ナレッジ管理システム専用のシークレットを使い、送信前にコンテンツを検証し、この書き込み可能な認証情報をストアフロントの JavaScript に絶対に公開しないでください。
既存のナレッジを一覧表示する
knowledge_payload = shoply_get(
"admin_store_knowledge",
knowledge_id_to_retrieve="_ALL_",
)
for knowledge_id, knowledge in knowledge_payload["data"].items():
print(knowledge_id, knowledge.get("title"))レスポンス例
{
"data": {
"knowledge::shipping-policy": {
"title": "Shipping policy",
"text": "Orders leave our warehouse within two business days.",
"epoch_edit": 1787211246
}
}
}カスタムテキストナレッジを作成または更新する
安定した一意のナレッジ ID を選んでください。そのエントリを更新するときは同じ ID を再利用します。
from time import time
knowledge_id = "knowledge::shipping-policy"
result = shoply_post(
"admin_store_knowledge",
{
knowledge_id: {
"title": "Shipping policy",
"text": (
"Orders leave our warehouse within two business days. "
"Standard delivery normally takes three to five business days."
),
"epoch_edit": int(time()),
}
},
)
print(result)レスポンス例
{
"statusCode": 200
}成功レスポンスは、ナレッジが保存されたことを意味します。検索インデックス作成には数分かかることがあるため、新しい回答がすぐに表示されない場合があります。API がコンテンツは保存済みだがインデックス作成が遅れていると報告した場合は、書き込みを再試行する前に GET で保存済みエントリを確認してください。
外部ウェブページを追加する
external_url:: で始まる ID を使ってください。完全な http:// または https:// URL を text に入れます。
from time import time
result = shoply_post(
"admin_store_knowledge",
{
"external_url::returns-policy": {
"title": "Returns and exchanges",
"text": "https://www.example.com/policies/returns",
"epoch_edit": int(time()),
}
},
)ナレッジファイルをアップロードして登録する
ナレッジファイルは PDF、TXT、または Markdown で、サイズは 5 MB 未満である必要があります。まずファイルをアップロードし、その後、返された非公開 S3 ロケーションをナレッジエントリとして保存してください。
from pathlib import Path
from time import time
file_path = Path("shipping-policy.md")
with file_path.open("rb") as file_handle:
upload_response = session.post(
f"{BASE_URL}/user_generated_file",
params={"store_key": STORE_KEY, "folder": "knowledge_file"},
files={"file": (file_path.name, file_handle, "text/markdown")},
timeout=60,
)
upload_response.raise_for_status()
uploaded = upload_response.json()
if uploaded.get("statusCode") != 200:
raise RuntimeError(uploaded.get("error", "Knowledge file upload failed"))
shoply_post(
"admin_store_knowledge",
{
"knowledge_file::shipping-policy": {
"title": "Shipping policy document",
"text": uploaded["file_url"],
"epoch_edit": int(time()),
}
},
)アップロードレスポンス例
{
"message": "File uploaded successfully",
"statusCode": 200,
"file_url": "s3://shoplystores/your-store.myshopify.com/uploads/shipping-policy.md"
}file_url は Shoply が返す不透明な非公開ロケーションとして扱ってください。自分で組み立てたり変更したりしないでください。
ナレッジを削除する
削除は元に戻せません。まず現在のエントリを取得し、削除したい正確な ID だけを送信してください。
result = shoply_post(
"admin_store_knowledge",
{
"knowledge_ids_to_delete": [
"knowledge::shipping-policy",
"external_url::returns-policy",
"knowledge_file::shipping-policy",
]
},
)ウェブサイトの再クロールをリクエストする
マーチャントのウェブサイト上のコンテンツが変わった後に再クロールを使ってください。通常、すべてのカスタムテキスト更新後に毎回必要というわけではありません。
result = shoply_post(
"admin_store_knowledge",
re_crawl_ind="true",
)ビジネスユースケース
- 配送、返品、保証、サイズ案内、商品ケアのガイダンスを社内コンテンツシステムから同期する。
- 一時的なキャンペーン情報やホリデー情報を、Shoply Admin に手動コピーせず公開する。
- デプロイワークフローの一部として、ポリシーのウェブページや承認済みドキュメントをナレッジベースに追加する。
- ポリシーやプロモーションの終了と同時に、古いガイダンスを削除する。
Merchant API の例
1. パフォーマンス分析を取得する
admin_store_analytics は Analytics → Summary テーブルを支えています。セッション、チャット、検索、クリック、カート追加イベント、購入、アトリビューション収益を返します。
エンドポイント
GET https://api.shoplyai.ai/admin_store_analyticsクエリパラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
store_key | はい | 共通クライアントによって追加されます |
report_type | はい | daily、weekly、または monthly |
start_date | 日次/週次 | YYYYMMDD 形式の UTC 開始日(含む) |
end_date | 日次/週次 | YYYYMMDD 形式の UTC 終了日(含む) |
月次レポートは Shoply に保存された月次履歴を使用するため、日付範囲の指定は不要です。
Python 例
daily_report = shoply_get(
"admin_store_analytics",
report_type="daily",
start_date="20260801",
end_date="20260820",
)
for row in daily_report["data"]:
print(row["date"], row["sessions"], row["purchases"], row["revenue"])
print("Totals:", daily_report["totals"])
# Weekly rows use the Monday of each week as their date label.
weekly_report = shoply_get(
"admin_store_analytics",
report_type="weekly",
start_date="20260701",
end_date="20260820",
)
# Monthly requests do not need start_date or end_date.
monthly_report = shoply_get("admin_store_analytics", report_type="monthly")レスポンス例
{
"data": [
{
"date": "20260820",
"sessions": 42,
"chats": 18,
"searches": 24,
"clicks": 11,
"add_to_cart": 5,
"purchases": 2,
"revenue": "$168.00",
"revenue_usd": "$168.00"
}
],
"totals": {
"date": "totals",
"sessions": 42,
"chats": 18,
"searches": 24,
"clicks": 11,
"add_to_cart": 5,
"purchases": 2,
"revenue": "$168.00",
"revenue_usd": "$168.00"
},
"report_type": "daily"
}収益には複数の通貨が含まれる場合があります。revenue は表示用テキストとして扱ってください。Shoply が表示する正規化済み USD 値が必要な場合は revenue_usd を使ってください。
ビジネスユースケース
- マーチャントや ecommerce チームに日次の売上影響サマリーを送る。
- 検索、商品クリック、カート追加イベント、購入を比較してファネル離脱を見つける。
- Shoply Admin ページをスクレイピングせずに、週次または月次のビジネスインテリジェンスダッシュボードへデータを供給する。
- アトリビューション収益を時系列で追跡し、マーチャンダイジングやキャンペーン変更と比較する。
2. ストアのタイムゾーンを取得する
admin_get_store_metadata は Analytics → Chat & Search History に表示されるタイムゾーンバッジを提供します。このページでは、UTC のアクティビティをストアのローカル時刻に変換するために使用されます。
エンドポイント
GET https://api.shoplyai.ai/admin_get_store_metadataクエリパラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
store_key | はい | 共通クライアントによって追加されます |
metadata_key | はい | リテラル値 time_zone を使用します |
Python 例
timezone_payload = shoply_get(
"admin_get_store_metadata",
metadata_key="time_zone",
)
timezone = timezone_payload["data"]
print(timezone["ianaTimezone"], timezone["timezoneOffsetMinutes"])レスポンス例
{
"data": {
"ianaTimezone": "America/Los_Angeles",
"timezoneOffset": -7,
"timezoneOffsetMinutes": -420
},
"statusCode": 200
}ビジネスユースケース
- UTC のアクティビティを、マーチャントが Analytics で見ているのと同じローカル暦日でグループ化する。
- ストアのローカル日の終了後に日次エクスポートをスケジュールする。
America/Los_Angelesのような曖昧さのない IANA タイムゾーンでレポートにラベルを付ける。
タイムゾーンのオフセットは夏時間ルールによって変わる場合があります。レポートシステムが対応しているなら、数値オフセットを永続保存する代わりに ianaTimezone を優先してください。
3. アクティビティ件数を取得する
query_api_usage_count は、UTC 日付または元の UTC 分単位でグループ化されたストアアクティビティを返します。また、Analytics → Chat & Search History のアクティビティチャートのデータ元でもあります。
エンドポイント
GET https://api.shoplyai.ai/query_api_usage_countクエリパラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
start_dt_utc | はい | YYYY-MM-DD HH:mm:ss 形式の UTC 開始時刻 |
end_dt_utc | はい | YYYY-MM-DD HH:mm:ss 形式の UTC 終了時刻 |
groupby | いいえ | 日次合計には utc_date、分単位行には utc_date_time |
Python 例
activity = shoply_get(
"query_api_usage_count",
start_dt_utc="2026-08-01 00:00:00",
end_dt_utc="2026-08-20 23:59:59",
groupby="utc_date",
)
for row in activity["data"]:
print(row)レスポンス例
{
"data": [
{
"utc_date": "2026-08-20",
"QA": 18,
"CHAT": 18,
"SEARCH": 20,
"CACHED_SEARCH": 4,
"PRODUCT_SEARCH": 22,
"CLICK": 11,
"ADD_TO_CART": 5,
"CHECKOUT": 2
}
]
}各行には、その期間で利用可能なアクティビティカウンタ(チャット質問数、検索数、クリック数、カート追加イベント数、チェックアウトイベント数など)が含まれます。アクティビティがないカウンタは、ゼロに設定されるのではなく欠落している場合があります。
ビジネスユースケース
- Chat & Search History にあるような時間別または日別アクティビティチャートを構築する。
- 異常なトラフィックスパイクや、顧客エンゲージメントの急減を検出する。
- 商品検索ボリュームをクリック、カート追加イベント、チェックアウトと比較する。
- サポートチームやマーチャンダイジングチームが最も忙しい時間帯をレビューすべきタイミングを見積もる。
4. チャットおよび検索セッションの概要を取得する
query_sessionized_chat は、顧客セッションごとに 1 つのコンパクトなレコードを返します。また、Analytics → Chat & Search History のセッション一覧もこれで動作しています。
エンドポイント
GET https://api.shoplyai.ai/query_sessionized_chatクエリパラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
start_dt_utc | はい | UTC 開始時刻、またはリテラル値 undefined |
end_dt_utc | はい | UTC 終了時刻、またはリテラル値 undefined |
num_sessions | いいえ | いずれかの境界が undefined のときに選択するセッション数 |
ScanIndexForward | いいえ | 最新のセッションから取得するには false を使用 |
最新の 40 セッションを取得する
summary_payload = shoply_get(
"query_sessionized_chat",
start_dt_utc="undefined",
end_dt_utc="undefined",
num_sessions=40,
ScanIndexForward="false",
)
sessions = summary_payload["data"]
for conversation in sessions:
print(conversation["customer_id"], conversation.get("user_questions", ""))UTC 範囲内のセッションを取得する
summary_payload = shoply_get(
"query_sessionized_chat",
start_dt_utc="2026-08-20 00:00:00",
end_dt_utc="2026-08-20 23:59:59",
ScanIndexForward="false",
)両方の時刻境界がある場合、API はその完全な範囲内のセッションを返します。num_sessions はその境界付きクエリを制限しません。
レスポンス例
{
"data": [
{
"customer_id": "customer-or-session-id",
"user_questions": "Do you have this in blue?\nWhen will it ship?",
"start_timestamp_ms": 1787184000000,
"end_timestamp_ms": 1787184065000,
"session_types": "product information, click",
"customer_email": null,
"customer_info": {},
"sentiment": "positive",
"num_questions": 2,
"num_searches": 1,
"num_clicks": 1
}
]
}オプションフィールドはセッションによって異なります。完全なタイムラインを取得する予定がある場合は、customer_id、start_timestamp_ms、end_timestamp_ms を保持してください。
ビジネスユースケース
- 回答品質やサポート研修のために最近の会話サンプルを確認する。
- 商品説明文や FAQ に反映すべき、繰り返される顧客質問を見つける。
- 検索、商品クリック、その他の購買行動を含む高意図セッションを特定する。
- より大きなイベントレベル payload を避けつつ、セッションごとに 1 行をエクスポートして傾向分析を行う。
5. 1 つの完全なセッションを取得する
選択した概要を query_log_visualization に渡すと、その顧客、AI、検索、コマースイベントを取得できます。
エンドポイント
GET https://api.shoplyai.ai/query_log_visualizationクエリパラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
date_time_utc_start | はい | UTC YYYY-MM-DD HH:mm:ss 形式のセッション開始時刻 |
date_time_utc_end | はい | UTC YYYY-MM-DD HH:mm:ss 形式のセッション終了時刻 |
session_id | いいえ | 概要の customer_id。古い履歴レコードで使用されます |
start_timestamp_ms | 推奨 | 概要内の正確なミリ秒開始タイムスタンプ |
Python 例
from datetime import datetime, timezone
def utc_from_milliseconds(timestamp_ms: int) -> str:
"""Format a Shoply millisecond timestamp for the history API."""
value = datetime.fromtimestamp(timestamp_ms / 1000, tz=timezone.utc)
return value.strftime("%Y-%m-%d %H:%M:%S")
selected = sessions[0]
timeline_payload = shoply_get(
"query_log_visualization",
date_time_utc_start=utc_from_milliseconds(selected["start_timestamp_ms"]),
date_time_utc_end=utc_from_milliseconds(selected["end_timestamp_ms"]),
session_id=selected["customer_id"],
start_timestamp_ms=selected["start_timestamp_ms"],
)
for event in timeline_payload["data"]:
print(event.get("server_timestamp_ms"), event.get("action_type"))レスポンス例
{
"data": [
{
"action_type": "QA",
"session_id": "customer-or-session-id",
"utc_date_time": "2026-08-20 00:00:00",
"start_timestamp_ms": 1787184000000,
"server_timestamp_ms": 1787184000123,
"Q": {
"question": "Do you have this in blue?",
"question_context": {}
},
"task_id": "task-id",
"list_tokens": [
{
"data_type": "LLMOutput",
"data": "Yes. These blue options are currently available."
}
],
"dict_search_results": {}
}
]
}タイムラインには、顧客の質問、AI の回答、検索結果、商品クリック、カート追加イベント、チェックアウトイベント、人間エージェントの参加が含まれる場合があります。混在するイベント種別の順序付けには server_timestamp_ms を使ってください。古いレコードではフィールド数が少ない場合があります。
ビジネスユースケース
- サポート調査中に、顧客が正確に何を尋ね、Shoply が何と回答したかを監査する。
- 回答品質を、購入者に表示された検索結果や商品とあわせて確認する。
- 質問からクリック、カート追加、チェックアウトまでの流れを再構築する。
- 無関係な履歴を探し回らずに、顧客から報告された 1 つのセッションを診断する。
すべての API に 1 つのシークレットを使えますか?
はい。有効な store_owner_api_secrete は 1 つのストアにスコープされており、上記の Merchant API エンドポイント全体で利用できます。SiteChat アカウントでは、同じシークレットで catalog upload APIs も認証されます。より安全に運用するには、システムごとに別々の名前付きシークレットを使ってください。たとえば、夜間データエクスポート用に 1 つ、社内ダッシュボード用にもう 1 つ、という形です。
ある連携が廃止されたり侵害されたりした場合は、Shoply Settings でそのシークレットだけを取り消してください。その他の連携は引き続き動作します。
有効期限、プライバシー、エラーについて知っておくべきことは何ですか?
顧客向け回答でどの情報が利用可能かを理解するために、あわせて Shoply のデータソースとプライバシー も確認してください。
- ストアオーナー API シークレットの有効期限は 90 日 です。有効期限前に置き換え用を作成し、連携を更新してください。
- Shoply の標準的なチャットおよび検索履歴の保持期間も 90 日 です。シークレットの有効期限とデータ保持は別々のポリシーです。
- 履歴レスポンスには、顧客識別子、メールアドレス、おおよその位置情報、質問内容、購買行動などの個人データが含まれる場合があります。プライバシーポリシーおよび適用法令に従って保存・処理してください。
- HTTP
403は、シークレットが欠落、無効、期限切れ、取り消し済み、または別ストアのものであることを意味します。 - HTTP
422は通常、必須クエリパラメータが欠落しているか、名前が誤っていることを意味します。 - HTTP
500またはstatusCode: 500を含むレスポンスは、リクエストが Shoply に到達したものの完了できなかったことを意味します。一時的な障害はバックオフ付きで再試行し、エラーが続く場合はお問い合わせください。 - レスポンスを扱いやすく保つため、エクスポートや定期ジョブには境界付きの UTC 範囲を使ってください。
商品検索は Merchant API の一部ですか?
Shoply の公開商品検索 API は、認証方式とリクエスト契約が異なります。非公開のマーチャントデータではなく、購入者向け体験のための商品検索結果が必要な場合は、How to Access Shoply AI Search Through the API を参照してください。
SiteChat マーチャントは商品カタログをアップロードできますか?
はい。SiteChat アカウントでは、同じストアオーナー API シークレットを使って構造化商品と商品画像をアップロードできます。これらのカタログエンドポイントは、How to Upload Your Catalog for SiteChat で別途説明されています。Shopify ストアは引き続き Shopify 経由で商品を同期し、それらのアップロードルートは使用しません。
連携についてサポートが必要な場合は、Shoply AI にお問い合わせください。
