API認証ガイド
API認証
OAuth 2.0
認可コード
開発者ガイド
認証ガイド
レシートローラー APIはOAuth 2.0 認可コードフローを使用します。 サードパーティの開発者がアプリを登録し、ビジネスオーナーがアクセスを許可すると、開発者はトークンを取得してAPIを呼び出すことができます。
ステップ1:アプリを登録する
- レシートローラーアカウントにログインします
- ビジネスアカウント詳細 → ⋮ メニュー → 開発者アプリ に移動します
- アプリを作成 をクリックします
- アプリ名、リダイレクトURI、必要なAPIスコープを入力・選択します
- 作成後、
client_idとclient_secretが発行されます
⚠ 重要:
client_secret は一度だけ表示されます。必ずコピーして安全に保管してください。紛失した場合は再生成が必要です(既存のシークレットは即座に無効になります)。ステップ2:ビジネスオーナーを認可画面にリダイレクトする
ビジネスオーナーがアプリにアカウントを連携する際、ブラウザを以下のURLにリダイレクトします:
GET https://your-domain/oauth/authorize
?client_id=YOUR_CLIENT_ID
&redirect_uri=YOUR_REDIRECT_URI
&response_type=code
&scope=store.products.read store.orders.read
&state=RANDOM_STATE_STRING
| パラメータ | 必須 | 説明 |
|---|---|---|
client_id |
はい | アプリのクライアントID |
redirect_uri |
はい | アプリに登録されたリダイレクトURIと完全一致する必要があります |
response_type |
はい | code を指定してください |
scope |
はい | スペース区切りのスコープ一覧(下記の利用可能なスコープを参照) |
state |
推奨 | CSRF攻撃を防ぐためのランダム文字列。コールバック時にそのまま返されます。 |
code_challenge |
任意 | PKCEコードチャレンジ(code_verifierのSHA-256ハッシュをbase64urlエンコード) |
code_challenge_method |
任意 | S256(PKCE使用時は必須) |
ビジネスオーナーには、アプリ名と要求されるアクセス権限が表示された同意画面が表示されます。許可または拒否を選択できます。
ステップ3:認可コードを受け取る
許可された場合、ビジネスオーナーのブラウザが redirect_uri にリダイレクトされます:
GET https://your-app.com/callback
?code=AUTHORIZATION_CODE
&state=RANDOM_STATE_STRING
拒否された場合:
GET https://your-app.com/callback
?error=access_denied
&state=RANDOM_STATE_STRING
ℹ 注意: 認可コードの有効期限は10分間で、一度しか使用できません。
ステップ4:コードをトークンに交換する
サーバーサイドから(ブラウザではなく)、以下のPOSTリクエストでコードをアクセストークンに交換します:
POST /api/v1/auth/token
Content-Type: application/json
{
"grantType": "authorization_code",
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET",
"code": "AUTHORIZATION_CODE",
"redirectUri": "YOUR_REDIRECT_URI"
}
成功レスポンス(200):
{
"accessToken": "aBcDeFgH1234567890...",
"refreshToken": "xYzAbCdEfG098765...",
"tokenType": "Bearer",
"expiresIn": 3600,
"scope": "store.products.read store.orders.read"
}
| フィールド | 説明 |
|---|---|
accessToken |
APIを呼び出す際に使用します。有効期限は1時間です。 |
refreshToken |
アクセストークンの有効期限が切れた際に、新しいトークンを取得するために使用します。有効期限は30日間です。 |
expiresIn |
トークンの有効期間(秒)。3600 = 1時間 |
scope |
ビジネスオーナーが承認したスコープ |
ステップ5:APIを呼び出す
アクセストークンを Authorization ヘッダーに含めてリクエストします:
GET /api/v1/store/products
Authorization: Bearer aBcDeFgH1234567890...
Content-Type: application/json
APIは、アプリを認可したビジネスアカウントに紐づくデータを返します。承認されたスコープで許可されたデータのみアクセス可能です。
ステップ6:期限切れトークンをリフレッシュする
アクセストークンの有効期限が切れた場合、リフレッシュトークンを使用して新しいトークンペアを取得します:
POST /api/v1/auth/token
Content-Type: application/json
{
"grantType": "refresh_token",
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET",
"refreshToken": "xYzAbCdEfG098765..."
}
レスポンス形式はステップ4と同じです。古いアクセストークンとリフレッシュトークンは無効化され、新しいペアが返されます。
トークンの取り消し
アクセストークンまたはリフレッシュトークンを取り消すには:
POST /api/v1/auth/revoke
Content-Type: application/json
{
"token": "取り消すトークン",
"clientId": "YOUR_CLIENT_ID"
}
ビジネスオーナーは、アカウント設定からいつでもアプリのアクセスを取り消すことができます。
エラーレスポンス
| HTTPステータス | エラー | 説明 |
|---|---|---|
| 400 | unsupported_grant_type |
authorization_code と refresh_token のみサポートされています |
| 400 | invalid_request |
必須パラメータが不足しています |
| 401 | invalid_grant |
無効なコード、期限切れのコード、認証情報の不一致、またはリダイレクトURIの不一致 |
| 400 | invalid_client |
不明なclient_id |
| 400 | invalid_redirect_uri |
redirect_uriが登録されたURIと一致しません |
利用可能なスコープ
Store(店舗)
| スコープ | 説明 |
|---|---|
store.products.read |
商品・在庫情報を取得します |
store.products.write |
商品の作成・更新を行います |
store.orders.read |
注文データを取得します |
store.orders.write |
注文ステータスを更新します |
store.customers.read |
顧客データを取得します |
store.coupons.read |
クーポンデータを取得します |
store.coupons.write |
クーポンの作成・更新を行います |
store.inventory.read |
倉庫・在庫データを取得します |
CRM(顧客関係管理)
| スコープ | 説明 |
|---|---|
crm.profiles.read |
CRM顧客プロフィールを取得します |
crm.segments.read |
CRMセグメント・ランクを取得します |
SNS / アナリティクス
| スコープ | 説明 |
|---|---|
sns.content.read |
SNS投稿データを取得します |
sns.audience.read |
SNSオーディエンスデータを取得します |
analytics.read |
分析スナップショットを取得します |
フロー図
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ あなたのアプリ │ │ ビジネス │ │ ReceiptRoller │
│ (開発者) │ │ オーナー │ │ プラットフォーム │
└──────┬───────┘ └──────┬───────┘ └────────┬─────────┘
│ │ │
│ 1. /oauth/authorize にリダイレクト │
│───────────────────►│─────────────────────►│
│ │ │
│ │ 2. 同意画面を表示 │
│ │◄─────────────────────│
│ │ │
│ │ 3. 許可する │
│ │─────────────────────►│
│ │ │
│ 4. ?code=認可コード でリダイレクト │
│◄───────────────────│◄─────────────────────│
│ │ │
│ 5. POST /api/v1/auth/token │
│ (code + client_id + client_secret) │
│──────────────────────────────────────────►│
│ │
│ 6. { accessToken, refreshToken } │
│◄──────────────────────────────────────────│
│ │
│ 7. GET /api/v1/store/products │
│ Authorization: Bearer {accessToken} │
│──────────────────────────────────────────►│
│ │
│ 8. { data: [...] } │
│◄──────────────────────────────────────────│
セキュリティのベストプラクティス
client_secretはサーバーサイドにのみ保管してください。フロントエンドのコードやモバイルアプリには絶対に含めないでください。- CSRF攻撃を防ぐため、
stateパラメータを必ず検証してください。 - モバイルアプリやシングルページアプリケーションでは、PKCE(
code_challenge/code_verifier)を使用してください。 - トークンは安全に保管してください。アクセストークンをログに記録したり、URLに含めたりしないでください。
- サービスの中断を避けるため、有効期限が切れる前にトークンのリフレッシュを実装してください。
- アプリが実際に必要とするスコープのみをリクエストしてください。
公開日: 2026-03-27
更新日: 2026-03-27
カテゴリ
タグ
API (8)
Webhook (8)
api (6)
oauth (5)
トラブル (5)
OAuth (4)
getting-started (4)
アプリ登録 (4)
app-registration (3)
webhook (3)