← システム思考に戻る

AI出品エージェントのためのeBay API設定

ebay-apiai-agentsebay-sellingoauth

私のeBayの商品を出品するAIエージェントは、写真をグループに分け、商品を特定し、私が渡した比較事例から価格を決めて、出品内容を作れます。でも、自分でeBayの開発者アカウントを開設することはできません。そこは人が操作するようeBayが求めていて、その後もいくつか人の手が必要な画面があります。

そこで、このeBay API設定ガイドでは作業を二つに分けます。担当するのはeBayの6つのページの操作と、手元のディスクにある一つのファイルへの3つの値の貼り付けです。残りはエージェントがターミナルから実行します。プライバシーページ、同意リンク、トークンへの交換、ポリシーの確認です。各手順の見出しには、自分で操作かエージェントと一緒に操作かを示しています。手順の中で、そのまま書かれた指示は自分で操作してください。「エージェントに頼んで」で始まる行はエージェントの出番で、JSONが流れていくのを眺めていれば大丈夫です。

120ドルから60ドルに値下げされたほこりまみれのカメラ、ノートパソコンを操作するAI出品エージェントのロボット、そのカメラを120ドルで出品したeBayの画面
出品内容はエージェントが作ります。List now (今すぐ出品) をクリックするのは、承認してからです。

eBay API設定の役割分担

手順 自分でやること エージェントがやること
始める前に 出品者アカウント、GitHubアカウント、AIコーディングエージェントを用意する。導入時の質問に答える コードを非公開のフォルダにコピーし、インストールしてテストを実行する
1. 開発者アカウント 登録して承認を待つ —
2. Productionキーセット 作成する —
3. キーセットの有効化 eBayのアカウント削除フォームに回答する —
4. プライバシーページ 名前、連絡先、利用するAIサービスを伝える テンプレートを埋め、Gistを公開する
5. RuName 一つのフォームに入力する —
6. .envファイル 3つの値を貼り付ける ファイルを作成し、Productionを設定する
7. 同意 eBayで同意し、一つのアドレスをコピーする リンクを作り、コードをトークンに交換する
8. ビジネスポリシー 配送、支払い、返品のポリシーを作成する ポリシーを確認し、承認があれば利用登録する
9. account.json 自動で決められない項目を選び、新しい拠点を承認する ファイルを書き、導入時の回答を反映し、5つのチェックを実行する

手順7のリフレッシュトークンを車の鍵、パイプラインをルールブックを持った駐車係だと思ってみてください。駐車係は車を停めます。つまり、エージェントが購入者には見えない未公開のオファーを作ります。公開には明確な承認が必要なので、うなずくまでは駐車場から出ていきません。ただ、一つ正直に言っておくと、鍵そのものにはルールブックで許されている以上のことができます。だから、鍵は手元のディスクの.envに置き、チャットには絶対に出さないでください。

スクリーンショットのピンクの番号は、その下にある手順の番号に対応しています。ラベルは2026年11月時点のeBayの画面に合わせています。eBayはときどき名称を変えるので、ラベルが違ったら、リンク先のeBayのページを頼りにしてください。

ここで紹介する内容はすべて、私が自分の出品者アカウントで動かしている出品パイプライン、ebay-listing-agentに基づいています。手順1の前にエージェントがリポジトリを使うので、今のうちにリンクを手元に用意しましょう。

このeBay API設定で最初からProductionを使う理由

eBayには、テスト用の仮のマーケットプレイスであるSandbox (サンドボックス) があります。リポジトリ自体のガイドはそこから始めますが、このガイドではそうしません。実際の商品を出品するのはProductionで、Sandboxのテストユーザーには最初、ビジネスポリシーも在庫拠点もありません。それらをSandboxで作るのは寄り道です。そこで、エージェントは最初から実際の出品者アカウントに接続し、パイプラインの制約で安全を守ります。

  • Listerワークフローは未公開のオファーで止まります。購入者には見えません。
  • publishは--confirmがなければ概要を表示して実行を拒否します。エージェントはその概要を見せて、承認を待ちます。
  • 出品者アカウントを変更する二つのコマンド、setup --opt-inとsetup --create-locationも、--confirmがなければ実行を拒否します。
  • エージェントはdelete-offerで不要な未公開のオファーを削除できます。このコマンドは公開済みのものには実行を拒否します。

