認証
公開 API の認証は 2 系統です。外部システム(EC・POS・WMS・基幹)からのデータ push / routing / 設定は ingest API キー(x-ingest-secret)、倉庫スタッフのピッキングアプリ(picking-ios)からの /api/operator/* は operator JWT(Authorization: Bearer)で認証します。
Base URL
https://api.lmile.io
ほとんどの公開 API(Ingestion / Routing / Fulfillment / Oversell / Customer Orders / Configuration / Webhooks)は ingest API キー で認証します(下記「Ingest API キー認証」)。
倉庫スタッフ向けの Operator API(
/api/operator/*)は operator JWT で認証します(下記「Operator JWT 認証」)。read 系(照会)は JWT のみ、棚ピック(/api/operator/shelf/pick)と確保スキャン(/api/operator/secure-scan)は機械間連携も想定しx-ingest-secretでも呼べます。Routing の一部 write(在庫確保 / 売越し / 再引き当て / 売越しケース)は どちらの系統でも呼べます(下記「Routing write の 2 系統認証」)。
Ingest API キー認証
Headers
x-ingest-secret: {API_KEY}
Content-Type: application/jsonx-ingest-secret
✓
発行された ingest API キー
Content-Type
✓
application/json
shopは省略できます(キーが 1 つのアカウントにひも付いている場合。下記「shop スコープ」)。認証に失敗すると
401 unauthorized、シークレット未設定のサーバーは503を返します。
shop スコープ
発行される API キーは、あなたのアカウント(shop)にひも付いています。shop は LastMile 上のアカウントの識別子です。Shopify を使わない連携(POS・WMS・基幹システムなど)でも同じ値です。
キーが 1 つのアカウントにひも付いている場合、
shopは送らなくてかまいません。送らなければ、キーのアカウントとして処理します。各エンドポイントの例には
shopが入っていますが、そのまま送っても省略しても結果は同じです。shopを送る場合は、キーにひも付くアカウントと一致させてください。一致しない場合は403 shop not authorized for this keyを返します。複数のアカウントにひも付くキーでは、どのアカウントか決められません。
shopを必ず送ってください。1 つのキーで、ひも付いた範囲のすべての ingest / routing エンドポイントを利用できます。
たとえば次の 2 つは同じ結果になります。
API キーの取得
キーは Last Mile のコンソール(設定 > API キー)で発行します。発行・失効ができるのは、組織のオーナー・管理者です。
何に使うキーか分かる名前(例: 基幹システムの在庫連携)を付けて発行します。
キーは発行したときに 1 回だけ表示されます。 再表示はできないので、その場でコピーして安全な場所に保管してください。
使わなくなったキーは同じ画面で失効します。失効したキーで呼ぶと
401 unauthorizedを返します。
キーを紛失した場合は、新しいキーを発行して連携先を切り替えてから、古いキーを失効してください(先に失効すると連携が止まります)。複数のアカウントにまたがるキーが必要な場合は admin@lmile.io へご連絡ください。
取り扱いルール
サーバーサイド環境変数に格納する
ブラウザ JS / フロントエンドに埋め込まない
Git にコミットしない
Operator JWT 認証
倉庫スタッフ向けのピッキングアプリ(picking-ios)が呼ぶ Operator API(/api/operator/*)専用の認証系統です。ingest API キー(機械間 secret)とは独立しており、スタッフ個人のログインで発行された JWT を使います。
個人ログインの認証情報は機械間の
x-ingest-secretとは別物です。倉庫スタッフは ingest API キーを持たず、operator JWT だけで/api/operator/*を利用します。
Headers
トークンの取得
スタッフのアカウントはプラットフォーム / 管理者側で発行します(アプリ内のセルフサインアップはありません)。
JWT は
POST /api/operator/login(email+password)、POST /api/operator/login/google(Google サインインのidToken)、またはPOST /api/operator/login/apple(Sign in with Apple のidentityToken)で発行し、有効期限が切れたらPOST /api/operator/refresh(refreshToken)で更新します。各スタッフがどの
shopを操作できるかの束縛は Last Mile が割り当てます(発行されたばかりで未割当のアカウントは未束縛です。割当・失効は admin@lmile.io へご連絡ください)。
shop スコープ(staff↔shop 束縛)
operator JWT は、そのスタッフに束縛された shop だけを操作できます。
各エンドポイントが受け取る
shop(read 系は query、write 系はボディ)が束縛 shop に含まれない場合、403 shop_not_authorizedを返します。トークンが無い / 不正・失効している場合は
401(missing_token/invalid_token)です。
Routing write の 2 系統認証
出荷ステータス遷移(/api/routing/fulfillment)・在庫確保(/api/routing/secure)・確保スキャン(/api/operator/secure-scan)・売越しマーク / 再引き当て(/api/routing/oversell / /api/routing/reallocate)・売越しケース(/api/routing/oversell-case)・宛先住所修正 / ラベル再発行(/api/routing/shipment/address / /api/routing/shipment/retry-label)・ラベル手動再印刷(/api/routing/shipment/print-label)・MFC 棚付き入庫(/api/ingest/mfc-inventory)・出荷元変更(/api/routing/change-source)の 11 エンドポイントは、ingest API キー(x-ingest-secret)と operator JWT(Authorization: Bearer)のどちらでも呼べます。
系統はヘッダの有無で明示判別します(フォールバックはしません)。
x-ingest-secretを付けると ingest 系統、付けずAuthorizationを付けると operator 系統で検証します。既存の機械間クライアント(
x-ingest-secretのみ提示)の挙動は不変です。operator JWT で呼んだ場合、その操作者(スタッフ)が更新レコードに記録されます。
Last updated
Was this helpful?