greytHR data API: leave, swipes, payslips
greytHR is Greytip Software's official Android HR client for employees at companies that run their people stack on a greytHR tenant. After the worker types the company web address they sign in with the identity-server login or an OTP (SMS or WhatsApp), then punch attendance with geo, face or an access code, apply leave, regularize missed swipes, see who is in, download payslips and Form 16 / Form 12BB, file an IT declaration, log timesheets and open helpdesk tickets. The developer sits at 29&30, Grape Garden, 17th H Main, 6th Block, Koramangala, Bengaluru, Karnataka 560095, India; the Play listing is rated 4.5 from about 91,000 reviews with 1 million-plus downloads. It is a full-suite employee self-service app rather than a single-function punch clock, sitting next to Darwinbox, Workday, ADP Mobile Solutions, Paylocity and Dayforce as the Bengaluru-built HRIS Indian enterprises issue to staff.
Swipe pairs stamp inSwipe against outSwipe with swipeTime, swipeCaptureType and shiftName. Leave chips list leaveName next to leaveTypeBalance, openingBalance and availed. Who-is-in cards count whoIsIn versus employeesWhoNeedToBeIn. Payslip files key on netPay, grossPay and netPayInWords; the signed-in card is employeeCode with designation, department and joiningDate.
Workforce bots file the same leaveTypeId the Koramangala tenant already shows; timekeeping jobs punch latitude/longitude next to the ERP roster; payroll archives store netPay beside Form 16 — openData Studio turns that ESS loop into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Resolve company web address
POST
/v1/greythr/tenantosintResolves the company web address to companyName and the OAuth issuer used on the next screen.
Auth: Unauthenticated. Body is domainName, the company web address typed on the first screen.
- domainName
- companyName
- issuer
POST /v1/greythr/tenant HTTP/1.1 Content-Type: application/json { "domainName": "acme" }{ "domainName": "acme", "companyName": "Acme Foods", "issuer": "acme-ess" }Sign in for access token
POST
/v1/greythr/sessionosintExchanges the company web address plus identity-server login for accessToken and refreshToken.
Auth: Unauthenticated. Body is domainName plus the identity-server login. Returns accessToken and refreshToken; later calls send Authorization Bearer accessToken.
- domainName
- username
- password
- accessToken
- refreshToken
- employeeId
POST /v1/greythr/session HTTP/1.1 Content-Type: application/json { "domainName": "acme", "username": "anita.rao", "password": "••••" }{ "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9", "refreshToken": "rt-88c1", "employeeId": "44102" }Request login OTP
POST
/v1/greythr/otposintSends a one-time login code on the named tenant via ott (SMS or WhatsApp).
Auth: Unauthenticated. Body is domainName and ott channel (SMS or WhatsApp).
- domainName
- ott
- otp
- status
POST /v1/greythr/otp HTTP/1.1 Content-Type: application/json { "domainName": "acme", "ott": "sms" }{ "status": true, "otp": "sent" }Signed-in employee profile
GET
/v1/greythr/meosintReturns the signed-in employee card: employeeCode, designation, department and joiningDate.
Auth: Bearer accessToken from POST /v1/greythr/session.
- employeeId
- employeeCode
- employeeName
- employeeNo
- designation
- department
- joiningDate
GET /v1/greythr/me HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "employeeId": "44102", "employeeCode": "EMP-1024", "employeeName": "Anita Rao", "employeeNo": "1024", "designation": "Analyst", "department": "Finance", "joiningDate": "2021-04-12" }Leave balances
GET
/v1/greythr/leaveopendataPages leave-type rows with leaveTypeBalance, openingBalance and availed.
Auth: Bearer accessToken from POST /v1/greythr/session.
- employeeId
- items
- leaveTypeId
- leaveName
- leaveTypeBalance
- openingBalance
- availed
GET /v1/greythr/leave?employeeId=44102 HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "items": [{ "leaveTypeId": "CL", "leaveName": "Casual Leave", "leaveTypeBalance": "8.5", "openingBalance": "12", "availed": "3.5" }] }Apply leave
POST
/v1/greythr/leave/applyopendataSubmits a leave request for leaveTypeId between fromDate and toDate with dayType.
Auth: Bearer accessToken from POST /v1/greythr/session.
- leaveTypeId
- employeeId
- fromDate
- toDate
- dayType
- status
- message
POST /v1/greythr/leave/apply HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Content-Type: application/json { "leaveTypeId": "CL", "employeeId": "44102", "fromDate": "2026-10-14", "toDate": "2026-10-16", "dayType": "FULL" }{ "status": true, "message": "submitted" }Attendance day details
GET
/v1/greythr/attendanceopendataReturns the day's swipe pair: inSwipe, outSwipe, totalHours and shiftName.
Auth: Bearer accessToken from POST /v1/greythr/session.
- employeeId
- attendanceDate
- shiftName
- shiftId
- inSwipe
- outSwipe
- totalHours
- swipeTime
GET /v1/greythr/attendance?employeeId=44102&attendanceDate=2026-10-02 HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "attendanceDate": "2026-10-02", "shiftName": "General", "shiftId": "S-1", "inSwipe": "09:12", "outSwipe": "18:40", "totalHours": "09:28", "swipeTime": "09:12" }Mark attendance swipe
POST
/v1/greythr/attendance/punchopendataRecords an in or out swipe with swipeCaptureType (geo, face or accessCode) and lat/lng.
Auth: Bearer accessToken from POST /v1/greythr/session.
- employeeId
- latitude
- longitude
- swipeCaptureType
- accessCode
- swipeTime
- status
POST /v1/greythr/attendance/punch HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Content-Type: application/json { "employeeId": "44102", "latitude": 12.9352, "longitude": 77.6245, "swipeCaptureType": "GEO", "accessCode": "A1" }{ "status": true, "swipeTime": "09:12", "swipeCaptureType": "GEO" }Who is in
GET
/v1/greythr/who-is-inopendataCounts whoIsIn versus employeesWhoNeedToBeIn and lists in-swipe names for the date.
Auth: Bearer accessToken from POST /v1/greythr/session.
- attendanceDate
- whoIsIn
- employeesWhoNeedToBeIn
- items
- employeeId
- employeeName
- inSwipe
GET /v1/greythr/who-is-in?attendanceDate=2026-10-02 HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "whoIsIn": 42, "employeesWhoNeedToBeIn": 50, "items": [{ "employeeId": "44102", "employeeName": "Anita Rao", "inSwipe": "09:12" }] }List payslips
GET
/v1/greythr/payslipsopenfinanceLists published payslip months with netPay and grossPay.
Auth: Bearer accessToken from POST /v1/greythr/session.
- items
- month
- netPay
- grossPay
GET /v1/greythr/payslips HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "items": [{ "month": "2026-09", "netPay": "84250.00", "grossPay": "110000.00" }] }Download a payslip
GET
/v1/greythr/payslips/{month}openfinanceReturns one month's payslip: netPay, grossPay, deductions and netPayInWords.
Auth: Bearer accessToken from POST /v1/greythr/session.
- month
- netPay
- grossPay
- deductions
- netPayInWords
GET /v1/greythr/payslips/2026-09 HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "month": "2026-09", "netPay": "84250.00", "grossPay": "110000.00", "deductions": "25750.00", "netPayInWords": "Eighty four thousand two hundred fifty" }Holiday calendar
GET
/v1/greythr/holidaysopendataReturns the tenant holiday calendar: holidayDate, holidayName and restrictedHoliday.
Auth: Bearer accessToken from POST /v1/greythr/session.
- year
- items
- holidayDate
- holidayName
- restrictedHoliday
GET /v1/greythr/holidays?year=2026 HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "items": [{ "holidayDate": "2026-10-02", "holidayName": "Gandhi Jayanti", "restrictedHoliday": false }] }IT declaration window
GET
/v1/greythr/taxopenfinanceReturns the income-tax declaration window plus form16 and form12BBDownload flags.
Auth: Bearer accessToken from POST /v1/greythr/session.
- declarationId
- declarationStatus
- form16
- form12BBDownload
- itStatement
GET /v1/greythr/tax HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 Accept: application/json{ "declarationId": "FY26-1", "declarationStatus": "open", "form16": true, "form12BBDownload": true, "itStatement": "2026" }
Data categories
- employee profile
- leave balances
- attendance swipes
- who-is-in
- payslips
- holidays
- IT declaration
- auth-sessions
Where teams use this data
Leave-balance overlay for a workforce bot
A helper polls GET /v1/greythr/leave (leaveTypeBalance, openingBalance, availed) then POST /v1/greythr/leave/apply so a manager bot can file Casual Leave without opening the app.
Swipe pairs into an ERP punch log
A timekeeping job reads GET /v1/greythr/attendance (inSwipe, outSwipe, shiftName) and POST /v1/greythr/attendance/punch (latitude, longitude, swipeCaptureType) so each geo swipe lands next to the ERP roster.
Who-is-in board plus holiday calendar
A floor dashboard joins GET /v1/greythr/who-is-in (whoIsIn, employeesWhoNeedToBeIn) with GET /v1/greythr/holidays (holidayDate, restrictedHoliday) so the in-count sits next to the tenant calendar.
Payslip and Form 16 archive
A payroll archive joins GET /v1/greythr/payslips (netPay, grossPay) with GET /v1/greythr/payslips/{month} (netPayInWords, deductions) and GET /v1/greythr/tax (form16, form12BBDownload).
Frequently asked questions
How does greytHR authenticate API calls?
POST /v1/greythr/tenant resolves the company web address to companyName and issuer. POST /v1/greythr/session exchanges that domainName plus the identity-server login for accessToken, refreshToken and employeeId. POST /v1/greythr/otp sends a one-time code first. Later calls send Authorization Bearer accessToken.
Which endpoints expose leave, swipes and who-is-in?
GET /v1/greythr/leave returns leaveTypeBalance, openingBalance and availed. POST /v1/greythr/leave/apply files a request. GET /v1/greythr/attendance returns inSwipe, outSwipe and shiftName. POST /v1/greythr/attendance/punch records a geo or face swipe. GET /v1/greythr/who-is-in returns whoIsIn versus employeesWhoNeedToBeIn.
What employee-profile fields are returned?
GET /v1/greythr/me returns employeeId, employeeCode, employeeName, employeeNo, designation, department and joiningDate.
Does the API cover payslips, holidays and tax?
Yes. GET /v1/greythr/payslips lists netPay and grossPay. GET /v1/greythr/payslips/{month} returns deductions and netPayInWords. GET /v1/greythr/holidays returns holidayDate and restrictedHoliday. GET /v1/greythr/tax returns declarationStatus, form16 and form12BBDownload.
Apps similar to greytHR
- Darwinbox — Darwinbox is the Hyderabad-built HCM employee app (leave, punches, CTC); greytHR is the Bengaluru-built ESS with web-address login, who-is-in and Form 12BB.
- Workday — Workday is a US-built HCM suite (time, absence, payroll); greytHR is the India-built equivalent employees open for swipes, leave and payslips.
- ADP Mobile Solutions — ADP Mobile Solutions is the US payroll-and-time client; greytHR covers the same swipe, leave and payslip loop for greytHR tenants.
- Paylocity — Paylocity is a US mid-market HCM app with punches and pay; greytHR is the Koramangala-run suite Indian enterprises issue to staff.
- Dayforce — Dayforce (Ceridian) is a workforce-management client for pay runs and schedules; greytHR instead centres on tenant swipes, who-is-in and Form 16.
- Keka HR — Keka is another India-built HRMS (leave, attendance, payroll) that overlaps greytHR's Bengaluru-market employee app.
- Zoho People — Zoho People is Zoho's HR module; greytHR is a dedicated ESS tenant with geo swipes, who-is-in and Form 12BB downloads.
Topics
- greythr api
- hris data api
- leaveTypeBalance leave
- greythr attendance swipe
- netPay payslip
- bengaluru hcm api
- greythr employeeCode
- india ess api
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