⚠️ 警告: この設定では、エージェントを実際の出品者アカウントに接続します。Cert ID (証明書ID) とリフレッシュトークンは.envだけに保管してください。チャットには貼り付けないでください。.envをgitにコミットしないでください。

始める前に

用意するもの:

  • 支払いの設定が済み、正常に利用できるeBayの出品者アカウント。ここに商品を出品します。
  • 米国のマーケットプレイス (EBAY_US)。ほかのマーケットプレイスは未検証です。
  • GitHubアカウント。手順4で、エージェントが小さなページを一つ公開します。
  • Claude Code、Cursor、Codex CLIなど、ターミナルのコマンドを実行できるAIコーディングエージェント。

エージェントがやること:

  • リポジトリをクローンし、core/を新しい非公開のフォルダにコピーします。フォークではなくコピーです。GitHubでは公開リポジトリのフォークも公開され、出品用のフォルダにはオファーIDが入るからです。
  • Python 3.10以降、ImageMagick 7、GitHub CLI (gh) がなければインストールし、その後Pythonパッケージをインストールして、テストを実行します。
  • ADOPTION-QUESTIONS.mdの質問に沿って案内します。レビュー対象にする価格の上限、出品するのに必要な確信度、利用するポリシーなどです。回答を記録し、手順9で反映します。配送と返品についての回答によって、手順8で何を作るかが決まります。

貼り付けて使えるプロンプトです。

github.com/matbanik/ebay-listing-agentのADOPTION-GUIDE.mdを読んでください。手順1から3までを一緒に進めてください。eBayはSandboxではなくProductionで設定します。eBay APIへのアクセスの前で止めてください。

こんなふうに「Production」とはっきり伝えてください。リポジトリのガイドはSandboxから始めるよう勧めているので、まじめなエージェントはそれに従います。

1. 自分で操作: eBay Developers Program (eBay開発者プログラム) に登録する

出品者アカウントではAPIを呼び出せません。eBayの開発者プログラムは、専用の玄関がある別の建物のようなものなので、もう一つアカウントが必要です。出品者アカウントと同じメールアドレスを使ってもかまいません。それでも、ログインは別です。

  1. eBay Developers Programの登録ページを開いてください。
  2. フォームに入力してください。求められた欄にメールアドレスをもう一度入力します。
  3. API License Agreement (APIライセンス契約) に同意してください。ロボットでないことの確認を済ませ、Join (登録) を選びます。
  4. 承認を待ってください。承認には約1営業日かかることがあります。承認前はキーを作成できません。

eBayから業務用メールアドレスを求められることがあります。持っていれば、それを入力してください。

2. 自分で操作: eBayのProductionキーセットを作成する

eBayのApplication Keys (アプリケーションキー) のProduction欄。App ID (アプリID)、Dev ID (開発者ID)、Cert IDの値は隠され、User Tokens (ユーザートークン) とNotifications (通知) のリンクは枠で囲まれている
Cert IDが漏れたら、その下のRotate (Reset) Cert ID (証明書IDをローテーション・リセット) で新しいものを取得できます。

キーセットはアプリの身分証です。3つの値で、アクセスしてきたアプリがどれなのかをeBayに伝えます。必要なのはProduction用のものです。

  1. 開発者サイトでApplication Keys (アプリケーションキー) を開いてください。
  2. Productionでキーセットを作成してください。アプリケーションのタイトルは自由で、たとえば“my-ebay-lister”でかまいません。
  3. Production欄にApp ID (Client ID) (アプリID、クライアントID)、Dev ID (開発者ID)、Cert ID (Client Secret) (証明書ID、クライアントシークレット) が表示されていることを確認してください。
  4. このページは開いたままにしてください。手順3、5、6でまた使います。

