PagarBook:Attendance & Payroll icon

PagarBook attendance, CTC and staff-loan records

Staff Payroll & Attendance Khata App · Business 4.4 ★

PagarBook:Attendance & Payroll is the Android client from Staff Payroll & Attendance Khata App (pagarbook.com) for Indian MSME owners who keep a digital staff khata. After a phone OTP or Truecaller login, owners add workers, mark daily attendance, apply leave, set CTC salary structures, pay wages including online collections, and track staff loans from the same shop-floor ledger. Play rates it 4.37 from about 92,000 reviews with 10 million-plus downloads. It sits next to greytHR, Darwinbox and ADP Mobile Solutions as the MSME khata rather than a tenanted enterprise HRIS.

Staff-day punches land as workedMinutes and punchTime on each attendance row, with the same payload rolling present, absent, halfDay, fineMinutes and overTimeMinutes into a day summary and flagging hasOddPunches or previousDatesApprovalPending when a mark still needs a manager. Leave ledgers sit beside those days: totalAccruedLeaves against totalAvailedLeaves and totalEncashableLeaves, then applications carrying startDate, endDate, leaveCategoryId and fromSession.

The staff roster returns totalStaff, onboardingPendingStaffCount and per-worker companyStaffId. Active CTC cards expose ctc, hasBreakup, templateId and statutoryTemplateId; salary-detail screens split earnings, deductions and payments with paymentDate and onlineId. Staff-loan ledgers pair records with loan and repayment totals.

Payroll ops, labour-compliance desks and lending stacks use those punches, CTC cards and loan rows to reconcile wages, leave liability and advances. openData Studio turns the same objects into callable open data.

