greytHR icon

greytHR data API: leave, swipes, payslips

Greytip Software · Business 4.5 ★

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

  • greytHR screenshot 1
  • greytHR screenshot 2
  • greytHR screenshot 3
  • greytHR screenshot 4
  • greytHR screenshot 5
  • greytHR screenshot 6
  • greytHR screenshot 7
  • greytHR screenshot 8

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/tenant osint

    Resolves 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/session osint

    Exchanges 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/otp osint

    Sends 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/me osint

    Returns 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/leave opendata

    Pages 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/apply opendata

    Submits 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/attendance opendata

    Returns 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/punch opendata

    Records 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-in opendata

    Counts 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/payslips openfinance

    Lists 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} openfinance

    Returns 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/holidays opendata

    Returns 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/tax openfinance

    Returns 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

Get a quote