App IDはアプリを識別する値です。Cert IDはそのパスワードなので、パスワードと同じように扱ってください。Dev IDは使いません。App IDの下に枠で囲まれている二つのリンク、User Tokens (ユーザートークン) とNotifications (通知) は、手順5と3への入口です。作成直後のProductionキーセットには、“Your Keyset is currently disabled.” (キーセットは現在無効です。) とも表示されます。これは正常です。手順3で有効にします。

3. 自分で操作: Productionキーセットを有効にする

eBayの通知フォーム。Marketplace Account Deletion (マーケットプレイスのアカウント削除)、免除の切り替え、Exemption reason (免除理由) の選択肢、Submit (送信) に1から4の番号が付いている
理由を選ぶボタンは、意図的にぼかしています。画像を見て理由を決めてしまわないためです。

eBayは、一つの質問に答えるまでProductionキーセットを有効にしません。eBayのユーザーがアカウントを閉鎖したとき、アプリはどうやってそれを知るのか、という質問です。eBayのユーザーデータを保存するアプリは、その削除通知を受け取る必要があります。保存しないアプリは免除を申請できます。フォームはProductionのApp IDの下にあるNotificationsリンクの先にあります。Productionの通知ページを直接開いてもかまいません。

⚠️ 注意: 実際に当てはまる免除理由だけを選んでください。アプリに当てはまる理由がなければ、申請しないでください。この手順の最後にある、エンドポイントを使う方法に進みましょう。切り替えの後に確認ボックスが開いたら、内容を読んでください。その記述が実際に当てはまる場合だけ、Confirm (確認) を選んでください。フォームには“Failure to provide correct information may result in penalties or having your account disabled.” (正しい情報を提供しない場合、罰則が科されたり、アカウントが無効になったりすることがあります。) と書かれています。

  1. Marketplace Account Deletion (マーケットプレイスのアカウント削除) を選んでください。
  2. Exempted from Marketplace Account Deletion (マーケットプレイスのアカウント削除通知を免除) の切り替えをオンにしてください。
  3. 実際に当てはまるExemption reason (免除理由) を選んでください。Additional information (追加情報) に、何を保存するかを説明します。
  4. Submit (送信) を選んでください。
  5. Application Keysをもう一度開いてください。Productionキーセットに“Your Keyset is currently disabled.“のメッセージがあるか確認します。
  6. まだメッセージがありますか? そこで止めてください。待っている間に、手順4のプライバシーページを進めましょう。メッセージが消えるまでは、手順7の同意を始めないでください。

ここで判断する対象を整理します。このパイプラインは、自分の出品者アカウントだけで動きます。ほかのeBayユーザーをログインさせることはなく、購入者のデータも保存しません。ただし、自分の出品に関するファイルは手元のディスクに保存します。タイトル、価格、オファーID、出品IDです。eBayの“any eBay data,” (あらゆるeBayデータ) という表現では、それらが該当するのかはわかりません。私にも、エージェントにも、その判断を代わりにすることはできません。

当てはまる理由がない場合や、eBayが免除を認めなかった場合は、eBayの通知に応答するHTTPSエンドポイントを登録する方法があります。リポジトリには付属していないので、自分でホストする必要があり、手順7の同意はそれが動くまで待ちます。eBayのアカウント削除ガイドに説明があります。eBayのフォーラムでは、申請後もキーセットが“Non Compliant” (要件未達) のままだったという開発者の報告もあるので、先に進む前にキーセットを確認してください。

4. エージェントと一緒に操作: プライバシーページを公開する

