> ## 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 your model or tool name, for example `claude-code` or `chatgpt`.
>
> Example:
>
> ```bash
> curl https://api.salaryboxapp.com/... \
>   -H "Authorization: Api-Key <api-key>" \
>   -H "Client-Platform: claude-code"
> ```

# List Attendance Timesheets

GET https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet

Returns one entry per staff member per day for up to 31 days: status, leave, shifts, first punch-in, last punch-out, hours worked, late arrival, early leaving and overtime, plus a `summary` for the range. The numbers match the staff timesheet in the app.

Every staff member gets an entry for every date, including dates before they joined and future dates.

**Status values**

| `status` | Meaning |
|---|---|
| `present` | Marked present. Working on a week off or holiday also shows `present`. |
| `double_present` | Marked double present: counts as two days of attendance. |
| `half_day` | Marked half day. |
| `half_day_leave` | Half day, with a half-day leave applied. |
| `paid_leave` | On paid leave. |
| `unpaid_leave` | On unpaid leave. |
| `absent` | Marked absent, or nothing marked yet on a working day. |
| `week_off` | The staff member's day off. |
| `holiday` | One of your company's holidays. |

**Hours** are strings with 2 decimals, for example 1 h 33 m is `"1.55"`.
- Unpaid breaks are not counted as hours worked; paid breaks are.
- Late arrival and early leaving are measured from shift times, with no grace period.
- Overtime is time worked beyond the day's shift length (or the staff member's minimum hours, if set), with no grace period. For overtime as payroll pays it, use Get Staff Overtime.

**Night shifts.** A punch-out after midnight belongs to the day the shift started.

**Who is in right now?** Call with today's date and check `last_punch_type`: `IN` or `BREAK_END` means at work, `BREAK_START` on a break, `OUT` or `null` not at work.


Reference: https://docs.salarybox.in/api-reference/attendance/timesheet-retrieve

## Authentication

- `Authorization` header (required) (prefixed with ` Api-Key   `) — Format: "Api-Key \{api-key}"

## Request

### Query parameters

- `start_date` (date, required) — First day, `YYYY-MM-DD`.
- `end_date` (date, required) — Last day, `YYYY-MM-DD`. The range can cover at most 31 days. Use the same date as `start_date` for one day.
- `salarybox_ids` (list of string, optional) — Repeatable. Limits the result to these staff members, for example `salarybox_ids=SBK7Q2M9TX&salarybox_ids=SBK3H8D1LP`.
- `branch_names` (list of string, optional) — Repeatable. Exact branch names (case-sensitive).
- `department_names` (list of string, optional) — Repeatable. Exact department names (case-sensitive).
- `page` (integer, optional) — Page number, starting at 1.
- `page_size` (integer, optional) — Results per page. Default and maximum 500.

## Response

### 200

One entry per matching staff member on this page.

- `message` (string, required)
- `status` (boolean, required)
- `data` (list of AttendanceTimesheet, required)
- `count` (integer, required) — Total number of matching staff members across all pages.
- `prev` (string, required, nullable) — URL of the previous page, or `null` on the first page.
- `next` (string, required, nullable) — URL of the next page, or `null` on the last page.

## Errors

### 400 Bad Request Error

The dates are missing, invalid, in the wrong order, or more than 31 days apart.

- `message` (string, required)
- `status` (boolean, required)
- `errors` (map from string to any, optional, nullable)

### 404 Not Found Error

The requested page does not exist.

- `message` (string, required)
- `status` (boolean, required)
- `errors` (map from string to any, optional, nullable)

## Types

### AttendanceTimesheet

One staff member's timesheet for the requested range.