Screenshots

  • PagarBook:Attendance & Payroll screenshot 1
  • PagarBook:Attendance & Payroll screenshot 2
  • PagarBook:Attendance & Payroll screenshot 3
  • PagarBook:Attendance & Payroll screenshot 4
  • PagarBook:Attendance & Payroll screenshot 5
  • PagarBook:Attendance & Payroll screenshot 6

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Verify phone OTP and load session

    POST /v1/khata/session/phone-otp osint

    Exchanges phone plus otp for the signed-in KmpUser, including token, businessId and businessName that scope later staff, attendance and payroll calls.

    Auth: Unauthenticated. Body is phone plus otp from the SMS code. Returns KmpUser.token used as Authorization: Bearer on later calls.

    • id
    • name
    • token
    • fcmToken
    • phone
    • businessId
    • businessName
    • language
    • email
    • userPin
    • currentAppFlavour
    • adminCount
    • businessStartDate
    • employeeStartDate
    POST /v1/khata/session/phone-otp HTTP/1.1
    Content-Type: application/json
    
    {
      "phone": "9876543210",
      "otp": "482916"
    }
    {
      "id": 44102,
      "name": "Ramesh Patel",
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
      "fcmToken": "fcm-8f21c4a0",
      "phone": "9876543210",
      "businessId": 9104,
      "businessName": "Patel Textiles",
      "language": 1,
      "email": "[email protected]",
      "userPin": null,
      "currentAppFlavour": "pagarbook",
      "adminCount": 2,
      "businessStartDate": "2019-06-01",
      "employeeStartDate": "2019-06-01"
    }
  • List all staff

    GET /v1/khata/crew/roster opendata

    Pages the business staff roster with totalStaff, onboardingPendingStaffCount and per-worker companyStaffId.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • sections
    • summary
    • cursor
    • balance
    • firstStartDate
    • self
    • workBasisStaffExists
    • onboardingPendingStaffCount
    • totalStaff
    • id
    • name
    • companyStaffId
    GET /v1/khata/crew/roster HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "sections": [{
        "title": "Active",
        "employees": [{
          "id": 55201,
          "name": "Anita Rao",
          "companyStaffId": "EMP-1024"
        }]
      }],
      "summary": {
        "balance": 18450.0,
        "firstStartDate": "2019-06-01",
        "self": {"id": 44102, "name": "Ramesh Patel", "companyStaffId": "OWNER"},
        "workBasisStaffExists": true,
        "onboardingPendingStaffCount": 3,
        "totalStaff": 42
      },
      "cursor": "c-19f2"
    }
  • Staff attendance by worker

    GET /v1/khata/attendance/worker/{staffId} opendata

    Returns one worker's attendance rows plus a summary of present, absent, workedMinutes, fineMinutes and overTimeMinutes.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • summary
    • items
    • sections
    • previousDatesApprovalPending
    • staffId
    • companyStaffId
    • attendanceDate
    • workedMinutes
    • effectiveWorkedMinutes
    • present
    • absent
    • halfDay
    • fineMinutes
    • overTimeMinutes
    • hasOddPunches
    • hasUntaggedPunches
    GET /v1/khata/attendance/worker/55201 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "summary": {
        "present": 18.0,
        "absent": 2,
        "halfDay": 1,
        "neutral": 0,
        "workedMinutes": 8640,
        "fineMinutes": 45,
        "overTimeMinutes": 120,
        "leaveCount": 1.0,
        "paidHoliday": 0.0,
        "paidWeeklyHoliday": 4.0,
        "onDuty": 0,
        "totalPendingApprovals": 1
      },
      "items": [{
        "staffId": 55201,
        "companyStaffId": "EMP-1024",
        "attendanceDate": "2026-10-03",
        "workedMinutes": 480,
        "effectiveWorkedMinutes": 465,
        "leaveType": null,
        "leaveName": null,
        "leaveCategoryId": null,
        "isCompOffLeave": false,
        "hasUntaggedPunches": false,
        "hasOddPunches": false
      }],
      "sections": [],
      "previousDatesApprovalPending": false
    }
  • Attendance by calendar date

    GET /v1/khata/attendance/day/{date} opendata

    Loads the whole-crew attendance board for one calendar date, including pending-approval flags.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • summary
    • items
    • previousDatesApprovalPending
    • present
    • absent
    • workedMinutes
    • fineMinutes
    • fineStaffCount
    • overTimeMinutes
    • overTimeStaffCount
    • msaStaffCount
    • totalPendingApprovals
    • staffId
    • attendanceDate
    GET /v1/khata/attendance/day/2026-10-03 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "summary": {
        "present": 38.0,
        "absent": 3,
        "halfDay": 1,
        "neutral": 0,
        "workedMinutes": 18240,
        "fineMinutes": 90,
        "fineStaffCount": 4,
        "overTimeMinutes": 240,
        "overTimeStaffCount": 6,
        "onDuty": 1,
        "msaStaffCount": 2,
        "totalPendingApprovals": 2
      },
      "items": [{
        "staffId": 55201,
        "companyStaffId": "EMP-1024",
        "attendanceDate": "2026-10-03",
        "workedMinutes": 480,
        "hasOddPunches": false,
        "hasUntaggedPunches": false
      }],
      "sections": [],
      "previousDatesApprovalPending": true
    }
  • Create attendance punch

    POST /v1/khata/attendance/punch opendata

    Writes a punch against an attendanceId at punchTime for the AMS day record.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • attendanceId
    • punchTime
    POST /v1/khata/attendance/punch HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Content-Type: application/json
    
    {
      "attendanceId": 880341,
      "punchTime": "2026-10-03T09:12:00+05:30"
    }
    {}
  • Leave balances for a staff member

    GET /v1/khata/leave/balance/{staffId} opendata

    Returns accrued, availed, balanced and encashable leave totals for one staffId, optionally as of date.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • summary
    • leaveCategories
    • staff
    • availedWeeklyOffs
    • leaveTemplate
    • totalAccruedLeaves
    • totalAvailedLeaves
    • totalBalancedLeaves
    • totalEncashableLeaves
    • leaveBalance
    • encashableLeaves
    • accruedLeaves
    • availedLeaves
    • toBeAccrued
    • templateLeaveCount
    • isCompOffLeave
    GET /v1/khata/leave/balance/55201?date=2026-10-03 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "summary": {
        "totalAccruedLeaves": 18.0,
        "totalAvailedLeaves": 6.5,
        "totalBalancedLeaves": 11.5,
        "totalEncashableLeaves": 4.0
      },
      "leaveCategories": [{
        "id": 3,
        "name": "Casual Leave",
        "leaveBalance": 11.5,
        "encashableLeaves": 4.0,
        "templateLeaveCount": 18.0,
        "accruedLeaves": 18.0,
        "availedLeaves": 6.5,
        "toBeAccrued": 1.5,
        "isCompOffLeave": false
      }],
      "staff": {"id": 55201, "name": "Anita Rao"},
      "availedWeeklyOffs": 4,
      "leaveTemplate": {"id": 12, "name": "Shop floor"}
    }
  • Submit leave application

    POST /v1/khata/leave/request opendata

    Creates a leave application for staffId across startDate/endDate and returns the approval-flow envelope.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • staffId
    • startDate
    • endDate
    • leaveCategoryId
    • fromSession
    • toSession
    • description
    • customFields
    • isCompOffLeave
    • oldLeaveApplicationId
    • staff
    • approver
    • approvers
    • leaveApplication
    • applicationApprovalFlow
    POST /v1/khata/leave/request HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Content-Type: application/json
    
    {
      "staffId": 55201,
      "startDate": "2026-10-14",
      "endDate": "2026-10-16",
      "leaveCategoryId": 3,
      "fromSession": "FULL_DAY",
      "toSession": "FULL_DAY",
      "description": "Family function",
      "oldLeaveApplicationId": null,
      "customFields": [],
      "isCompOffLeave": false
    }
    {
      "staff": {"id": 55201, "name": "Anita Rao"},
      "approver": {"id": 44102, "name": "Ramesh Patel"},
      "approvers": [{"id": 44102, "name": "Ramesh Patel"}],
      "leaveApplication": {
        "id": 77321,
        "startDate": "2026-10-14",
        "endDate": "2026-10-16",
        "description": "Family function",
        "fromSession": "FULL_DAY",
        "toSession": "FULL_DAY",
        "isCompOffLeave": false,
        "leaveAppliedDate": "2026-10-04",
        "attachments": []
      },
      "applicationApprovalFlow": {"status": "PENDING"}
    }
  • Active salary structure for a staff member

    GET /v1/khata/ctc/active/{staffId} openfinance

    Reads the active CTC card for a staff member: ctc, period, breakup flag, template ids and statutory config.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • id
    • staffId
    • ctc
    • startDate
    • period
    • hasBreakup
    • fbpPlanId
    • templateId
    • statutoryTemplateId
    • active
    • components
    • scheduledRevision
    • statutoryConfig
    GET /v1/khata/ctc/active/55201 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "id": 22011,
      "staffId": 55201,
      "ctc": 360000.0,
      "startDate": "2026-04-01",
      "period": "MONTHLY",
      "hasBreakup": true,
      "fbpPlanId": 0,
      "templateId": 44,
      "statutoryTemplateId": 7,
      "active": true,
      "components": [{
        "name": "Basic",
        "amount": 15000.0
      }],
      "scheduledRevision": null,
      "statutoryConfig": {"pfEnabled": true, "esiEnabled": true}
    }
  • Salary details (earnings, deductions, payments)

    GET /v1/khata/wage-detail openfinance

    Returns the salary-detail envelope: earnings and deductions plus PaymentLog rows with paymentDate and onlineId.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • payments
    • adjustments
    • earnings
    • deductions
    • id
    • amount
    • paymentType
    • category
    • paymentDate
    • description
    • onlineId
    • employerId
    • employeeId
    • reportId
    • canUpdate
    • component
    • entryDate
    GET /v1/khata/wage-detail?staffId=55201 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "payments": [{
        "id": 90112,
        "amount": 14250.0,
        "paymentType": 1,
        "category": "SALARY",
        "paymentDate": "2026-09-30",
        "description": "September salary",
        "onlineId": "pay_Mz8k21",
        "employerId": 9104,
        "employeeId": 55201,
        "reportId": 33001,
        "canUpdate": false
      }],
      "adjustments": {},
      "earnings": [{
        "id": 1,
        "component": "Basic",
        "amount": 15000.0,
        "description": null,
        "reportId": 33001,
        "entryDate": "2026-09-01",
        "canUpdate": false
      }],
      "deductions": [{
        "id": 2,
        "component": "PF",
        "amount": 1800.0,
        "reportId": 33001,
        "entryDate": "2026-09-01",
        "canUpdate": false
      }]
    }
  • Staff loan ledger

    GET /v1/khata/staff-advances openfinance

    Lists staff-loan and repayment records with running totals.loan and totals.repayment.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • records
    • totals
    • id
    • amount
    • type
    • description
    • transactionDate
    • employeeId
    • employerId
    • reportId
    • createdAt
    • updatedAt
    • loan
    • repayment
    GET /v1/khata/staff-advances?employeeId=55201 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "records": [{
        "id": 6104,
        "amount": 5000.0,
        "type": "LOAN",
        "description": "Festival advance",
        "transactionDate": "2026-09-12",
        "employeeId": 55201,
        "employerId": 9104,
        "reportId": 33001,
        "createdAt": "2026-09-12T11:04:00+05:30",
        "updatedAt": "2026-09-12T11:04:00+05:30"
      }],
      "totals": {
        "loan": 5000.0,
        "repayment": 1500.0
      }
    }
  • Overall salary report

    GET /v1/khata/wage-board openfinance

    Returns the overall salary report: per-employee salaryTillDate, paymentsTotal and projectedSalary plus crew totals.

    Auth: Bearer token from the phone-OTP session (KmpUser.token).

    • employees
    • total
    • id
    • name
    • startDate
    • endDate
    • balance
    • salaryType
    • paymentsTotal
    • salaryTillDate
    • projectedSalary
    GET /v1/khata/wage-board HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    Accept: application/json
    {
      "employees": [{
        "id": 55201,
        "name": "Anita Rao",
        "startDate": "2026-04-01",
        "endDate": "2026-09-30",
        "balance": 18450.0,
        "salaryType": "monthlyRegular",
        "paymentsTotal": 85500.0,
        "salaryTillDate": 71250.0,
        "projectedSalary": 85500.0
      }],
      "total": {
        "balance": 512000.0,
        "paymentsTotal": 498000.0,
        "salaryTillDate": 415000.0,
        "projectedSalary": 498000.0
      }
    }