プライバシーポリシーのURLがないと、eBayは手順5でRuNameを作成してくれません。書くのは宿題みたいに感じますよね。でも、リポジトリにテンプレートがあるので、大半はエージェントの仕事です。

  1. アプリ名、氏名または事業名、公開する連絡先、利用しているAIサービスをエージェントに伝えてください。
  2. エージェントに頼んで、PRIVACY-TEMPLATE.mdを埋めてもらってください。結果はprivacy-policy.mdとして保存されます。
  3. エージェントに頼んで、privacy-policy.mdを公開のGitHub Gistとして公開してもらってください。
  4. ghでログインを求められましたか? gh auth loginを自分で実行し、表示される案内に従ってください。
  5. エージェントが公開したページを読んでください。名前と連絡先を確認します。
  6. Gistのリンクを控えてください。手順5のRuNameフォームに貼り付けます。

貼り付けて使えるプロンプトです。

“My eBay Lister”用にPRIVACY-TEMPLATE.mdを埋めてください。所有者: [氏名または事業名]。連絡先: [公開するメールアドレスまたはページ]。AIサービス: [利用しているもの]。privacy-policy.mdとして保存し、公開のGistとして公開して、リンクを教えてください。

テンプレートには短い項目が五つあります。アプリが何にアクセスするか、何を保存するか、誰と共有するか、削除する方法、連絡する方法です。写真を分析するAIサービスの名前を書く行もあります。エージェントは写真を読み取って商品を特定するので、利用しているサービスを明記してください。テンプレートは自分の役割を大げさにうたってもいません。「これは出発点であり、法的な助言ではありません」と書かれています。公開そのものは、エージェントなら一行で済みます。

gh gist create --public --desc "Privacy policy: My eBay Lister" privacy-policy.md

5. 自分で操作: eBayのRuNameを作成する

eBayのRuNameフォーム。プライバシーポリシーのURL欄に1、認証の承認時と拒否時のURL欄に2の番号が付いている
プライバシーポリシーのURLはhttps://で始まる必要があり、eBay自体のポリシーは使えません。Gistのリンクなら両方を満たします。

RuNameは“redirect URL name.” (リダイレクトURL名) の略です。eBayがリダイレクト設定に付けた呼び名で、アプリ名をシュレッダーにかけたような見た目です。たとえばYourName-YourApp-ab12-cdefghです。同意の手順で必要になります。RuNameはキーセットごとに別なので、ここではProductionキーセットから作成してください。

フォームを開きましょう。

  1. Application Keysで、ProductionのApp IDの下にあるUser Tokensを選んでください。
  2. Get a Token from eBay via Your Application (アプリケーション経由でeBayからトークンを取得) を開いてください。“You have no Redirect URLs. Click here to add one.” (リダイレクトURLがありません。ここをクリックして追加してください。) を選びます。
  3. eBayから正式な住所を求められましたか? フォームに入力し、Continue to create RuName (続けてRuNameを作成) を選んでください。

フォームに入力してください。ピンクの番号はこのリストに対応しています。

  1. Your privacy policy URL (プライバシーポリシーのURL) に、手順4のGistリンクを貼り付けてください。
  2. Your auth accepted URL (認証の承認時のURL) とYour auth declined URL (認証の拒否時のURL) に、任意のHTTPSアドレスを入力してください。私の設定ではhttps://example.comを使っています。
  3. Display Title (表示タイトル) を入力してください。たとえば“My eBay Lister”です。手順7の同意ページに、このタイトルが表示されます。
  4. フォームを保存してください。
  5. RuNameをコピーしてください。手順6で.envに貼り付けます。

承認時のURLは、なぜ任意のHTTPSページでいいのでしょうか? そこで何かを動かす必要はないからです。手順7で同意すると、eBayは一回限りのコードを付けてブラウザをそのアドレスに移動させるので、アドレスバーからそのままコピーします。eBayのフォームには、“If you leave these fields blank, the eBay default accept and reject pages will be used.” (これらの欄を空白にすると、eBayの既定の承認・拒否ページが使われます。) とも書かれています。その場合、コピーするアドレスの見た目は変わります。手順7で両方を示します。

