販売管理API(Orders / OMS API)の使い方
API
OAuth
販売管理
OMS
注文
CRUD
Android
iOS
このガイドの目的
レシートローラーの販売管理API(Orders / OMS API)を使って、ビジネスアカウント配下の受注を作成・取得・更新・状態遷移(確認/処理中/キャンセル/店舗POS受け取り)・削除する方法をまとめます。Web受注・電話注文・マーケットプレイス連携など、店舗の販売チャネルを統合したいときの入り口になるガイドです。
前提
- OAuth 2.0 認可コードフローでアクセストークンを取得済みであること
- アプリのスコープに
store.orders.read(読み取り)/store.orders.write(作成・更新・削除・状態遷移)を含めていること - ビジネスアカウントID(UUID)が分かっていること(ビジネスアカウント・店舗・POS端末の一覧を取得する)
- ベースURL:
https://receiptroller.io
エンドポイント一覧
| メソッド | パス | 用途 | 必要スコープ |
|---|---|---|---|
| GET | /api/v1/orders | 注文一覧(status / channel / paymentStatus で絞り込み) | store.orders.read |
| GET | /api/v1/orders/{orderId} | 1注文の詳細 | store.orders.read |
| POST | /api/v1/orders | 注文の新規作成 | store.orders.write |
| PUT | /api/v1/orders/{orderId} | 注文の更新(顧客・住所・明細・金額など) | store.orders.write |
| POST | /api/v1/orders/{orderId}/confirm | 状態遷移:保留中 → 確認済 | store.orders.write |
| POST | /api/v1/orders/{orderId}/process | 状態遷移:確認済 → 処理中 | store.orders.write |
| POST | /api/v1/orders/{orderId}/cancel | 状態遷移:キャンセル | store.orders.write |
| POST | /api/v1/orders/{orderId}/fulfill-via-pos | 状態遷移:店舗POSで受け取り完了(→ Delivered) | store.orders.write |
| DELETE | /api/v1/orders/{orderId} | 注文の削除 | store.orders.write |
注文ステータスの種類
| ステータス | 日本語 | 説明 |
|---|---|---|
Pending | 保留中 | 受注したが、まだ確認していない |
Confirmed | 確認済 | 店舗側で受注を確認した |
Processing | 処理中 | 梱包・出荷準備中 |
Shipped | 出荷済 | 出荷完了(WMS連携で自動更新される場合あり) |
Delivered | 配達完了 | 顧客への配達が完了した(店舗POS受け取り経由でもここに遷移) |
Cancelled | キャンセル | 注文取り消し |
Refunded | 返金済 | 返金処理が完了した |
1. 注文一覧を取得する
GET /api/v1/orders?organizationId={organizationId}&status=Pending
Authorization: Bearer {access_token}
クエリパラメータ(任意)
status— 注文ステータスで絞り込みchannel— Web / POS / Phone / Manual / MarketplacepaymentStatus— Unpaid / Paid / Refunded / PartialRefund
レスポンスは orders 配列に注文オブジェクト。各オブジェクトの主要フィールドは下の「注文オブジェクトの構造」を参照してください。
2. 1注文の詳細を取得する
GET /api/v1/orders/{orderId}?organizationId={organizationId}
Authorization: Bearer {access_token}
3. 注文を新規作成する
POST /api/v1/orders?organizationId={organizationId}
Authorization: Bearer {access_token}
Content-Type: application/json
{
"orderNumber": "RR-2026-0002",
"channel": "Phone",
"customerName": "佐藤花子",
"customerEmail": "hanako@example.com",
"customerPhone": "080-9876-5432",
"shippingAddress": {
"postalCode": "100-0001",
"prefecture": "東京都",
"city": "千代田区",
"line": "千代田1-1"
},
"items": [
{ "productId": "prd-002", "productName": "アイスティー", "sku": "TEA-ICE-001",
"quantity": 3, "unitPrice": 380, "subtotal": 1140 }
],
"paymentMethod": "BankTransfer",
"paymentStatus": "Unpaid",
"subtotalAmount": 1140,
"taxAmount": 114,
"shippingAmount": 500,
"totalAmount": 1754,
"linkedStoreId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"notes": "電話受注。日中の配達希望。"
}
ポイント
customerNameのみ必須- リクエストボディに
organizationIdを含めても無視されます。トークン/クエリで解決したビジネスアカウントが必ず使われます - 初期ステータスは常に
Pending。ステータスを進めるには専用の遷移エンドポイントを使ってください
4. 注文を更新する
PUT /api/v1/orders/{orderId}?organizationId={organizationId}
Authorization: Bearer {access_token}
Content-Type: application/json
{
"customerName": "佐藤花子",
"customerPhone": "080-9876-5432",
"shippingAddress": { "postalCode": "100-0001", "prefecture": "東京都",
"city": "千代田区", "line": "千代田1-1-1(番地修正)" },
"items": [ ... ],
"subtotalAmount": 1140, "taxAmount": 114, "shippingAmount": 500, "totalAmount": 1754
}
ポイント
- ステータス変更には使わないでください。ステータスは
/confirm//process//cancel//fulfill-via-pos経由で更新するのがルールです(監査ログに操作種別が正しく残るため) - POS受け取りで紐付いた
linkedPosTransaction情報も PUT では更新できません — 専用エンドポイント経由のみ - 支払いステータス(
paymentStatus)は更新可能 orderNumberとcreatedAtは更新できません(サーバー側で保護)
5. ステータスを進める(確認 → 処理中 → 出荷など)
確認する(Pending → Confirmed)
POST /api/v1/orders/{orderId}/confirm?organizationId={organizationId}
処理中にする(Confirmed → Processing)
POST /api/v1/orders/{orderId}/process?organizationId={organizationId}
キャンセルする
POST /api/v1/orders/{orderId}/cancel?organizationId={organizationId}
状態遷移エンドポイントはレスポンスとして更新後の完全な注文オブジェクトを返します。
※ 出荷(Shipped)/配達完了(Delivered)/返金(Refunded)への遷移は、現状WMS/決済システム連携経由で自動的に発生します。アプリから直接遷移させたい場合は コミュニティ でユースケースをお知らせください。
6. 店舗POSでの受け取り(オンライン注文の店頭受け渡し)
顧客がオンラインで注文 → 店舗カウンターで受け取り → レジで会計、というフローを一度の操作で完結させるエンドポイントです。POS取引と OMS 注文を相互にリンクし、注文を一気に Delivered + Paid に遷移させます。
POST /api/v1/orders/{orderId}/fulfill-via-pos?organizationId={organizationId}
Authorization: Bearer {access_token}
Content-Type: application/json
{
"posTerminalId": "term-001",
"posTransactionId": "tx-9001"
}
動作
- OMS注文の
linkedPosTransactionに{ terminalId, transactionId }を記録 - POS取引の
links.omsOrderIdに注文IDを記録(逆方向リンク) - 注文ステータスを
Deliveredに遷移 - 支払いステータスが
UnpaidならPaidに変更し、paidAtを記録(レジで決済済みのため) - タイムラインに「FulfilledViaPos」エントリを追加
- 注文更新Webhook(
order.updated)が発火 — ペイロードにlinked_pos_terminal_idとlinked_pos_transaction_idが含まれます
べき等性
- 同じ注文IDに同じ
posTransactionIdで再度呼んでも副作用なし。リトライ/二重タップに安全
エラーケース
- 注文 / POS取引が見つからない →
404 - POS取引が別のOMS注文に既に紐付いている →
404(コンフリクト防止) - POS取引がこのビジネスアカウントに属さない →
404(クロステナント防御)
レスポンス例(注文オブジェクトの一部)
{
"id": "ord-001",
"status": "Delivered",
"payment": { "method": "CreditCard", "status": "Paid", "paidAt": "2026-06-01T13:42:00Z" },
"linkedStore": { "id": "f47ac10b-...", "name": "渋谷店" },
"linkedPosTransaction": {
"terminalId": "term-001",
"transactionId": "tx-9001"
},
...
}
利用シナリオ
- 顧客がWebで
Pending注文 → 店舗のレジアプリでPOST /confirm→ 商品を渡す → レジで会計 → POS取引が記録された直後にレジアプリからPOST /fulfill-via-pos - 取引一覧(Transactions API)で、POS行とOMS行の両方が相互にリンクを持つようになり、UI側で重複表示の制御が可能になります
7. 注文を削除する
DELETE /api/v1/orders/{orderId}?organizationId={organizationId}
Authorization: Bearer {access_token}
レスポンスは 204 No Content。削除済み注文は一覧・検索結果から消えます。
注文オブジェクトの構造
{
"id": "ord-001",
"orderNumber": "RR-2026-0001",
"channel": "Web",
"status": "Pending",
"customer": { "name": "...", "email": "...", "phone": "..." },
"shippingAddress": { "postalCode": "...", "prefecture": "...", "city": "...", "line": "..." },
"items": [ { "productId": "...", "productName": "...", "sku": "...",
"quantity": 2, "unitPrice": 480, "subtotal": 960 } ],
"itemCount": 2,
"payment": { "method": "CreditCard", "status": "Paid", "paidAt": "..." },
"amounts": { "subtotal": 960, "tax": 96, "shipping": 500, "discount": 0, "total": 1556 },
"linkedStore": { "id": "...", "name": "..." },
"linkedPosTransaction": null, // 店舗POS受け取り済みなら { terminalId, transactionId }
"notes": "...",
"preOrder": { "isPreOrder": false, "targetShipDate": null },
"createdAt": "...",
"updatedAt": "..."
}
明細(Items)の構造
{
"productId": "prd-001",
"productName": "ブレンドコーヒー M",
"sku": "CFE-BLD-M",
"quantity": 2,
"unitPrice": 480,
"subtotal": 960,
"unit": "個"
}
productId はレシートローラー商品マスターのID(商品管理API で取得可能)。POSやEC外部システム経由の注文では、productIdなしで productName + sku のみ送ることもできます。
典型的なフロー(モバイルアプリ)
- OAuthでアクセストークン取得 → スコープに
store.orders.readとstore.orders.write GET /api/v1/me/organizationsでビジネスアカウント選択- 受注ダッシュボード画面で
GET /api/v1/orders?status=Pendingを取得 - 新規受注画面で
POST /api/v1/orders(その前にGET /api/v1/productsで商品を選ばせる) - 注文詳細画面で「確認する」ボタン →
/confirm - 梱包担当者が「処理中にする」 →
/process - 店舗のレジアプリで「店舗で受け取り完了」 → POS取引IDを指定して
/fulfill-via-pos - 顧客都合のキャンセル →
/cancel
エラーレスポンス
| ステータス | 意味 | 対処 |
|---|---|---|
| 401 Unauthorized | アクセストークン無効/期限切れ | リフレッシュトークンで再取得 |
| 403 Forbidden | 必要スコープなし/ビジネスアカウントのメンバーでない | スコープと選択中ビジネスアカウントを確認 |
| 400 Bad Request | 必須フィールド不足(customerName / posTerminalId / posTransactionId)/ボディが空 | リクエストを見直し |
| 404 Not Found | 注文IDがそのビジネスアカウントに存在しない//fulfill-via-pos でPOS取引が見つからない/別注文に既にリンク済み | 一覧から再取得、コンフリクトの場合は別の取引を指定 |
関連情報
公開日: 2026-06-01
更新日: 2026-06-01
カテゴリ
タグ
API (20)
OAuth (14)
Android (10)
iOS (9)
Webhook (8)
api (6)
oauth (5)
トラブル (5)
POS連携 (4)
getting-started (4)
関連記事
-
営業時間API(Business Hours API)の使い方レシートローラーの営業時間API(/api/v1/stores/{storeId}/business-hours)のガイドです。曜日ごとの営業時間の取得・更新、特例営業日(臨時休業・営業時間変更)の登録、店舗の就業可能時間(シフト作成時の上限となる業務時間)の設定、現在営業中かどうかの判定までを解説します。
-
リクエストとレスポンスの基本(JSON)レシートローラーAPIのリクエスト形式、必須ヘッダー、レスポンス構造、ページネーション、フィルタリング、日時形式の規則を解説します。
-
ネイティブモバイルアプリ向けガイド: 複数ビジネスアカウントアクセスと OAuth フローAndroid / iOS のネイティブアプリ向け実装ガイド。アプリ登録時に「認可時に1つのビジネスアカウントへトークンを紐付ける」をオフにすると、user-scoped OAuth トークンが発行されます。/api/v1/me/organizations + ?organizationId= パターンで複数ビジネスアカウントを横断アクセスできます。
-
取引一覧API(Transactions API:POS+OMS統合フィード)の使い方レシートローラーのTransactions APIは、レジ売上(PosTransactions)と販売管理注文(OmsOrders)を1つのフィードに統合した読み取り専用APIです。Android/iOSアプリで「ビジネスアカウント全体の取引」を一覧表示する際の入り口になります。
-
PosTransactionDto 仕様 — 取引データのフィールドリファレンスレシートローラーが扱う取引データの正規モデル PosTransactionDto の全フィールドを解説します。識別子・日時・金額・明細・支払い・スタッフ・ステータス・CRM 連携の各カテゴリーごとに、フィールド名・型・意味・各 POS ベンダーからの埋め方をまとめた、開発者および外部システム連携担当者向けのリファレンスです。スマレジ・Square 双方のマッピング記事からも参照されます。