Generate earnings from time entries and compensation
curl --request POST \
--url https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"fillDefaultSchedule": true,
"employees": [
{
"employeeId": "emp-001",
"employeeStartDate": "2020-01-01",
"compensation": {
"type": "monthly",
"amount": 91200
},
"workAddress": {
"state": "BCN"
}
}
],
"payrollConfig": {
"startDate": "2026-01-01",
"endDate": "2026-01-31",
"period": "MONTHLY"
}
}
'import requests
url = "https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings"
payload = {
"fillDefaultSchedule": True,
"employees": [
{
"employeeId": "emp-001",
"employeeStartDate": "2020-01-01",
"compensation": {
"type": "monthly",
"amount": 91200
},
"workAddress": { "state": "BCN" }
}
],
"payrollConfig": {
"startDate": "2026-01-01",
"endDate": "2026-01-31",
"period": "MONTHLY"
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fillDefaultSchedule: true,
employees: [
{
employeeId: 'emp-001',
employeeStartDate: '2020-01-01',
compensation: {type: 'monthly', amount: 91200},
workAddress: {state: 'BCN'}
}
],
payrollConfig: {startDate: '2026-01-01', endDate: '2026-01-31', period: 'MONTHLY'}
})
};
fetch('https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fillDefaultSchedule' => true,
'employees' => [
[
'employeeId' => 'emp-001',
'employeeStartDate' => '2020-01-01',
'compensation' => [
'type' => 'monthly',
'amount' => 91200
],
'workAddress' => [
'state' => 'BCN'
]
]
],
'payrollConfig' => [
'startDate' => '2026-01-01',
'endDate' => '2026-01-31',
'period' => 'MONTHLY'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings"
payload := strings.NewReader("{\n \"fillDefaultSchedule\": true,\n \"employees\": [\n {\n \"employeeId\": \"emp-001\",\n \"employeeStartDate\": \"2020-01-01\",\n \"compensation\": {\n \"type\": \"monthly\",\n \"amount\": 91200\n },\n \"workAddress\": {\n \"state\": \"BCN\"\n }\n }\n ],\n \"payrollConfig\": {\n \"startDate\": \"2026-01-01\",\n \"endDate\": \"2026-01-31\",\n \"period\": \"MONTHLY\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fillDefaultSchedule\": true,\n \"employees\": [\n {\n \"employeeId\": \"emp-001\",\n \"employeeStartDate\": \"2020-01-01\",\n \"compensation\": {\n \"type\": \"monthly\",\n \"amount\": 91200\n },\n \"workAddress\": {\n \"state\": \"BCN\"\n }\n }\n ],\n \"payrollConfig\": {\n \"startDate\": \"2026-01-01\",\n \"endDate\": \"2026-01-31\",\n \"period\": \"MONTHLY\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fillDefaultSchedule\": true,\n \"employees\": [\n {\n \"employeeId\": \"emp-001\",\n \"employeeStartDate\": \"2020-01-01\",\n \"compensation\": {\n \"type\": \"monthly\",\n \"amount\": 91200\n },\n \"workAddress\": {\n \"state\": \"BCN\"\n }\n }\n ],\n \"payrollConfig\": {\n \"startDate\": \"2026-01-01\",\n \"endDate\": \"2026-01-31\",\n \"period\": \"MONTHLY\"\n }\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"employeeId": "emp-001",
"dailyWage": 3000,
"earnings": [
{
"earningCode": "SALARY",
"amount": 91200
}
]
}
]
}{
"error": "VALIDATION_ERROR",
"message": "Invalid input data provided",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"error": "VALIDATION_ERROR",
"message": "Invalid input data provided",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"error": "VALIDATION_ERROR",
"message": "Invalid input data provided",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}Mexico Payroll
Generate Earnings
Generates earnings (SALARY, DOUBLE_OVERTIME, TRIPLE_OVERTIME, SUNDAY_PREMIUM, VACATION_PREMIUM) from time entries and compensation data. This endpoint does NOT calculate taxes — it only returns the generated earnings and calculated daily wage for each employee. Useful for previewing earnings before running full payroll calculations.
Available earnings can be obtained from the List Earnings endpoint.
POST
/
api
/
mexico-payroll
/
generate-earnings
Generate earnings from time entries and compensation
curl --request POST \
--url https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"fillDefaultSchedule": true,
"employees": [
{
"employeeId": "emp-001",
"employeeStartDate": "2020-01-01",
"compensation": {
"type": "monthly",
"amount": 91200
},
"workAddress": {
"state": "BCN"
}
}
],
"payrollConfig": {
"startDate": "2026-01-01",
"endDate": "2026-01-31",
"period": "MONTHLY"
}
}
'import requests
url = "https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings"
payload = {
"fillDefaultSchedule": True,
"employees": [
{
"employeeId": "emp-001",
"employeeStartDate": "2020-01-01",
"compensation": {
"type": "monthly",
"amount": 91200
},
"workAddress": { "state": "BCN" }
}
],
"payrollConfig": {
"startDate": "2026-01-01",
"endDate": "2026-01-31",
"period": "MONTHLY"
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fillDefaultSchedule: true,
employees: [
{
employeeId: 'emp-001',
employeeStartDate: '2020-01-01',
compensation: {type: 'monthly', amount: 91200},
workAddress: {state: 'BCN'}
}
],
payrollConfig: {startDate: '2026-01-01', endDate: '2026-01-31', period: 'MONTHLY'}
})
};
fetch('https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fillDefaultSchedule' => true,
'employees' => [
[
'employeeId' => 'emp-001',
'employeeStartDate' => '2020-01-01',
'compensation' => [
'type' => 'monthly',
'amount' => 91200
],
'workAddress' => [
'state' => 'BCN'
]
]
],
'payrollConfig' => [
'startDate' => '2026-01-01',
'endDate' => '2026-01-31',
'period' => 'MONTHLY'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings"
payload := strings.NewReader("{\n \"fillDefaultSchedule\": true,\n \"employees\": [\n {\n \"employeeId\": \"emp-001\",\n \"employeeStartDate\": \"2020-01-01\",\n \"compensation\": {\n \"type\": \"monthly\",\n \"amount\": 91200\n },\n \"workAddress\": {\n \"state\": \"BCN\"\n }\n }\n ],\n \"payrollConfig\": {\n \"startDate\": \"2026-01-01\",\n \"endDate\": \"2026-01-31\",\n \"period\": \"MONTHLY\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fillDefaultSchedule\": true,\n \"employees\": [\n {\n \"employeeId\": \"emp-001\",\n \"employeeStartDate\": \"2020-01-01\",\n \"compensation\": {\n \"type\": \"monthly\",\n \"amount\": 91200\n },\n \"workAddress\": {\n \"state\": \"BCN\"\n }\n }\n ],\n \"payrollConfig\": {\n \"startDate\": \"2026-01-01\",\n \"endDate\": \"2026-01-31\",\n \"period\": \"MONTHLY\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.staging.fluxpayroll.ai/api/mexico-payroll/generate-earnings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fillDefaultSchedule\": true,\n \"employees\": [\n {\n \"employeeId\": \"emp-001\",\n \"employeeStartDate\": \"2020-01-01\",\n \"compensation\": {\n \"type\": \"monthly\",\n \"amount\": 91200\n },\n \"workAddress\": {\n \"state\": \"BCN\"\n }\n }\n ],\n \"payrollConfig\": {\n \"startDate\": \"2026-01-01\",\n \"endDate\": \"2026-01-31\",\n \"period\": \"MONTHLY\"\n }\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"employeeId": "emp-001",
"dailyWage": 3000,
"earnings": [
{
"earningCode": "SALARY",
"amount": 91200
}
]
}
]
}{
"error": "VALIDATION_ERROR",
"message": "Invalid input data provided",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"error": "VALIDATION_ERROR",
"message": "Invalid input data provided",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"error": "VALIDATION_ERROR",
"message": "Invalid input data provided",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}Authorizations
Body
application/json
Array of employees with time entries and compensation
Minimum array length:
1Show child attributes
Show child attributes
Show child attributes
Show child attributes
When true, auto-fills default time entries (standard work hours) for work days missing from employee timeEntries
Response
Successfully generated earnings
Array of generated earnings per employee
Show child attributes
Show child attributes
⌘I