また、eBay自体のプライバシーポリシーを、自分のものとして使うことは認められません。URLはHTTPSである必要があり、“should not be eBay’s Privacy Policy URL.” (eBayのプライバシーポリシーのURLにはしないでください。) とされています。eBayのQuick OAuth Guide (OAuthクイックガイド) は、“OAuth Enabled” (OAuth有効) のRuNameを求めています。フォームにその選択肢があれば、有効にしてください。

6. エージェントと一緒に操作: .envファイルを埋める

.envは、手元のディスクにキーを保管するプレーンテキストのファイルです。エージェントが作成し、秘密の値は自分で入力します。そうすれば、秘密の値がチャットを通ることはありません。

  1. エージェントに頼んで、.envを.env.exampleから作成し、EBAY_ENVIRONMENT=productionを設定してもらってください。
  2. テキストエディタで.envを開いてください。
  3. EBAY_CLIENT_ID=の後にApp IDを貼り付けてください。
  4. EBAY_CLIENT_SECRET=の後にCert IDを貼り付けてください。
  5. EBAY_REDIRECT_URI=の後にRuNameを貼り付けてください。貼り付けるのはURLではなくRuNameです。
  6. EBAY_USER_REFRESH_TOKEN=は空のままにしてください。手順7で書き込みます。
  7. ファイルを保存してください。

終わったら、重要な5行は次のようになります。山かっこの部分を自分の値に置き換えてください。

EBAY_ENVIRONMENT=production
EBAY_CLIENT_ID=<Production App ID>
EBAY_CLIENT_SECRET=<Production Cert ID>
EBAY_REDIRECT_URI=<Production RuName>
EBAY_USER_REFRESH_TOKEN=

多くの人がつまずくのがRuNameの行です。設定名がredirect_uriなので、URLが正解に思えますよね。でも、eBayが求めているのはRuNameです。ここにURLを入れるのが、redirect_uriエラーの最もよくある原因です。

Cert IDが漏れたら、Application Keysを開き、Rotate (Reset) Cert IDを猶予期間0で選んで、古いものをすぐ使えなくしてください。新しい値を.envに貼り付けます。リフレッシュトークンはローテーション後も有効なので、手順7をやり直す必要はありません。

7. エージェントと一緒に操作: 同意とeBayのリフレッシュトークン

ここが握手の場面です。出品者として、このアプリが出品を管理してよいとeBayに伝えます。eBayはブラウザに一回限りのコードを渡します。エージェントはそのコードをリフレッシュトークンに交換します。以後、パイプラインが使う有効期間の長い鍵です。使える時間は全部で5分なので、先にリストを読んでから始めてください。

  1. エージェントに頼んで、auth-urlを実行してもらってください。同意リンクが渡されます。
  2. ブラウザで同意リンクを開いてください。
  3. eBayでログインを求められましたか? 出品者アカウントのユーザー名とパスワードを入力してください。開発者アカウントは使わないでください。
  4. 同意ページで権限を読み、同意してください。
  5. 開いたページのアドレスバーから、アドレス全体をコピーしてください。
  6. アドレス全体をチャットに貼り付けてください。
  7. エージェントに頼んで、そのアドレスですぐにexchange-codeを実行してもらってください。
  8. エージェントの報告が"stored": trueになっていることを確認してください。invalid_grantと報告されましたか? このリストの最初からやり直してください。

二つのアドレスは次のようになります。最初のものはエージェントから受け取り、二つ目をエージェントに返します。

You open (the consent link from your agent):
https://auth.ebay.com/oauth2/authorize?client_id=<App ID>&redirect_uri=<RuName>&response_type=code&scope=https%3A//api.ebay.com/oauth/api_scope%20...

You copy (from the address bar, after you accept):
https://example.com/?code=v%5E1.1%23i%5E1%23...&expires_in=299

