403/401が返る(権限・スコープ)
トラブル
403
401
権限
スコープ
事象
認可フローは成功しているのに、APIを呼び出すと 401 か 403 が返る。
認可フローは成功しているのに、APIを呼び出すと 401 か 403 が返る。
401と403の違い
| コード | 意味 |
|---|---|
| 401 Unauthorized | 認証情報が不正・無効・期限切れ。トークンの問題 |
| 403 Forbidden | 認証は成功したが、その操作の権限がない。スコープ・ロール・所有権の問題 |
401 の典型ケースと対処
- トークン期限切れ(
expired_token)→ リフレッシュトークンで更新 - トークン取り消し済み(ユーザーが連携解除など)→ 再認可フロー
- Authorizationヘッダーの形式不正 →
Bearer(半角スペース付き)+ トークン - 環境取り違え(本番トークンをステージングで使用)→ 環境を確認
403 の典型ケースと対処
- スコープ不足(
insufficient_scope)→ 必要なスコープを追加して再認可 - 店舗アクセス権なし → アプリが連携した店舗以外のリソースを叩いていないか確認
- User系スコープが未審査(
app_not_approved)→ 審査申請(別記事参照) - ロール権限不足 → 連携時のユーザーが必要なロール(オーナー等)を持っていない
- プラン制限(
plan_limit_exceeded)→ 店舗側のプランをアップグレード
切り分け手順
- レスポンスの
error.codeとmessageを確認 X-RR-Request-Idをログに記録- 401 なら
/v1/meを叩いてトークン自体の有効性を確認(成功すればトークンOK、後段で403になっているなら権限問題) - 403 なら、現在のトークンに含まれる
scopeを確認(/v1/oauth/introspect) - 必要なスコープが含まれていなければ再認可
スコープの確認方法
curl -X POST https://receiptroller.io/oauth/introspect \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=$ACCESS_TOKEN&client_id=$CLIENT_ID&client_secret=$SECRET"
→ {
"active": true,
"scope": "store.read receipt.read",
"client_id": "...",
"exp": 1745740001
}
関連ガイド
公開日: 2026-04-27
更新日: 2026-04-27
カテゴリ
タグ
API (8)
Webhook (8)
api (6)
oauth (5)
トラブル (5)
OAuth (4)
getting-started (4)
アプリ登録 (4)
app-registration (3)
webhook (3)
関連記事
-
トークンが取得できない(認証エラー)アクセストークンが取得できないときの原因切り分け。invalid_client、invalid_grant、redirect_uri_mismatch などの代表的エラーと対処を解説します。
-
プランがフリーのまま開発者ポータルが表示されないレシートローラーの開発者ポータルが表示されない場合の確認手順。プランがフリーの場合の対処方法、組織切り替え、表示反映タイミングを解説します。
-
Webhookが届かないWebhookが受信エンドポイントに届かないときの原因切り分け。エンドポイント設定・購読イベント・到達性・署名検証失敗・ファイアウォールなどを順に確認する手順を解説します。
-
User系スコープでapp_not_approvedが返るUser系スコープを使うとapp_not_approvedエラーが返る場合の確認手順。サンドボックス枠での開発、審査申請、サンドボックス本番化の流れを解説します。