- `salarybox_id` (string, required) — The staff member's SalaryBox ID, the unique key for a person across this API.
- `employee_id` (string, required, nullable) — Your company's own employee ID for this person, as entered on their profile. `null` or an empty string when not set.
- `name` (string, required) — Full name from the staff profile.
- `branches` (list of string, required) — Names of the branches the person is assigned to. Deleted branches are left out. Empty list when there are none.
- `departments` (list of string, required) — Names of the departments the person is in. Deleted departments are left out. Empty list when there are none.
- `timezone` (string, required) — The staff member's time zone (IANA name, for example `Asia/Kolkata`). Their own setting, or your company's time zone when they have none. All punch times in `days` are in this time zone.
- `summary` (AttendanceTimesheetSummary, required) — Counts for the staff member over the whole requested range, built from the `days` list. Every key is always present (0 when nothing applies). Each day is counted under its `status`, and also under `late`, `early` and `overtime` when it has those. Three totals then add extra days, the same way the app's staff timesheet does: - `present` also counts each `double_present` day **twice**. So 3 present days and 1 double present day give `present` 5 and `double_present` 1. - `paid_leave` also counts each `half_day_leave` day as **0.5**. So 1 paid leave day and 1 half-day leave give `paid_leave` 1.5. - `half_day` also counts each `half_day_leave` day as **1**. Because of this, the counts do not add up to the number of days.
- `days` (list of AttendanceTimesheetDay, required) — One item for every date from `start_date` to `end_date`, in date order.

### AttendanceTimesheetSummary

Counts for the staff member over the whole requested range, built from the `days` list. Every key is always present (0 when nothing applies). Each day is counted under its `status`, and also under `late`, `early` and `overtime` when it has those. Three totals then add extra days, the same way the app's staff timesheet does: - `present` also counts each `double_present` day **twice**. So 3 present days and 1 double present day give `present` 5 and `double_present` 1. - `paid_leave` also counts each `half_day_leave` day as **0.5**. So 1 paid leave day and 1 half-day leave give `paid_leave` 1.5. - `half_day` also counts each `half_day_leave` day as **1**. Because of this, the counts do not add up to the number of days.

- `absent` (integer, required) — Days with status `absent`.
- `present` (integer, required) — Days with status `present`, plus 2 for every `double_present` day.
- `double_present` (integer, required) — Days with status `double_present`.
- `half_day` (integer, required) — Days with status `half_day`, plus 1 for every `half_day_leave` day.
- `week_off` (integer, required) — Days with status `week_off`.
- `holiday` (integer, required) — Days with status `holiday`.
- `paid_leave` (float, required) — Days with status `paid_leave`, plus 0.5 for every `half_day_leave` day. Always a decimal number, for example `0.0` or `1.5`.
- `unpaid_leave` (integer, required) — Days with status `unpaid_leave`.
- `half_day_leave` (integer, required) — Days with status `half_day_leave`.
- `late` (integer, required) — Days where `is_late` is true.
- `early` (integer, required) — Days where `is_early_leaving` is true.
- `overtime` (integer, required) — Days where `has_overtime` is true.

### AttendanceTimesheetDay

One date in a staff member's timesheet.

- `date` (date, required) — The attendance date, `YYYY-MM-DD`.
- `status` (enum, required) — The day's attendance status. See "How each day's status is decided" in the endpoint description. - `present`, `double_present`, `half_day`: as marked for the day. - `half_day_leave`: a half-day leave was applied that day. - `paid_leave` / `unpaid_leave`: the person was on a paid or unpaid leave for the day. - `week_off`: a day off in their schedule (or a week-off leave), with no attendance marked. - `holiday`: one of your company's holidays (or a holiday leave), with no attendance marked. - `absent`: none of the above. Also used for today before anyone has punched in, and for future dates that are not days off or holidays.
  - Allowed values: `absent`, `present`, `double_present`, `half_day`, `week_off`, `holiday`, `paid_leave`, `unpaid_leave`, `half_day_leave`