code=の後の部分は毎回変わります。一度だけ使え、299秒後に期限が切れます。expires_in=299はその意味です。アドレスにはstate=など、ほかの部分が含まれることもあります。すべてコピーしてください。コードの取り出しはエージェントがやります。

チャットに貼り付けても安全なのでしょうか? コードは一度しか使えず、5分で無効になります。eBayがコードをトークンに交換するにはCert IDも必要で、Cert IDは.envに置いたままです。だから、Cert IDなしではコードは使いものになりません。ただし、チャットと承認時のURLのリンク先サイトの二か所には見えます。そのサイトは、移動先のアドレスをログに記録できます。どちらにもCert IDは渡らず、エージェントが交換に使えば、そのコードは使用済みになります。同意リンクにはApp IDとRuNameが表示されます。これは正常です。どのOAuth同意リンクにも含まれています。

手順5で承認時のURLを空欄にしましたか? その場合はeBay自体のページに移動し、アドレスは次のように始まります。

https://signin.ebay.com/ws/eBayISAPI.dll?ThirdPartyAuthSucessFailure&isAuthSuccessful=true&state=null&code=v%5E1...

そう、“Sucess.“です。これは私ではなくeBayのつづりです。ここにもcode=の部分があり、exchange-codeはどのアドレスからでも読み取れます。この方法なら、自分で運営していないサイトにコードが渡ることもありません。私の設定ではexample.comを使っているので、この方法は自分では試していません。

対象 有効期間 扱う人・もの
コード 299秒、1回限り 自分で一度コピーする
アクセストークン 2時間 ツールが自動で更新する
リフレッシュトークン 約18か月 期限が切れたらこの手順をやり直す

うまくいかないときは、次を確認してください。

  • invalid_grant: コードがすでに使われているか、発行から5分以上たっています。新しいリンクを取得して、もっと早く貼り付けてください。
  • redirect_uriエラー: .envにProductionのRuNameではなく、URLかSandboxのRuNameが入っています。
  • invalid_client: App IDとCert IDが別々のキーセットから取得されているか、EBAY_ENVIRONMENTがproductionになっていません。

8. エージェントと一緒に操作: eBayのビジネスポリシーを作成する

My eBay (マイeBay) のAccount (アカウント) メニュー。Selling (販売) とBusiness Policies (ビジネスポリシー) に1と2の番号が付き、Create policy (ポリシーを作成) は右上にあると注記されている
配送ポリシーもビジネスポリシーの一つです。すぐ下にあるShipping Preferences (配送設定) の中ではありません。

ビジネスポリシーは、どの出品でも聞かれる質問への回答を保存したものです。どう配送するか、購入者はどう支払うか、返品のときはどうするか、という質問です。エージェントはIDを使って、それらを各オファーに紐づけます。ツールはポリシーを読み取れますが、作成するコマンドはないので、ここは自分で操作してください。

まずエージェントに頼んで、policiesを実行してもらってください。すでにあるポリシーが一覧に出ます。送料無料のポリシー、支払いポリシー、30日間の返品ポリシーがそろっていれば、手順9に進んでください。policiesでBusiness Policiesの利用登録が済んでいないと表示された場合、エージェントはsetup --opt-in --confirmを実行できます。ただし、承認してからです。その後、エージェントに頼んで、policiesをもう一度実行してもらってください。利用登録のエラーが消えたら、ポリシーを作成します。リポジトリの記載では、その待ち時間は数分から24時間です。

  1. My eBay (マイeBay) を開いてください。Account (アカウント) を選び、左のメニューでSelling (販売) を選びます。
  2. Business Policies (ビジネスポリシー) を選んでください。Manage your business policies (ビジネスポリシーの管理) ページが開きます。
  3. 右上のCreate policy (ポリシーを作成) を選んでください。ポリシーの種類を選びます。

