> ## Client identification > > Requests to this API should include a `Client-Platform` header alongside > `Authorization`, identifying the application, tool, or model making the > request. This is used for integration support and analytics. > > Use a specific model identifier if you know it; otherwise use the name > of the agent or product issuing the request. > > Examples: > > | Client | Value | > |---|---| > | GPT-5.6 Sol | `Client-Platform: gpt-5.6-sol` | > | GPT-5.6 Luna | `Client-Platform: gpt-5.6-luna` | > | GPT-5.6 Pro | `Client-Platform: gpt-5.6-pro` | > | Claude Opus 4.6 | `Client-Platform: claude-opus-4.6` | > | Claude Sonnet 4.6 | `Client-Platform: claude-sonnet-4.6` | > | Gemini 3.1 Pro | `Client-Platform: gemini-3.1-pro` | > | ChatGPT | `Client-Platform: chatgpt` | > | Claude Code | `Client-Platform: claude-code` | > | Codex | `Client-Platform: codex` | > | Other | `Client-Platform: ` | > > Example: > > ```bash > curl https://api.salaryboxapp.com/... \ > -H "Authorization: Api-Key " \ > -H "Client-Platform: claude-code" > ``` # List Punches GET https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry Returns raw punch-in/punch-out entries grouped by date and employee, for a date range up to 60 days. Reference: https://docs.salarybox.in/api-reference/attendance/time-entry-retrieve ## Authentication - `Authorization` header (required) (prefixed with ` Api-Key `) — Format: "Api-Key \{api-key}" ## Request ### Query parameters - `start_date` (string, required) — Start date (YYYY-MM-DD). - `end_date` (string, required) — End date (YYYY-MM-DD). Range cannot exceed 60 days. - `salarybox_ids` (string, optional) — Comma-separated SalaryBox IDs to filter by. - `branch_names` (string, optional) — Comma-separated branch names to filter by. - `department_names` (string, optional) — Comma-separated department names to filter by. - `page` (integer, optional) — Page number to fetch. Defaults to 1. - `page_size` (integer, optional) — Number of results per page (max 500). Defaults to 500. ## Response ### 200 - `data` (list of DailyPunches, required) - `message` (string, required) - `status` (boolean, required) - `count` (integer, required) - `prev` (string, required, nullable) - `next` (string, required, nullable) ## Types ### DailyPunches One entry per date, listing punches grouped by employee. - `date` (date, required) - `employees` (list of EmployeePunches, required) ### EmployeePunches - `salarybox_id` (string, required) - `punches` (list of Punch, required) ### Punch - `type` (string, required) - `time` (string, required) - `timezone` (string, required) - `address` (string, required, nullable) - `branch_name` (string, required, nullable) - `shift_name` (string, required, nullable) - `break_name` (string, required, nullable) ## Examples **Response** ```json { "data": [ { "date": "2026-06-05", "employees": [ { "salarybox_id": "SBXDFJHVMA", "punches": [ { "type": "IN", "time": "2026-06-05T03:30:00Z", "timezone": "Asia/Kolkata", "address": null, "branch_name": null, "shift_name": "Day Shift", "break_name": null }, { "type": "OUT", "time": "2026-06-05T12:30:00Z", "timezone": "Asia/Kolkata", "address": null, "branch_name": null, "shift_name": "Day Shift", "break_name": null } ] } ] }, { "date": "2026-06-17", "employees": [ { "salarybox_id": "SBXDFJHVMA", "punches": [ { "type": "IN", "time": "2026-06-17T03:48:00Z", "timezone": "Asia/Kolkata", "address": null, "branch_name": null, "shift_name": "Day Shift", "break_name": null }, { "type": "OUT", "time": "2026-06-17T12:48:00Z", "timezone": "Asia/Kolkata", "address": null, "branch_name": null, "shift_name": "Day Shift", "break_name": null }, { "type": "IN", "time": "2026-06-17T17:48:00Z", "timezone": "Asia/Kolkata", "address": null, "branch_name": null, "shift_name": "Night Shift", "break_name": null }, { "type": "BREAK_START", "time": "2026-06-17T18:48:00Z", "timezone": "Asia/Kolkata", "address": null, "branch_name": null, "shift_name": null, "break_name": "Lunch" } ] } ] } ], "message": "Success", "status": true, "count": 1, "prev": null, "next": null } ``` **SDK Code** ```python Example import requests url = "https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry" querystring = {"end_date":"end_date","start_date":"start_date"} headers = {"Authorization": "Api-Key "} response = requests.get(url, headers=headers, params=querystring) print(response.json()) ``` ```javascript Example const url = 'https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry?end_date=end_date&start_date=start_date'; const options = {method: 'GET', headers: {Authorization: 'Api-Key '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Example package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry?end_date=end_date&start_date=start_date" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Api-Key ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby Example require 'uri' require 'net/http' url = URI("https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry?end_date=end_date&start_date=start_date") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Api-Key ' response = http.request(request) puts response.read_body ``` ```java Example import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry?end_date=end_date&start_date=start_date") .header("Authorization", "Api-Key ") .asString(); ``` ```php Example request('GET', 'https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry?end_date=end_date&start_date=start_date', [ 'headers' => [ 'Authorization' => 'Api-Key ', ], ]); echo $response->getBody(); ``` ```csharp Example using RestSharp; var client = new RestClient("https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry?end_date=end_date&start_date=start_date"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Api-Key "); IRestResponse response = client.Execute(request); ``` ```swift Example import Foundation let headers = ["Authorization": "Api-Key "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.salaryboxapp.com/v2/customer/v1/attendance/time-entry?end_date=end_date&start_date=start_date")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```