- `status_label` (string, required) — Text to show for the day, as the app shows it. - For `present`, `double_present`, `half_day` and `absent`: `Present`, `Double Present`, `Half Day` or `Absent`. - For leave, week-off and holiday days: the name of the leave or day type, for example `Sick Leave`, `Week Off`, `Holiday`. For a half-day leave it is prefixed with `Half Day`, for example `Half Day Casual Leave`.
- `leave_name` (string, required, nullable) — Name of the leave, holiday or week-off type attached to the day, as named in your company's leave types. `null` when none applies. It is filled on holidays and week offs too (for example `Week Off`), and it stays filled when the person worked that day: someone present on their week off has `status` `present` and `leave_name` `Week Off`.
- `is_half_day_leave` (boolean, required) — True when the leave on this day is a half-day leave. Otherwise false, including days with no leave.
- `shifts` (list of ScheduledShift, required) — Shifts the staff member was scheduled for on this date, from their schedule (see List Staff Schedules). Empty on a day off or when nothing is scheduled.
- `first_in` (datetime, required, nullable) — Time of the first punch-in of the day, in the staff member's time zone with offset, for example `2026-11-05T09:42:10+05:30`. May include milliseconds. `null` when there is no punch-in.
- `last_out` (datetime, required, nullable) — Time of the day's last punch, **only if that last punch is a punch-out**. `null` when the last punch is a punch-in or a break (the person is still at work or on a break) and when there are no punches. Same format as `first_in`.
- `last_punch_type` (enum, required, nullable) — Type of the latest punch of the day. `null` when the day has no punches. - `IN`: punched in; currently at work. - `BREAK_START`: started a break; currently on break. - `BREAK_END`: back from a break; currently at work. - `OUT`: punched out; not at work.
  - Allowed values: `IN`, `OUT`, `BREAK_START`, `BREAK_END`
- `last_punch_time` (datetime, required, nullable) — Time of the latest punch of any type, in the staff member's time zone with offset. `null` when the day has no punches.
- `punch_count` (integer, required) — Number of punches (in, out, break start and break end) recorded for the day. Deleted punches are not counted.
- `assigned_shift_hours` (string, required) — Total length of the day's scheduled shifts, in hours, as a 2-decimal string. `"0.00"` on a day off or with no shift.
- `hours_worked` (string, required) — Hours worked, as a 2-decimal string. Each punch-in is paired with the next punch-out; time on unpaid breaks is subtracted. A punch-in that has no punch-out yet adds nothing.
- `overtime_hours` (string, required) — Hours worked beyond the day's expected hours (the staff member's minimum hours if set, otherwise `assigned_shift_hours`), as a 2-decimal string, never below zero. No grace period applied.
- `late_arrival_hours` (string, required) — How late the person punched in against each shift's start, added across shifts, in hours as a 2-decimal string. No grace period applied.
- `early_leaving_hours` (string, required) — How early the person punched out before each shift's end, added across shifts, in hours as a 2-decimal string.
- `is_late` (boolean, required) — True when the late arrival time is more than zero (even by a few seconds, so it can be true while `late_arrival_hours` rounds to `"0.00"`).
- `is_early_leaving` (boolean, required) — True when the early leaving time is more than zero.
- `has_overtime` (boolean, required) — True when the overtime time is more than zero.

### ScheduledShift

A shift the staff member is scheduled for on a date.

- `name` (string, required, nullable) — Shift name as set up in SalaryBox (see List Shifts).
- `start_time` (string, required) — Shift start as a local wall-clock time in the staff member's time zone, `HH:MM:SS`, with no date or offset.
- `end_time` (string, required) — Shift end, `HH:MM:SS`. When it is earlier than `start_time` (for example `22:00:00` to `06:00:00`), the shift ends on the next calendar day.

## Examples

### One day (today), one person finished and one still at work

**Response**