この方法で、三つのポリシーを一つずつ作成してください。

配送ポリシー

eBayの配送ポリシーフォーム。Flat (一律料金) に設定されたCost type (料金方式) に1、Offer free shipping (送料無料にする) のチェックボックスに2の番号が付いている
Offer free shipping (送料無料にする) をオンにすると、Buyer pays (購入者の支払額) の欄が$0.00でグレー表示になります。

パイプラインの価格設定は送料を商品価格に織り込むので、送料無料のポリシーが必要です。送料の自動計算は使わないでください。リポジトリの導入時の質問では、荷物に関するエラーで失敗することがあるポリシーの例として挙げられています。

  1. Cost type (料金方式) で、Flat: Same cost to all buyers (一律料金: すべての購入者に同じ料金) を選んでください。
  2. Offer free shippingをオンにしてください。
  3. Policy name (ポリシー名) を入力してください。たとえば“Free domestic shipping”です。
  4. 商品に合うShipping method (配送方法) を選んでください。
  5. 商品に合うHandling time (発送までの日数) を選んでください。
  6. Save (保存) を選んでください。

支払いと返品のポリシー

  1. 支払いポリシーを作成してください。Require immediate payment when buyer uses Buy It Now (購入者が即決購入を利用する場合は即時支払いを必須にする) をオンにし、Saveを選びます。
  2. 返品ポリシーを作成してください。国内返品の欄にあるAccept returns (返品を受け付ける) をオンにします。
  3. Allowed within (返品受付期間) で30 Days (30日間) を選んでください。Return shipping paid by (返送料の負担者) でBuyer (購入者) を選び、Saveを選びます。
  4. エージェントに頼んで、policiesをもう一度実行してもらってください。
  5. 三つのポリシーがすべて表示されることを確認してください。

私の支払いポリシーでは即時支払いを必須にしています。リポジトリの既定の返品ポリシーは30日間で、返送料は購入者の負担です。eBayのフォームも、“Offering a minimum 30-day return policy helps your listings qualify for Top Rated Seller Benefits.” (少なくとも30日間の返品ポリシーを提供すると、出品がトップ評価セラー特典の対象になりやすくなります。) と後押ししています。

9. エージェントと一緒に操作: account.jsonを書いてチェックを実行する

ポリシーIDと在庫拠点は人によって違うので、account.jsonという非公開ファイルに保存します。置き場所は.envの隣です。エージェントはsetupで書き込みます。このコマンドは質問をしてくれるわけではありません。すでにaccount.jsonに保存された選択を維持します。保存されていなければ、唯一の候補を選びます。たとえば、拠点が一つだけ、30日間の返品ポリシーが一つだけの場合です。選べない場合はchoicesにその旨を示し、フラグを待ちます。自動で決められない項目を選ぶのが、ここでの役目です。

  1. エージェントに頼んで、setup --dry-runを実行してもらってください。見つかったものと、決められないものが報告されます。
  2. エージェントと一緒にchoicesを読んでください。「found: pass」という行がありますか? どのポリシーや拠点を使うか、エージェントに伝えてください。
  3. 在庫拠点がありませんか? 郵便番号、市、州をエージェントに伝えてください。--create-locationコマンドを承認します。
  4. エージェントに頼んで、選んだ値でsetup --dry-runをもう一度実行してもらってください。
  5. problemsにまだ何か載っていますか? 手順2から4を繰り返してください。
  6. エージェントに頼んで、同じ選択でsetupを実行してもらってください。account.jsonが書き込まれます。
  7. エージェントに頼んで、導入時の残りの回答を反映してもらってください。ADOPTION-QUESTIONS.mdに、それぞれのキーやファイルが書かれています。
  8. pipelineセクション (account.json内) で、価格の上限と手数料率を確認してください。
  9. エージェントに頼んで、下の5つのチェックを実行してもらってください。五つすべて成功するはずです。

