員工管理 API(Staff API)的使用方式
API
OAuth
員工管理
員工
Staff
CRUD
Android
iOS
本指南的目的
本文彙整使用 ReceiptRoller 的員工管理 API(Staff API),建立、取得、更新、刪除商業帳戶底下員工(Staff)的方法。這是在處理員工資料時的入口指南,適用於排班管理應用程式、依 POS 員工分開的營業額應用程式、人事系統串接等。
前提
- 已透過 OAuth 2.0 授權碼流程取得存取權杖
- 應用程式的權限範圍中包含
store.staff.read(讀取)/store.staff.write(建立、更新、刪除) - 已得知商業帳戶 ID(UUID)(取得商業帳戶、店鋪、POS 端末的一覽)
- 基底 URL:
https://receiptroller.io
端點一覽
| 方法 | 路徑 | 用途 | 必要權限範圍 |
|---|---|---|---|
| GET | /api/v1/staff | 員工一覽/搜尋 | store.staff.read |
| GET | /api/v1/staff/{staffId} | 1 名的詳細 | store.staff.read |
| POST | /api/v1/staff | 新增建立 | store.staff.write |
| PUT | /api/v1/staff/{staffId} | 更新 | store.staff.write |
| DELETE | /api/v1/staff/{staffId} | 刪除(軟刪除) | store.staff.write |
1. 取得員工一覽
GET /api/v1/staff?organizationId={organizationId}
Authorization: Bearer {access_token}
查詢參數(皆為選填,AND 結合)
storeId— 僅該店鋪所配屬的員工(也包含全店鋪配屬的員工)position— 以職稱篩選(完全一致)employmentType— FullTime / PartTime / Contract / Otherstatus— Active / Inactive / Pendingsearch— 以姓名(含假名)、員工編號、參照 ID 進行部分搜尋includeDeleted— 是否包含已刪除(預設 false)
回應範例
{
"organizationId": "a04507de-043a-4b47-b0a3-6204562f6e20",
"staff": [
{
"id": "stf-001",
"organizationId": "a04507de-...",
"employeeNumber": "E-0001",
"referenceId": "TM_xyz",
"userId": "",
"name": {
"first": "太郎",
"last": "田中",
"firstKana": "タロウ",
"lastKana": "タナカ",
"display": "田中 太郎"
},
"role": {
"position": "店長",
"employmentType": "FullTime",
"isOwner": false
},
"status": "Active",
"contact": { "phone": "090-1234-5678", "email": "tanaka@example.com" },
"hr": { "hireDate": "2024-04-01T00:00:00Z", "dateOfBirth": "1990-05-15T00:00:00Z", "address": "東京都渋谷区..." },
"pay": {
"hourlyRate": 1800,
"isOvertimeExempt": true,
"tipEligible": true,
"jobs": [
{
"jobTitle": "店長",
"payType": "HOURLY",
"hourlyRate": 1800,
"annualRate": 0,
"weeklyHours": 40,
"locationIds": ["store-A"]
},
{
"jobTitle": "レジ",
"payType": "HOURLY",
"hourlyRate": 1200,
"annualRate": 0,
"weeklyHours": 10,
"locationIds": ["store-B"]
}
]
},
"assignments": {
"storeIds": ["store-A", "store-B"],
"allLocations": false
},
"emergency": { "name": "田中花子", "phone": "090-...", "relation": "配偶者" },
"integrations": { "squareTeamMemberId": "TM_xyz", "smaregiStaffId": "" },
"profileImageUrl": "https://...",
"notes": "",
"createdAt": "2024-04-01T09:00:00Z",
"updatedAt": "2026-06-02T10:30:00Z"
}
],
"totalCount": 1
}
2. 取得 1 名的詳細
GET /api/v1/staff/{staffId}?organizationId={organizationId}
Authorization: Bearer {access_token}
若員工不屬於指定的商業帳戶,則回傳 404。
3. 新增建立
POST /api/v1/staff?organizationId={organizationId}
Authorization: Bearer {access_token}
Content-Type: application/json
{
"displayName": "佐藤 花子",
"firstName": "花子",
"lastName": "佐藤",
"firstNameKana": "ハナコ",
"lastNameKana": "サトウ",
"employeeNumber": "E-0002",
"position": "レジ担当",
"employmentType": "PartTime",
"status": "Active",
"phone": "080-9876-5432",
"email": "sato@example.com",
"hourlyRate": 1200,
"hireDate": "2026-06-01",
"isOvertimeExempt": false,
"tipEligible": true,
"assignedStoreIds": "store-001,store-002",
"isAssignedToAllLocations": false,
"jobAssignmentsJson": "[{\"jobTitle\":\"レジ\",\"payType\":\"HOURLY\",\"hourlyRate\":1200,\"weeklyHours\":20,\"locationIds\":[\"store-001\"]}]"
}
重點
displayName或firstName+lastName其中之一為必填- 即使在請求本文包含
organizationId也會被忽略。一定會使用以權杖/查詢解析出的商業帳戶 - 若有多個工作,請在
jobAssignmentsJson傳入陣列。若只有單一工作,僅position+hourlyRate也可以
4. 更新
PUT /api/v1/staff/{staffId}?organizationId={organizationId}
Authorization: Bearer {access_token}
Content-Type: application/json
{
"displayName": "佐藤 花子",
"phone": "080-9876-5432",
"hourlyRate": 1300,
"status": "Active"
}
會以送出的欄位覆寫(非部分更新,而是完全置換)。想保留值的欄位請將既有值一併重新送出。
5. 刪除(軟刪除)
DELETE /api/v1/staff/{staffId}?organizationId={organizationId}
Authorization: Bearer {access_token}
重點
- 回應為
204 No Content - 由於是軟刪除,仍可從過去的排班日誌或 POS 交易解析出對應的員工 ID
- 已刪除員工不會包含在一覽、搜尋結果中
與 Square Team Member 的對應
本 API 的欄位與 Square Team Members API 具互通性。在 Square 串接啟用的商業帳戶中,integrations.squareTeamMemberId 會自動設定,Square 端的變更也會反映至 ReceiptRoller 端(預定於 Phase 3, t-e9a2f482 實作)。
Square 來源的欄位
referenceId⇔ Squarereference_idrole.isOwner⇔ Squareis_ownerstatus⇔ Squarestatus(ACTIVE → "Active" / INACTIVE → "Inactive")assignments.allLocations⇔ Squareassignment_type: ALLpay.jobs⇔ Squarewage_setting.job_assignmentspay.isOvertimeExempt⇔ Squareis_overtime_exemptpay.tipEligible⇔ Squaretip_eligible
ReceiptRoller 獨有的欄位(Square 沒有/不同步)
- 假名(firstNameKana, lastNameKana)
- 入職日、出生年月日、地址
- 緊急聯絡人(emergency.*)
- 雇用型態(FullTime / PartTime / Contract / Other)
- 個人檔案照片
- 備註、員工編號、Smaregi 串接 ID
典型的流程(行動應用程式)
- 以 OAuth 取得存取權杖 → 權限範圍包含
store.staff.read與store.staff.write - 以
GET /api/v1/me/organizations選擇商業帳戶 - 在員工一覽畫面以
GET /api/v1/staff?storeId=...分頁顯示 - 新增時
POST /api/v1/staff - 編輯畫面
GET /api/v1/staff/{id}→PUT /api/v1/staff/{id} - 離職處理
DELETE /api/v1/staff/{id}(或以status: "Inactive"PUT)
錯誤回應
| 狀態 | 意義 | 因應 |
|---|---|---|
| 401 Unauthorized | 存取權杖無效/過期 | 以刷新權杖重新取得 |
| 403 Forbidden | 缺少必要權限範圍/非商業帳戶的成員 | 確認權限範圍與選擇中的商業帳戶 |
| 400 Bad Request | 必填欄位不足(displayName 或 firstName/lastName) | 檢查請求本文 |
| 404 Not Found | 員工 ID 不存在於該商業帳戶 | 從一覽重新取得 |
相關資訊
發布日: 2026-06-03
更新日: 2026-07-06
標籤
API (22)
OAuth (15)
Android (10)
iOS (9)
Webhook (8)
api (7)
oauth (5)
POS串接 (4)
getting-started (4)
參考 (4)
相關文章
-
店鋪資訊 API(Store Information API)的使用方式說明如何以 REST API 取得、更新店鋪的基本資訊(店鋪名稱、店鋪類別、聯絡方式、地址)。可從員工應用程式等以權杖驗證的用戶端實作店鋪資訊的編輯畫面。
-
店內媒體顯示器 API(Display API)的使用方式ReceiptRoller 店內 Android 顯示器 API(/api/v1/displays/*)的概要,以及配對、心跳、播放清單取得、播放實績回報的步驟彙整。這是為在 Android 電子看板或店內數位看板端末播放媒體循環而實作應用程式的入門指南。
-
交易一覽 API(Transactions API:POS+OMS 整合摘要)的使用方式ReceiptRoller 的 Transactions API 是將收銀營業額(PosTransactions)與銷售管理訂單(OmsOrders)整合為單一摘要的唯讀 API。在 Android/iOS 應用程式中一覽顯示「整個商業帳戶的交易」時,即為入口。
-
營業額實績 API(Sales API)的使用方式彙整 ReceiptRoller 營業額實績 API(/api/v1/sales/*)的概要,以及依商業帳戶、店鋪、POS 端末、期間的篩選方法。這是一份涵蓋實際回應結構(KpiValue 巢狀型)與 averageTicket、權杖有效期限(8 小時)在內,為在 Android/iOS 行動應用程式或伺服器串接實作營業額儀表板的入門指南。
-
銷售管理 API(Orders / OMS API)的使用方式這是使用 ReceiptRoller 銷售管理 API(/api/v1/orders)對商業帳戶底下的訂單進行 CRUD 操作的指南。彙整訂單的建立、更新、狀態轉移(確認、處理中、取消)、刪除,以及適用於 Android/iOS 應用程式或伺服器串接的流程。