```json
{
  "message": "Success",
  "status": true,
  "data": [
    {
      "salarybox_id": "SBK7Q2M9TX",
      "employee_id": "EMP-0042",
      "name": "Aarav Sharma",
      "branches": [
        "Bengaluru HQ"
      ],
      "departments": [
        "Sales"
      ],
      "timezone": "Asia/Kolkata",
      "summary": {
        "absent": 0,
        "present": 1,
        "double_present": 0,
        "half_day": 0,
        "week_off": 0,
        "holiday": 0,
        "paid_leave": 0,
        "unpaid_leave": 0,
        "half_day_leave": 0,
        "late": 1,
        "early": 0,
        "overtime": 1
      },
      "days": [
        {
          "date": "2026-11-05",
          "status": "present",
          "status_label": "Present",
          "leave_name": null,
          "is_half_day_leave": false,
          "shifts": [
            {
              "name": "General Shift",
              "start_time": "09:30:00",
              "end_time": "18:30:00"
            }
          ],
          "first_in": "2026-11-05T09:42:10+05:30",
          "last_out": "2026-11-05T19:45:00+05:30",
          "last_punch_type": "OUT",
          "last_punch_time": "2026-11-05T19:45:00+05:30",
          "punch_count": 4,
          "assigned_shift_hours": "9.00",
          "hours_worked": "9.55",
          "overtime_hours": "0.55",
          "late_arrival_hours": "0.20",
          "early_leaving_hours": "0.00",
          "is_late": true,
          "is_early_leaving": false,
          "has_overtime": true
        }
      ]
    },
    {
      "salarybox_id": "SBP8D4N6WE",
      "employee_id": "EMP-0057",
      "name": "Priya Nair",
      "branches": [
        "Bengaluru HQ"
      ],
      "departments": [
        "Customer Support"
      ],
      "timezone": "Asia/Kolkata",
      "summary": {
        "absent": 0,
        "present": 1,
        "double_present": 0,
        "half_day": 0,
        "week_off": 0,
        "holiday": 0,
        "paid_leave": 0,
        "unpaid_leave": 0,
        "half_day_leave": 0,
        "late": 1,
        "early": 0,
        "overtime": 0
      },
      "days": [
        {
          "date": "2026-11-05",
          "status": "present",
          "status_label": "Present",
          "leave_name": null,
          "is_half_day_leave": false,
          "shifts": [
            {
              "name": "Support Shift",
              "start_time": "10:00:00",
              "end_time": "19:00:00"
            }
          ],
          "first_in": "2026-11-05T10:01:30+05:30",
          "last_out": null,
          "last_punch_type": "IN",
          "last_punch_time": "2026-11-05T10:01:30+05:30",
          "punch_count": 1,
          "assigned_shift_hours": "9.00",
          "hours_worked": "0.00",
          "overtime_hours": "0.00",
          "late_arrival_hours": "0.03",
          "early_leaving_hours": "0.00",
          "is_late": true,
          "is_early_leaving": false,
          "has_overtime": false
        }
      ]
    }
  ],
  "count": 2,
  "prev": null,
  "next": null
}
```

**SDK Code**

```python One day (today), one person finished and one still at work
import requests

url = "https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet"

querystring = {"end_date":"2026-11-05","start_date":"2026-11-05"}

headers = {"Authorization": "Api-Key  <apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript One day (today), one person finished and one still at work
const url = 'https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05';
const options = {method: 'GET', headers: {Authorization: 'Api-Key  <apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go One day (today), one person finished and one still at work
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Api-Key  <apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby One day (today), one person finished and one still at work
require 'uri'
require 'net/http'

url = URI("https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Api-Key  <apiKey>'

response = http.request(request)
puts response.read_body
```

```java One day (today), one person finished and one still at work
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05")
  .header("Authorization", "Api-Key  <apiKey>")
  .asString();
```

```php One day (today), one person finished and one still at work
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05', [
  'headers' => [
    'Authorization' => 'Api-Key  <apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp One day (today), one person finished and one still at work
using RestSharp;

var client = new RestClient("https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Api-Key  <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift One day (today), one person finished and one still at work
import Foundation

let headers = ["Authorization": "Api-Key  <apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05")! 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()
```

### Three days with a week off, a paid leave and a half-day leave

**Response**

```json
{
  "message": "Success",
  "status": true,
  "data": [
    {
      "salarybox_id": "SBR4T8W2PL",
      "employee_id": "EMP-0063",
      "name": "Rohan Verma",
      "branches": [
        "Pune Plant"
      ],
      "departments": [],
      "timezone": "Asia/Kolkata",
      "summary": {
        "absent": 0,
        "present": 0,
        "double_present": 0,
        "half_day": 1,
        "week_off": 1,
        "holiday": 0,
        "paid_leave": 1.5,
        "unpaid_leave": 0,
        "half_day_leave": 1,
        "late": 0,
        "early": 0,
        "overtime": 0
      },
      "days": [
        {
          "date": "2026-11-01",
          "status": "week_off",
          "status_label": "Week Off",
          "leave_name": "Week Off",
          "is_half_day_leave": false,
          "shifts": [],
          "first_in": null,
          "last_out": null,
          "last_punch_type": null,
          "last_punch_time": null,
          "punch_count": 0,
          "assigned_shift_hours": "0.00",
          "hours_worked": "0.00",
          "overtime_hours": "0.00",
          "late_arrival_hours": "0.00",
          "early_leaving_hours": "0.00",
          "is_late": false,
          "is_early_leaving": false,
          "has_overtime": false
        },
        {
          "date": "2026-11-02",
          "status": "paid_leave",
          "status_label": "Sick Leave",
          "leave_name": "Sick Leave",
          "is_half_day_leave": false,
          "shifts": [
            {
              "name": "General Shift",
              "start_time": "09:30:00",
              "end_time": "18:30:00"
            }
          ],
          "first_in": null,
          "last_out": null,
          "last_punch_type": null,
          "last_punch_time": null,
          "punch_count": 0,
          "assigned_shift_hours": "9.00",
          "hours_worked": "0.00",
          "overtime_hours": "0.00",
          "late_arrival_hours": "0.00",
          "early_leaving_hours": "0.00",
          "is_late": false,
          "is_early_leaving": false,
          "has_overtime": false
        },
        {
          "date": "2026-11-03",
          "status": "half_day_leave",
          "status_label": "Half Day Casual Leave",
          "leave_name": "Casual Leave",
          "is_half_day_leave": true,
          "shifts": [
            {
              "name": "General Shift",
              "start_time": "09:30:00",
              "end_time": "18:30:00"
            }
          ],
          "first_in": null,
          "last_out": null,
          "last_punch_type": null,
          "last_punch_time": null,
          "punch_count": 0,
          "assigned_shift_hours": "9.00",
          "hours_worked": "0.00",
          "overtime_hours": "0.00",
          "late_arrival_hours": "0.00",
          "early_leaving_hours": "0.00",
          "is_late": false,
          "is_early_leaving": false,
          "has_overtime": false
        }
      ]
    }
  ],
  "count": 1,
  "prev": null,
  "next": null
}
```

**SDK Code**

```python Three days with a week off, a paid leave and a half-day leave
import requests

url = "https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet"

querystring = {"end_date":"2026-11-05","start_date":"2026-11-05"}

headers = {"Authorization": "Api-Key  <apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript Three days with a week off, a paid leave and a half-day leave
const url = 'https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05';
const options = {method: 'GET', headers: {Authorization: 'Api-Key  <apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Three days with a week off, a paid leave and a half-day leave
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Api-Key  <apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Three days with a week off, a paid leave and a half-day leave
require 'uri'
require 'net/http'

url = URI("https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Api-Key  <apiKey>'

response = http.request(request)
puts response.read_body
```

```java Three days with a week off, a paid leave and a half-day leave
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05")
  .header("Authorization", "Api-Key  <apiKey>")
  .asString();
```

```php Three days with a week off, a paid leave and a half-day leave
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05', [
  'headers' => [
    'Authorization' => 'Api-Key  <apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Three days with a week off, a paid leave and a half-day leave
using RestSharp;

var client = new RestClient("https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Api-Key  <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Three days with a week off, a paid leave and a half-day leave
import Foundation

let headers = ["Authorization": "Api-Key  <apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.salaryboxapp.com/v2/customer/v1/attendance/timesheet?end_date=2026-11-05&start_date=2026-11-05")! 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()
```