選んだ値はフラグで渡します。エージェントは--fulfillment (fulfillmentはeBayで配送を指す呼び名)、--payment、--returnのいずれかでポリシーIDを渡し、--location-keyで拠点を渡します。導入時の回答も二つ、同じ方法で渡します。--disallow-fulfillmentはエージェントが絶対に使ってはいけない配送ポリシーを指定し、--return-14-dayは14日間の返品ポリシーを残しておく場合に指定します。

python tools/ebay_api.py setup --dry-run --fulfillment <ID> --return <ID> --location-key HOME-01

承認した後、エージェントが実行する拠点作成コマンドは次のようになります。

python tools/ebay_api.py setup --create-location --location-key HOME-01 --postal-code <ZIP> --city <city> --state <ST> --confirm

上の項目7は見落としがちです。setupが読むのはeBayアカウントで、導入時の回答ではないからです。pipelineにはリポジトリの既定値が入ります。200ドルを超えるものはレビューし、確信度が0.70未満なら確認し、落札手数料は13.6%、注文ごとの手数料は0.40ドルです。エージェントがファイルを編集するまではその値が使われ、その後にsetupを実行しても編集内容は維持されます。写真の取得元やバックアップなど、ほかの回答はワークフローファイルとAGENTS.mdに反映します。ADOPTION-GUIDE.mdの手順5と6に、すべての編集項目があります。手順7では、架空のヘッドランプの出品で検証を実行します。eBay上では何も変更しません。

続いて、手順9の5つのチェックです。

python tools/ebay_api.py setup --dry-run              # "problems": [] means ready
python tools/ebay_api.py policies
python tools/ebay_api.py categories "flashlight"
python tools/ebay_api.py browse "flashlight" --limit 1
python tools/ebay_api.py reconcile

これは、私のアカウントで実際に実行したsetup --dry-runの出力を、一部省略してIDを隠したものです。再実行なので、どの選択にも「kept from account.json」と出ています。確認したいのは"problems": []の行です。

{
  "file": "<your folder>/account.json",
  "written": false,
  ...
  "choices": {
    "merchantLocationKey": "kept from account.json",
    "fulfillment": "kept from account.json",
    "payment": "kept from account.json",
    "return": "kept from account.json"
  },
  "problems": [],
  ...
  "next": "Ready: the Lister copies these IDs into offer.json; validate_payload.py checks them"
}

"written": falseは、ドライランが確認だけを行い、ファイルを変更しなかったという意味です。

最初の商品: 役割分担

これでeBay APIの設定は完了です。ここからは、フォルダに写真を入れると、エージェントが5つのワークフローを順番に実行します。出番は、ところどころでの確認に減ります。

ワークフロー 自分でやること
Import 写真を入れる。グループ分けを確認する
Curator 商品の特定が間違っていたら修正する
Evaluator 求められたらTerapeakから成約した比較事例を貼り付ける
Lister 何もしない。未公開のオファーで止まる
Review listing-draft.mdを読んで、承認または却下する

なぜTerapeakは手作業なのでしょうか? ツールのBrowseコマンドが見ているのは、ほかの出品者が今いくらを提示しているかで、購入者が実際に支払った金額ではないからです。提示価格は上限であって、成約価格ではありません。だからEvaluatorは成約した比較事例を求めます。それがSeller Hub (セラーハブ) のTerapeakにあります。

これが駐車係の仕事ぶりです。すべての車を未公開のオファーとして駐車場にきちんと停め、価格の上限を超えるものは、停める前に承認を待ちます。引換券を渡すまでは、一台も駐車場から出ていきません。その引換券が、Reviewでの承認です。

GitHubのebay-listing-agentを入手し、エージェントにADOPTION-GUIDE.mdを渡して、「SandboxではなくProduction」と伝えてください。このeBay API設定ガイドのラベルがeBayの画面と合わなくなっていたら、リポジトリにissueを立ててください。次の出品者が探し回らずに済みます。

リソース


購読