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

# Fetch Salary Breakdown

GET https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown

Returns the computed salary breakdown per employee for the given month. Requires an active Payroll Pro entitlement.

Rate limited to 1 request per 10 seconds, 3 per 5 minutes, and 10 per hour, on top of the shared 5000/day API key limit — computing this response can be expensive, so budget one call per payroll month.

The month's roster includes employees who left during that month, so their final settlement is returned. Employees who left before the month's attendance cycle began, or who join after it ends, are excluded.

Reference: https://docs.salarybox.in/api-reference/payroll/fetch-salary-breakdown-retrieve

## Authentication

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

## Request

### Query parameters

- `month` (string, required) — Month (YYYY-MM). Always resolves to the full calendar month.
- `salarybox_ids` (list of string, optional) — Repeatable. Filters to specific employees.
- `page` (integer, optional) — Page number to fetch. Defaults to 1.
- `page_size` (integer, optional) — Number of results per page. Defaults to 10. Maximum 10.

## Response

### 200

Payroll for the month is computed; the page is returned.

- `data` (list of EmployeeSalaryBreakdown, required)
- `message` (string, required)
- `status` (boolean, required)
- `count` (integer, required)
- `prev` (string, required, nullable)
- `next` (string, required, nullable)
- `rate_limit` (list of string, optional)

## Types

### EmployeeSalaryBreakdown

- `salarybox_id` (string, required)
- `employee_id` (string, required)
- `name` (string, required)
- `branches` (list of any, required)
- `departments` (list of any, required)
- `period` (SalaryBreakdownPeriod, required)
- `earnings` (SalaryBreakdownEarnings, required)
- `deductions` (SalaryBreakdownDeductions, required)
- `employer_pf` (string, required)
- `employer_esi` (string, required)
- `employer_labour_welfare_fund` (string, required)
- `total_earnings` (string, required)
- `total_deductions` (string, required)
- `gross_salary` (string, required)
- `net_salary` (string, required)

### SalaryBreakdownPeriod

- `from_date` (date, required)
- `to_date` (date, required)

### SalaryBreakdownEarnings

- `basic_salary` (string, required)
- `fixed_allowances` (string, required)
- `allowance` (string, required)
- `bonus` (string, required)
- `overtime` (string, required)
- `workbasis` (string, required)
- `incentive` (string, required)
- `reimbursement` (string, required)

### SalaryBreakdownDeductions

- `employee_pf` (string, required)
- `employee_esi` (string, required)
- `professional_tax` (string, required)
- `labour_welfare_fund` (string, required)
- `admin_edli_deduction` (string, required)
- `fixed_deductions` (string, required)
- `total_tds` (string, required)
- `penalty` (string, required)
- `late_fine` (string, required)
- `early_fine` (string, required)
- `loan_debit` (string, required)

## Examples

**Response**

```json
{
  "data": [
    {
      "salarybox_id": "EMP001",
      "employee_id": "CMP-001",
      "name": "Jane Doe",
      "branches": [
        "HQ"
      ],
      "departments": [
        "Engineering"
      ],
      "period": {
        "from_date": "2026-01-01",
        "to_date": "2026-01-31"
      },
      "earnings": {
        "basic_salary": "25000.00",
        "fixed_allowances": "12500.00",
        "allowance": "0.00",
        "bonus": "0.00",
        "overtime": "0.00",
        "workbasis": "0.00",
        "incentive": "0.00",
        "reimbursement": "0.00"
      },
      "deductions": {
        "employee_pf": "1800.00",
        "employee_esi": "0.00",
        "professional_tax": "200.00",
        "labour_welfare_fund": "0.00",
        "admin_edli_deduction": "0.00",
        "fixed_deductions": "0.00",
        "total_tds": "0.00",
        "penalty": "0.00",
        "late_fine": "0.00",
        "early_fine": "0.00",
        "loan_debit": "0.00"
      },
      "employer_pf": "1800.00",
      "employer_esi": "0.00",
      "employer_labour_welfare_fund": "0.00",
      "total_earnings": "37500.00",
      "total_deductions": "2000.00",
      "gross_salary": "37500.00",
      "net_salary": "35500.00"
    }
  ],
  "message": "Success",
  "status": true,
  "count": 40,
  "prev": null,
  "next": "https://.../fetch-salary-breakdown?page=2",
  "rate_limit": [
    "0/1 requests remaining per 10 seconds",
    "2/3 requests remaining per 5 minutes",
    "9/10 requests remaining per 1 hour"
  ]
}
```

**SDK Code**

```python Example
import requests

url = "https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown"

querystring = {"month":"month"}

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

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

print(response.json())
```

```javascript Example
const url = 'https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown?month=month';
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 Example
package main

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

func main() {

	url := "https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown?month=month"

	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 Example
require 'uri'
require 'net/http'

url = URI("https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown?month=month")

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 Example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown?month=month")
  .header("Authorization", "Api-Key  <apiKey>")
  .asString();
```

```php Example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown?month=month', [
  'headers' => [
    'Authorization' => 'Api-Key  <apiKey>',
  ],
]);

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

```csharp Example
using RestSharp;

var client = new RestClient("https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown?month=month");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Api-Key  <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Example
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.salaryboxapp.com/v2/customer/v1/payroll/fetch-salary-breakdown?month=month")! 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()
```