Data categories

  • staff roster
  • attendance punches
  • leave balances
  • salary structures
  • payroll payments
  • staff loans

Where teams use this data

  • MSME wage-run reconciliation

    Payroll ops pull CTC cards, earnings/deductions and PaymentLog rows (paymentDate, onlineId) to match what left the business account against what each companyStaffId was owed.

  • Attendance and overtime audit

    Compliance desks join workedMinutes, fineMinutes, overTimeMinutes and hasOddPunches with the date-board previousDatesApprovalPending flag to catch unapproved marks before wages lock.

  • Leave-liability and encashment

    HR ledgers read totalAccruedLeaves, totalAvailedLeaves and totalEncashableLeaves, then the leave-application startDate/endDate trail, to provision unused leave and process encashment.

  • Staff-advance recovery

    Lending or bookkeeping stacks subtract totals.repayment from totals.loan and attach LoanRecord transactionDate lines to the next salary reportId so advances are recovered on payday.

Frequently asked questions

What is PagarBook:Attendance & Payroll?

It is the Android staff-khata client from Staff Payroll & Attendance Khata App for Indian MSME owners: attendance, leave, CTC salary structures, wage payments and staff loans in one ledger.

Who uses PagarBook?

Shop-floor and small-business owners in India who keep worker attendance and wages themselves, rather than employees on a tenanted greytHR or Darwinbox HRIS.

How do owners sign in?

With a phone OTP, or through Truecaller verify. The session token then authorises staff, attendance and payroll calls for that business.

What worker records does it hold?

A staff roster with companyStaffId, daily punches and workedMinutes, leave balances including encashable days, active CTC cards, salary earnings/deductions/payments, and a staff-loan ledger.

Apps similar to PagarBook:Attendance & Payroll

  • greytHR — Bengaluru-built employee self-service HRIS Indian enterprises issue to staff for punches, leave and payslips.
  • Darwinbox — Cloud HCM suite used by larger Indian employers for the full hire-to-retire employee app.
  • ADP Mobile Solutions — Global payroll-vendor employee app for punches, pay and tax forms at ADP-run companies.
  • Paylocity — US mid-market cloud payroll and HCM mobile app for employees and payroll admins.

Topics

  • PagarBook
  • staff attendance
  • MSME payroll
  • staff khata
  • CTC salary structure
  • leave balance
  • staff loan
  • India payroll app

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote