Payroll API
v1 Водичи EN Започнете

Payroll API

API референца

Базен URL https://api.payroll.merot.com

Пресметки

Пресметки за еден вработен и во серија (batch), конверзија бруто/нето и пропорционирање.

Пресметајте плата за еден вработен

#

POST /v1/calculations

Задолжително е или grossSalary (пресметка од бруто — вообичаениот случај според Законот за работните односи во МК) или targetNet (пресметка од нето — договореното нето се пресметува наназад до законското бруто што го произведува). Видете Основни поими за плата во МК за тоа кога кој начин се користи.

Параметри

  • X-Company-Id (header)string

    Задолжително кога вашиот клуч има пристап до повеќе од еден работодавач (компанија) — важи за сметководствени бироа и клучеви за софтверски куќи (vendor).

Тело на барањето

  • grossSalarystring | null

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • targetNetstring | null

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • netBasedboolean

    Додатоците на час се пресметуваат од нето часовната стапка наместо од бруто, а законското бруто повторно се изведува (нето-договори).

    Стандардна вредност: false

  • contractorboolean

    Персонален данок на доход по рамна стапка (10%), без придонеси за социјално осигурување и без лично ослободување (договор за дело).

    Стандардна вредност: false

  • workingHoursnumber

    Договорени месечни часови; стандардно е месечниот фонд на работни часови (176).

  • seniorityPercentagenumber | null

    Додаток за минат труд — процент од основната бруто плата.

  • seniorityobject | null

    Алтернатива на `seniorityPercentage` — се пресметува од месеци работен стаж заклучно со одреден датум, по стапка за секоја завршена година.

    Прикажи вгнездени параметриСкриј вгнездени параметри
    • monthsinteger
    • asOfstring
    • ratePerYearnumber

      Стандардна вредност: 0.5

    • periodYearinteger | null
    • periodMonthinteger | null
  • overtimeHoursnumber | null
  • overtimeRatenumber | null

    Вкупен % од основната часовна стапка; стандардно 135 (основа + 35% додаток).

  • nightHoursnumber | null
  • nightHoursRatenumber | null

    Стандардно 135.

  • holidayHoursnumber | null
  • holidayHoursRatenumber | null

    Стандардно 150.

  • sundayHoursnumber | null
  • sundayHoursRatenumber | null

    Стандардно 150.

  • holidayNightHoursnumber | null

    Комбинирани часови со додаток за празник и ноќна работа.

  • holidayNightRatenumber | null

    Стандардно 185.

  • sundayNightHoursnumber | null
  • sundayNightRatenumber | null

    Стандардно 185.

  • sundayHolidayHoursnumber | null
  • sundayHolidayRatenumber | null

    Стандардно 200.

  • sickFundHoursnumber | null

    Боледување на товар на ФЗОМ (фондот за здравствено осигурување) — само часови; фондот директно му исплаќа на вработениот.

  • sickFundRatenumber | null

    Стандардно 70 (% од основната часовна стапка).

  • sickCompanyHoursnumber | null

    Боледување на товар на работодавачот.

  • sickCompanyRatenumber | null

    Стандардно 70.

  • shift1Hoursnumber | null
  • shift1Ratenumber | null

    Стандардно 100.

  • shift2Hoursnumber | null
  • shift2Ratenumber | null

    Стандардно 100.

  • shift3Hoursnumber | null
  • shift3Ratenumber | null

    Стандардно 135.

  • specialHoursnumber | null
  • specialRatenumber | null

    Стандардно 100.

  • unpaidHoursnumber | null
  • absentHoursnumber | null

    Часови надвор од периодот на вработување во делумен месец (неплатени, без надомест) — видете и `period`/`placements`.

  • maternityHoursnumber | null

    Часови на породилно отсуство на товар на ФЗОМ, без трошок за работодавачот.

  • fundHoursnumber | null

    Целосниот месечен фонд на часови, кога `workingHours` е договорена скратена бројка — ја дава пропорцијата за минималната основица за придонеси и за личното ослободување.

  • minBaseModeenum | null

    Кога да се доплатат придонесите до законската минимална основица (50% од просечната плата): само во делумни месеци (стандардно), секогаш, или никогаш.

    proratedalwaysoff
  • periodobject | null

    Алтернатива на `absentHours` — целниот месец; се комбинира со `placements` за Merot да ја пресмета пропорцијата вместо вас.

    Прикажи вгнездени параметриСкриј вгнездени параметри
    • yearinteger
    • monthinteger
  • placementsarray of object | null
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • startDatestring
    • endDatestring | null
  • hoursInformationalboolean

    Ги евидентира часовите со додаток без промена на бруто/нето — договорената плата веќе ги покрива.

    Стандардна вредност: false

  • seniorityInformationalboolean

    Го евидентира процентот за минат труд без да го додава на бруто/нето.

    Стандардна вредност: false

  • bonusAmountstring | null

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • bonusBasisenum

    "net" (стандардно): нетото се зголемува точно за bonusAmount, бруто се пресметува наназад. "gross": bonusAmount се додава на бруто, нетото следи.

    grossnet

    Стандардна вредност: "net"

  • pitExemptboolean

    Стандардна вредност: false

  • noPersonalAllowanceboolean

    Го отфрла личното ослободување (вработениот го користи кај друг, примарен работодавач).

    Стандардна вредност: false

  • personalAllowancestring | null

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • averageSalarystring | null

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • deductionsarray of object | null

    Одбитоци по нетото (осигурување, синдикални членарини, извршување, ...) — го намалуваат само netPaid, никогаш бруто или придонесите.

    Прикажи вгнездени параметриСкриј вгнездени параметри
    • descriptionstringзадолжително
    • amountstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • rateOverridesobject | null

    Напредно — ги заменува одделни законски стапки (видете `GET /v1/rates`) само за оваа пресметка.

  • effectiveDatestring | null

    Стапките на сила на овој датум; стандардно е сега.

Враќа

  • 200

    Резултатот од пресметката.

  • 422

    validation_failed — едно или повеќе полиња не поминаа валидација.

cURL
curl -X POST "https://api.payroll.merot.com/v1/calculations" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "grossSalary": "45000",
    "workingHours": 176,
    "overtimeHours": 8,
    "nightHours": 4
  }'
const response = await fetch("https://api.payroll.merot.com/v1/calculations", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "grossSalary": "45000",
    "workingHours": 176,
    "overtimeHours": 8,
    "nightHours": 4
  }),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/calculations",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={
    "grossSalary": "45000",
    "workingHours": 176,
    "overtimeHours": 8,
    "nightHours": 4
},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/calculations', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'grossSalary' => '45000',
    'workingHours' => 176,
    'overtimeHours' => 8,
    'nightHours' => 4,
],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/calculations");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
  ""grossSalary"": ""45000"",
  ""workingHours"": 176,
  ""overtimeHours"": 8,
  ""nightHours"": 4
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/calculations"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{   \"grossSalary\": \"45000\",   \"workingHours\": 176,   \"overtimeHours\": 8,   \"nightHours\": 4 }"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "salaryGross": "49142",
  "baseGross": "45000",
  "pension": "9779",
  "health": "3686",
  "employmentContrib": "49",
  "additionalHealth": "246",
  "totalContributions": "13760",
  "pensionTopUp": "0",
  "healthTopUp": "0",
  "disabilityTopUp": "0",
  "employmentTopUp": "0",
  "personalAllowance": "10932",
  "taxableIncome": "24450",
  "pit": "2445",
  "salaryNet": "32937",
  "deductionsTotal": "0",
  "netPaid": "32937",
  "workingHours": 176,
  "seniorityPercentage": 0,
  "seniority": "0",
  "bonusAmount": "0",
  "bonusBasis": "net",
  "overtimeHours": 8,
  "overtimePay": "2761",
  "nightHours": 4,
  "nightPay": "1381",
  "holidayHours": 0,
  "holidayPay": "0",
  "sundayHours": 0,
  "sundayPay": "0",
  "sickHours": 0,
  "sickRate": 70,
  "sickPay": "0",
  "sickFundHours": 0,
  "sickFundRate": 70,
  "sickFundPay": "0",
  "sickCompanyHours": 0,
  "sickCompanyRate": 70,
  "sickCompanyPay": "0",
  "shift1Hours": 0,
  "shift1Rate": 100,
  "shift1Pay": "0",
  "shift2Hours": 0,
  "shift2Rate": 100,
  "shift2Pay": "0",
  "shift3Hours": 0,
  "shift3Rate": 135,
  "shift3Pay": "0",
  "specialHours": 0,
  "specialRate": 100,
  "specialPay": "0",
  "unpaidHours": 0,
  "absentHours": 0,
  "maternityHours": 0,
  "holidayNightHours": 0,
  "holidayNightRate": 185,
  "holidayNightPay": "0",
  "sundayNightHours": 0,
  "sundayNightRate": 185,
  "sundayNightPay": "0",
  "sundayHolidayHours": 0,
  "sundayHolidayRate": 200,
  "sundayHolidayPay": "0"
}

Пресметајте плата за до 500 вработени

#

POST /v1/calculations/batch

Параметри

  • X-Company-Id (header)string

    Задолжително кога вашиот клуч има пристап до повеќе од еден работодавач (компанија) — важи за сметководствени бироа и клучеви за софтверски куќи (vendor).

Тело на барањето

  • inputsarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • grossSalarystring | null

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • targetNetstring | null

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • netBasedboolean

      Додатоците на час се пресметуваат од нето часовната стапка наместо од бруто, а законското бруто повторно се изведува (нето-договори).

      Стандардна вредност: false

    • contractorboolean

      Персонален данок на доход по рамна стапка (10%), без придонеси за социјално осигурување и без лично ослободување (договор за дело).

      Стандардна вредност: false

    • workingHoursnumber

      Договорени месечни часови; стандардно е месечниот фонд на работни часови (176).

    • seniorityPercentagenumber | null

      Додаток за минат труд — процент од основната бруто плата.

    • seniorityobject | null

      Алтернатива на `seniorityPercentage` — се пресметува од месеци работен стаж заклучно со одреден датум, по стапка за секоја завршена година.

      Прикажи вгнездени параметриСкриј вгнездени параметри
      • monthsinteger
      • asOfstring
      • ratePerYearnumber

        Стандардна вредност: 0.5

      • periodYearinteger | null
      • periodMonthinteger | null
    • overtimeHoursnumber | null
    • overtimeRatenumber | null

      Вкупен % од основната часовна стапка; стандардно 135 (основа + 35% додаток).

    • nightHoursnumber | null
    • nightHoursRatenumber | null

      Стандардно 135.

    • holidayHoursnumber | null
    • holidayHoursRatenumber | null

      Стандардно 150.

    • sundayHoursnumber | null
    • sundayHoursRatenumber | null

      Стандардно 150.

    • holidayNightHoursnumber | null

      Комбинирани часови со додаток за празник и ноќна работа.

    • holidayNightRatenumber | null

      Стандардно 185.

    • sundayNightHoursnumber | null
    • sundayNightRatenumber | null

      Стандардно 185.

    • sundayHolidayHoursnumber | null
    • sundayHolidayRatenumber | null

      Стандардно 200.

    • sickFundHoursnumber | null

      Боледување на товар на ФЗОМ (фондот за здравствено осигурување) — само часови; фондот директно му исплаќа на вработениот.

    • sickFundRatenumber | null

      Стандардно 70 (% од основната часовна стапка).

    • sickCompanyHoursnumber | null

      Боледување на товар на работодавачот.

    • sickCompanyRatenumber | null

      Стандардно 70.

    • shift1Hoursnumber | null
    • shift1Ratenumber | null

      Стандардно 100.

    • shift2Hoursnumber | null
    • shift2Ratenumber | null

      Стандардно 100.

    • shift3Hoursnumber | null
    • shift3Ratenumber | null

      Стандардно 135.

    • specialHoursnumber | null
    • specialRatenumber | null

      Стандардно 100.

    • unpaidHoursnumber | null
    • absentHoursnumber | null

      Часови надвор од периодот на вработување во делумен месец (неплатени, без надомест) — видете и `period`/`placements`.

    • maternityHoursnumber | null

      Часови на породилно отсуство на товар на ФЗОМ, без трошок за работодавачот.

    • fundHoursnumber | null

      Целосниот месечен фонд на часови, кога `workingHours` е договорена скратена бројка — ја дава пропорцијата за минималната основица за придонеси и за личното ослободување.

    • minBaseModeenum | null

      Кога да се доплатат придонесите до законската минимална основица (50% од просечната плата): само во делумни месеци (стандардно), секогаш, или никогаш.

      proratedalwaysoff
    • periodobject | null

      Алтернатива на `absentHours` — целниот месец; се комбинира со `placements` за Merot да ја пресмета пропорцијата вместо вас.

      Прикажи вгнездени параметриСкриј вгнездени параметри
      • yearinteger
      • monthinteger
    • placementsarray of object | null
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • startDatestring
      • endDatestring | null
    • hoursInformationalboolean

      Ги евидентира часовите со додаток без промена на бруто/нето — договорената плата веќе ги покрива.

      Стандардна вредност: false

    • seniorityInformationalboolean

      Го евидентира процентот за минат труд без да го додава на бруто/нето.

      Стандардна вредност: false

    • bonusAmountstring | null

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • bonusBasisenum

      "net" (стандардно): нетото се зголемува точно за bonusAmount, бруто се пресметува наназад. "gross": bonusAmount се додава на бруто, нетото следи.

      grossnet

      Стандардна вредност: "net"

    • pitExemptboolean

      Стандардна вредност: false

    • noPersonalAllowanceboolean

      Го отфрла личното ослободување (вработениот го користи кај друг, примарен работодавач).

      Стандардна вредност: false

    • personalAllowancestring | null

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • averageSalarystring | null

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • deductionsarray of object | null

      Одбитоци по нетото (осигурување, синдикални членарини, извршување, ...) — го намалуваат само netPaid, никогаш бруто или придонесите.

      Прикажи вгнездени параметриСкриј вгнездени параметри
      • descriptionstringзадолжително
      • amountstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • rateOverridesobject | null

      Напредно — ги заменува одделни законски стапки (видете `GET /v1/rates`) само за оваа пресметка.

    • effectiveDatestring | null

      Стапките на сила на овој датум; стандардно е сега.

Враќа

  • 200

    Резултат за секој внес, по истиот редослед.

  • 422

    validation_failed — едно или повеќе полиња не поминаа валидација.

cURL
curl -X POST "https://api.payroll.merot.com/v1/calculations/batch" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/calculations/batch", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/calculations/batch",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/calculations/batch', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/calculations/batch");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/calculations/batch"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

Конвертирајте помеѓу договорено нето и законско бруто

#

POST /v1/calculations/convert

Основната конверзија на плата, без додатоци на час, минат труд или бонус — истата инверзија што targetNet ја користи внатрешно во POST /v1/calculations, изложена самостојно за екрани за внес на плата. Дадете gross или net.

Тело на барањето

  • grossstring

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • netstring

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

  • contractorboolean

    Стандардна вредност: false

  • rateOverridesobject

    Advanced — override individual statutory rate keys (see `GET /v1/rates`) for this calculation only.

  • effectiveDatestring

    Rates in force on this date; defaults to now.

Враќа

  • 200

    Двете вредности, точни до денар.

cURL
curl -X POST "https://api.payroll.merot.com/v1/calculations/convert" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "net": "35000.00"
  }'
const response = await fetch("https://api.payroll.merot.com/v1/calculations/convert", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "net": "35000.00"
  }),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/calculations/convert",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={
    "net": "35000.00"
},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/calculations/convert', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'net' => '35000.00',
],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/calculations/convert");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
  ""net"": ""35000.00""
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/calculations/convert"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{   \"net\": \"35000.00\" }"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "gross": "52324.00",
  "net": "35000.00"
}

Пропорционирајте периоди на вработување во календарски месец

#

POST /v1/calculations/prorate

За еден или повеќе периоди на вработување (placements) и целен месец, враќа денови на осигурување, платени/отсутни часови и ден во месецот на вработување/напуштање — сè што му треба на делумен-месечен МПИН запис (МПИН полиња 3.5, 3.6, 3.27, 3.28) — без каква било парична пресметка. POST /v1/calculations може ова да го направи во еден чекор преку сопствените полиња period/placements; користете го овој endpoint кога ви требаат само денови/часови.

Тело на барањето

  • yearintegerзадолжително
  • monthintegerзадолжително
  • fundHoursnumberзадолжително

    The month's full fund of hours (e.g. 176).

  • placementsarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • startDatestringзадолжително
    • endDatestring | null

Враќа

  • 200

    Резултат од пропорционирањето.

cURL
curl -X POST "https://api.payroll.merot.com/v1/calculations/prorate" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "year": 2026,
    "month": 9,
    "fundHours": 176,
    "placements": [
      {
        "startDate": "2026-09-19",
        "endDate": null
      }
    ]
  }'
const response = await fetch("https://api.payroll.merot.com/v1/calculations/prorate", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "year": 2026,
    "month": 9,
    "fundHours": 176,
    "placements": [
      {
        "startDate": "2026-09-19",
        "endDate": null
      }
    ]
  }),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/calculations/prorate",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={
    "year": 2026,
    "month": 9,
    "fundHours": 176,
    "placements": [
        {
            "startDate": "2026-09-19",
            "endDate": None
        }
    ]
},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/calculations/prorate', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'year' => 2026,
    'month' => 9,
    'fundHours' => 176,
    'placements' => [
        [
            'startDate' => '2026-09-19',
            'endDate' => null,
        ],
    ],
],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/calculations/prorate");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
  ""year"": 2026,
  ""month"": 9,
  ""fundHours"": 176,
  ""placements"": [
    {
      ""startDate"": ""2026-09-19"",
      ""endDate"": null
    }
  ]
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/calculations/prorate"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{   \"year\": 2026,   \"month\": 9,   \"fundHours\": 176,   \"placements\": [     {       \"startDate\": \"2026-09-19\",       \"endDate\": null     }   ] }"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

Стапки

Тековни и историски законски стапки за придонеси и данок.

Тековни законски стапки за МК

#

GET /v1/rates

Враќа

  • 200

    Сетот стапки на сила денес.

cURL
curl -X GET "https://api.payroll.merot.com/v1/rates" \
  -H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch("https://api.payroll.merot.com/v1/rates", {
  method: "GET",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
  },
});

const data = await response.json();
console.log(data);
import requests

response = requests.get(
    "https://api.payroll.merot.com/v1/rates",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    },
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.payroll.merot.com/v1/rates', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
    ],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.payroll.merot.com/v1/rates");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");


using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/rates"))
    .headers("Authorization", "Bearer YOUR_API_KEY")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "pension_rate": "0.199",
  "health_rate": "0.075",
  "disability_rate": "0.005",
  "employment_rate": "0.001",
  "pit_rate": "0.1",
  "personal_allowance": "10932",
  "average_salary": "69141",
  "max_contribution_multiplier": "16",
  "min_contribution_base_ratio": "0.5",
  "default_working_hours": "176",
  "overtime_rate": "135",
  "night_hours_rate": "135",
  "holiday_hours_rate": "150",
  "sunday_hours_rate": "150"
}

Историја на промени на стапки

#

GET /v1/rates/history

Секоја верзија на секоја стапка, по датум на важност, најновата прва.

Враќа

  • 200

    Историја на стапки, групирана по клуч.

cURL
curl -X GET "https://api.payroll.merot.com/v1/rates/history" \
  -H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch("https://api.payroll.merot.com/v1/rates/history", {
  method: "GET",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
  },
});

const data = await response.json();
console.log(data);
import requests

response = requests.get(
    "https://api.payroll.merot.com/v1/rates/history",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    },
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.payroll.merot.com/v1/rates/history', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
    ],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.payroll.merot.com/v1/rates/history");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");


using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/rates/history"))
    .headers("Authorization", "Bearer YOUR_API_KEY")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "history": {
    "pension_rate": [
      {
        "rateValue": "0.199",
        "effectiveFrom": "2026-07-01",
        "effectiveTo": null,
        "description": "Сл. весник 148/2026 — ПИО 18.8% → 19.9%"
      },
      {
        "rateValue": "0.188",
        "effectiveFrom": "2020-01-01",
        "effectiveTo": "2026-06-30",
        "description": null
      }
    ]
  }
}

Годишен одмор

Акумулација на годишен одмор, пренос на крајот на годината и исплата при престанок.

Заработени и остварени денови годишен одмор

#

POST /v1/leave/accrual

МК ЗРО (Закон за работните односи), чл. 139–140.

Тело на барањето

  • hireDatestringзадолжително
  • asOfDatestringзадолжително
  • employmentTypeenum
    full_timecontractor

    Стандардна вредност: "full_time"

  • partTimePercentnumber

    Стандардна вредност: 100

  • careerSeniorityYearsnumber

    Стандардна вредност: 0

  • under18boolean

    Стандардна вредност: false

  • effectiveDatestring | null

Враќа

  • 200

    Резултат за акумулација на одмор.

cURL
curl -X POST "https://api.payroll.merot.com/v1/leave/accrual" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hireDate": "2024-03-01",
    "asOfDate": "2026-09-26",
    "employmentType": "full_time",
    "partTimePercent": 100,
    "careerSeniorityYears": 6,
    "under18": false
  }'
const response = await fetch("https://api.payroll.merot.com/v1/leave/accrual", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "hireDate": "2024-03-01",
    "asOfDate": "2026-09-26",
    "employmentType": "full_time",
    "partTimePercent": 100,
    "careerSeniorityYears": 6,
    "under18": false
  }),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/leave/accrual",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={
    "hireDate": "2024-03-01",
    "asOfDate": "2026-09-26",
    "employmentType": "full_time",
    "partTimePercent": 100,
    "careerSeniorityYears": 6,
    "under18": False
},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/leave/accrual', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'hireDate' => '2024-03-01',
    'asOfDate' => '2026-09-26',
    'employmentType' => 'full_time',
    'partTimePercent' => 100,
    'careerSeniorityYears' => 6,
    'under18' => false,
],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/leave/accrual");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
  ""hireDate"": ""2024-03-01"",
  ""asOfDate"": ""2026-09-26"",
  ""employmentType"": ""full_time"",
  ""partTimePercent"": 100,
  ""careerSeniorityYears"": 6,
  ""under18"": false
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/leave/accrual"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{   \"hireDate\": \"2024-03-01\",   \"asOfDate\": \"2026-09-26\",   \"employmentType\": \"full_time\",   \"partTimePercent\": 100,   \"careerSeniorityYears\": 6,   \"under18\": false }"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "entitledDays": 22,
  "accruedDays": 22,
  "vested": true,
  "seniorityBonusDays": 2,
  "nextAccrualDate": "2026-10-01",
  "notes": [],
  "effectiveDate": "2026-09-26T00:00:00.000Z"
}

Пренос и губење денови на крајот на годината

#

POST /v1/leave/carry-over

Тело на барањето

  • yearintegerзадолжително
  • balanceRemainingAtYearEndnumberзадолжително
  • employerPreventedboolean

    True lifts the carry-over cap (the employer, not the employee, prevented the leave from being used).

    Стандардна вредност: false

  • effectiveDatestring

Враќа

  • 200

    Резултат за пренос на одмор.

cURL
curl -X POST "https://api.payroll.merot.com/v1/leave/carry-over" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "year": 2026,
    "balanceRemainingAtYearEnd": 8,
    "employerPrevented": false
  }'
const response = await fetch("https://api.payroll.merot.com/v1/leave/carry-over", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "year": 2026,
    "balanceRemainingAtYearEnd": 8,
    "employerPrevented": false
  }),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/leave/carry-over",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={
    "year": 2026,
    "balanceRemainingAtYearEnd": 8,
    "employerPrevented": False
},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/leave/carry-over', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'year' => 2026,
    'balanceRemainingAtYearEnd' => 8,
    'employerPrevented' => false,
],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/leave/carry-over");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
  ""year"": 2026,
  ""balanceRemainingAtYearEnd"": 8,
  ""employerPrevented"": false
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/leave/carry-over"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{   \"year\": 2026,   \"balanceRemainingAtYearEnd\": 8,   \"employerPrevented\": false }"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "carriedInDays": 8,
  "forfeitedDays": 0,
  "deadline": "2027-06-30",
  "effectiveDate": "2026-09-26T00:00:00.000Z"
}

Исплата на неискористен годишен одмор при престанок

#

POST /v1/leave/termination-cash-out

МК ЗРО, чл. 145 — неискористени денови × просечна дневна бруто плата во претходните 12 месеци.

Тело на барањето

  • remainingDaysnumberзадолжително
  • last12MonthsGrossarray of stringзадолжително
  • terminationDatestringзадолжително
  • currencystringзадолжително
  • effectiveDatestring

Враќа

  • 200

    Износ на исплатата и ставка.

cURL
curl -X POST "https://api.payroll.merot.com/v1/leave/termination-cash-out" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/leave/termination-cash-out", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/leave/termination-cash-out",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/leave/termination-cash-out', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/leave/termination-cash-out");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/leave/termination-cash-out"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

Датотеки

Генерирање датотеки МПИН, е-ППД и ПДД-ГИ за прикачување до УЈП.

Генерирајте МПИН XML датотека

#

POST /v1/files/mpin/xml

МПИН е месечната пријава на УЈП за плата, придонеси и данок. Ова враќа XML датотека за едно правно лице и период, изградена од серијата (batch) и записите по вработен што ги давате. Стандардно, датотеката се проверува со истите УЈП-правила што ги користи POST /v1/files/mpin/validate; блокирачките проблеми го одбиваат барањето со 422 — проследете force: true за сепак да генерирате.

Тело на барањето

  • companyobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • taxIdstring | null
    • registrationNumberstring | null
    • namestringзадолжително
    • nameCyrstring | null
    • addressstring | null
    • addressStreetstring | null
    • addressNumberstring | null
    • addressAreastring | null
    • postalCodestring | null
    • faxstring | null
    • citystring | null
    • municipalityCodestring | null
    • managerNamestring | null
    • phonestring | null
    • emailstring | null
    • areaCodestring | null

      МПИН 2.3 — се изведува од `city` кога недостасува.

    • fzomBranchstring | null

      МПИН 3.4б — филијала на ФЗО (фондот за здравствено осигурување) за седиштето; се изведува од `city` кога недостасува.

  • batchobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • periodMonthintegerзадолжително
    • periodYearintegerзадолжително
    • workingHoursnumber

      Месечниот фонд на часови; се презема 176 за секој запис што нема сопствена вредност.

      Стандардна вредност: 176

    • vidObvrskastring | null

      МПИН 1.3 — вид на обврска. Стандардно 101 (редовна). 103 = исправка.

    • vidObvrznikstring | null

      МПИН 1.4 — вид на обврзник. Стандардно 110 (правно лице).

    • filingVariantenum | null

      Напредно, ретко потребно: `no_payment_declared` (внатрешно 555) ја поднесува истата пресметка со полето за исплатено нето пријавено како 0.00 — се користи кога придонесите мора да се пријават пред самата плата да биде исплатена. `vid_700` го репродуцира поднесувањето со вид на обврска 700 што УЈП го прифати за една исплата на плата во 08/2026; неговото точно значење надвор од ова не е документирано од УЈП и се нуди „како што е".

      regularno_payment_declaredvid_700
  • recordsarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • salaryGrossstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • salaryNetstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pensionstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • additionalHealthstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentContribstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pitstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • personalAllowancestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • overtimeHoursnumber

      Стандардна вредност: 0

    • overtimePaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • nightHoursnumber

      Стандардна вредност: 0

    • nightPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • holidayHoursnumber

      Стандардна вредност: 0

    • holidayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sundayHoursnumber

      Стандардна вредност: 0

    • sundayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • workingHoursnumber | null

      Стандардно се презема `workingHours` од серијата (batch).

    • sickFundHoursnumber | null
    • sickFundRatenumber | null
    • sickFundPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sickCompanyHoursnumber | null
    • sickCompanyRatenumber | null
    • sickCompanyPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • unpaidHoursnumber | null
    • absentHoursnumber | null

      МПИН 3.5 — часови надвор од пласманот во делумен месец.

    • serviceDaysnumber | null
    • pensionTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • disabilityTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • hireDayinteger | null

      МПИН 3.27 — ден во месецот на вработување, ако е во периодот.

    • leaveDayinteger | null

      МПИН 3.28 — ден во месецот на напуштање, ако е во периодот.

    • contractNointeger | null

      МПИН 3.30 — 2 или повеќе за повторно вработување во истиот месец.

    • insuranceCodestring | null

      МПИН 3.17 — вид на стаж.

    • sickFundCodestring | null
    • sickFundBasestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • maternityHoursnumber | null

      МПИН 3.24 — часови на породилно отсуство на товар на ФЗОМ (поле 3.23 = 128).

    • maternityBasestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • maternityPartialHoursnumber | null

      Одработени часови по предвремено враќање од породилно отсуство (поле 3.23 = 129).

    • clientTaxIdstring | null
    • netPaidstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employeeobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • embgstring | null

        ЕМБГ на вработениот.

      • firstNamestringзадолжително
      • lastNamestringзадолжително
      • firstNameCyrstring | null
      • lastNameCyrstring | null
      • bankAccountstring | null
      • municipalityCodestring | null
      • fzomBranchstring | null
  • forceboolean

    Генерирај дури и ако валидацијата најде блокирачки проблеми.

    Стандардна вредност: false

Враќа

  • 200

    МПИН XML датотеката.

  • 422

    mpin_validation_failed — блокирачки проблеми; одговорот ги наведува (или проследете force: true).

cURL
curl -X POST "https://api.payroll.merot.com/v1/files/mpin/xml" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/mpin/xml", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/mpin/xml",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/mpin/xml', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/mpin/xml");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/mpin/xml"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор

application/xml — бинарен одговор (датотека), нема JSON тело за преглед.

Генерирајте МПИН TXT датотека

#

POST /v1/files/mpin/txt

Постариот формат со фиксна ширина (TXT), прифатен и од сопствениот софтвер на УЈП, кодиран точно како што бара УЈП: UTF-16LE со ознака за редослед на бајти (BOM) и CRLF крајови на редови.

Тело на барањето

  • companyobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • taxIdstring | null
    • registrationNumberstring | null
    • namestringзадолжително
    • nameCyrstring | null
    • addressstring | null
    • addressStreetstring | null
    • addressNumberstring | null
    • addressAreastring | null
    • postalCodestring | null
    • faxstring | null
    • citystring | null
    • municipalityCodestring | null
    • managerNamestring | null
    • phonestring | null
    • emailstring | null
    • areaCodestring | null

      МПИН 2.3 — се изведува од `city` кога недостасува.

    • fzomBranchstring | null

      МПИН 3.4б — филијала на ФЗО (фондот за здравствено осигурување) за седиштето; се изведува од `city` кога недостасува.

  • batchobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • periodMonthintegerзадолжително
    • periodYearintegerзадолжително
    • workingHoursnumber

      Месечниот фонд на часови; се презема 176 за секој запис што нема сопствена вредност.

      Стандардна вредност: 176

    • vidObvrskastring | null

      МПИН 1.3 — вид на обврска. Стандардно 101 (редовна). 103 = исправка.

    • vidObvrznikstring | null

      МПИН 1.4 — вид на обврзник. Стандардно 110 (правно лице).

    • filingVariantenum | null

      Напредно, ретко потребно: `no_payment_declared` (внатрешно 555) ја поднесува истата пресметка со полето за исплатено нето пријавено како 0.00 — се користи кога придонесите мора да се пријават пред самата плата да биде исплатена. `vid_700` го репродуцира поднесувањето со вид на обврска 700 што УЈП го прифати за една исплата на плата во 08/2026; неговото точно значење надвор од ова не е документирано од УЈП и се нуди „како што е".

      regularno_payment_declaredvid_700
  • recordsarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • salaryGrossstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • salaryNetstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pensionstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • additionalHealthstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentContribstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pitstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • personalAllowancestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • overtimeHoursnumber

      Стандардна вредност: 0

    • overtimePaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • nightHoursnumber

      Стандардна вредност: 0

    • nightPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • holidayHoursnumber

      Стандардна вредност: 0

    • holidayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sundayHoursnumber

      Стандардна вредност: 0

    • sundayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • workingHoursnumber | null

      Стандардно се презема `workingHours` од серијата (batch).

    • sickFundHoursnumber | null
    • sickFundRatenumber | null
    • sickFundPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sickCompanyHoursnumber | null
    • sickCompanyRatenumber | null
    • sickCompanyPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • unpaidHoursnumber | null
    • absentHoursnumber | null

      МПИН 3.5 — часови надвор од пласманот во делумен месец.

    • serviceDaysnumber | null
    • pensionTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • disabilityTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • hireDayinteger | null

      МПИН 3.27 — ден во месецот на вработување, ако е во периодот.

    • leaveDayinteger | null

      МПИН 3.28 — ден во месецот на напуштање, ако е во периодот.

    • contractNointeger | null

      МПИН 3.30 — 2 или повеќе за повторно вработување во истиот месец.

    • insuranceCodestring | null

      МПИН 3.17 — вид на стаж.

    • sickFundCodestring | null
    • sickFundBasestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • maternityHoursnumber | null

      МПИН 3.24 — часови на породилно отсуство на товар на ФЗОМ (поле 3.23 = 128).

    • maternityBasestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • maternityPartialHoursnumber | null

      Одработени часови по предвремено враќање од породилно отсуство (поле 3.23 = 129).

    • clientTaxIdstring | null
    • netPaidstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employeeobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • embgstring | null

        ЕМБГ на вработениот.

      • firstNamestringзадолжително
      • lastNamestringзадолжително
      • firstNameCyrstring | null
      • lastNameCyrstring | null
      • bankAccountstring | null
      • municipalityCodestring | null
      • fzomBranchstring | null
  • forceboolean

    Генерирај дури и ако валидацијата најде блокирачки проблеми.

    Стандардна вредност: false

Враќа

  • 200

    МПИН TXT датотеката (text/plain; charset=utf-16le).

  • 422

    mpin_validation_failed

cURL
curl -X POST "https://api.payroll.merot.com/v1/files/mpin/txt" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/mpin/txt", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/mpin/txt",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/mpin/txt', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/mpin/txt");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/mpin/txt"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор

text/plain — бинарен одговор (датотека), нема JSON тело за преглед.

Генерирајте една комбинирана МПИН TXT за повеќе серии

#

POST /v1/files/mpin/txt/combined

Едно поднесување за повеќе серии (batch) на исто правно лице и период (на пр. редовна плата плус исправка), записите подредени по кирилско презиме, како што бара УЈП.

Тело на барањето

  • companyobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • taxIdstring | null
    • registrationNumberstring | null
    • namestringзадолжително
    • nameCyrstring | null
    • addressstring | null
    • addressStreetstring | null
    • addressNumberstring | null
    • addressAreastring | null
    • postalCodestring | null
    • faxstring | null
    • citystring | null
    • municipalityCodestring | null
    • managerNamestring | null
    • phonestring | null
    • emailstring | null
    • areaCodestring | null

      МПИН 2.3 — се изведува од `city` кога недостасува.

    • fzomBranchstring | null

      МПИН 3.4б — филијала на ФЗО (фондот за здравствено осигурување) за седиштето; се изведува од `city` кога недостасува.

  • batchobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • periodMonthintegerзадолжително
    • periodYearintegerзадолжително
    • workingHoursnumber

      Месечниот фонд на часови; се презема 176 за секој запис што нема сопствена вредност.

      Стандардна вредност: 176

    • vidObvrskastring | null

      МПИН 1.3 — вид на обврска. Стандардно 101 (редовна). 103 = исправка.

    • vidObvrznikstring | null

      МПИН 1.4 — вид на обврзник. Стандардно 110 (правно лице).

    • filingVariantenum | null

      Напредно, ретко потребно: `no_payment_declared` (внатрешно 555) ја поднесува истата пресметка со полето за исплатено нето пријавено како 0.00 — се користи кога придонесите мора да се пријават пред самата плата да биде исплатена. `vid_700` го репродуцира поднесувањето со вид на обврска 700 што УЈП го прифати за една исплата на плата во 08/2026; неговото точно значење надвор од ова не е документирано од УЈП и се нуди „како што е".

      regularno_payment_declaredvid_700
  • batchesarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • recordsarray of object
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • salaryGrossstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • salaryNetstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • pensionstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • healthstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • additionalHealthstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • employmentContribstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • pitstringзадолжително

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • personalAllowancestring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • overtimeHoursnumber

        Стандардна вредност: 0

      • overtimePaystring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • nightHoursnumber

        Стандардна вредност: 0

      • nightPaystring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • holidayHoursnumber

        Стандардна вредност: 0

      • holidayPaystring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • sundayHoursnumber

        Стандардна вредност: 0

      • sundayPaystring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • workingHoursnumber | null

        Стандардно се презема `workingHours` од серијата (batch).

      • sickFundHoursnumber | null
      • sickFundRatenumber | null
      • sickFundPaystring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • sickCompanyHoursnumber | null
      • sickCompanyRatenumber | null
      • sickCompanyPaystring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • unpaidHoursnumber | null
      • absentHoursnumber | null

        МПИН 3.5 — часови надвор од пласманот во делумен месец.

      • serviceDaysnumber | null
      • pensionTopUpstring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • healthTopUpstring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • disabilityTopUpstring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • employmentTopUpstring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • hireDayinteger | null

        МПИН 3.27 — ден во месецот на вработување, ако е во периодот.

      • leaveDayinteger | null

        МПИН 3.28 — ден во месецот на напуштање, ако е во периодот.

      • contractNointeger | null

        МПИН 3.30 — 2 или повеќе за повторно вработување во истиот месец.

      • insuranceCodestring | null

        МПИН 3.17 — вид на стаж.

      • sickFundCodestring | null
      • sickFundBasestring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • maternityHoursnumber | null

        МПИН 3.24 — часови на породилно отсуство на товар на ФЗОМ (поле 3.23 = 128).

      • maternityBasestring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • maternityPartialHoursnumber | null

        Одработени часови по предвремено враќање од породилно отсуство (поле 3.23 = 129).

      • clientTaxIdstring | null
      • netPaidstring

        Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

      • employeeobjectзадолжително
        Прикажи вгнездени параметриСкриј вгнездени параметри
        • embgstring | null

          ЕМБГ на вработениот.

        • firstNamestringзадолжително
        • lastNamestringзадолжително
        • firstNameCyrstring | null
        • lastNameCyrstring | null
        • bankAccountstring | null
        • municipalityCodestring | null
        • fzomBranchstring | null

Враќа

  • 200

    Комбинираната МПИН TXT датотека.

cURL
curl -X POST "https://api.payroll.merot.com/v1/files/mpin/txt/combined" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/mpin/txt/combined", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/mpin/txt/combined",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/mpin/txt/combined', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/mpin/txt/combined");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/mpin/txt/combined"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор

text/plain — бинарен одговор (датотека), нема JSON тело за преглед.

Извршете УЈП-проверки без генерирање датотека

#

POST /v1/files/mpin/validate

Тело на барањето

  • companyobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • taxIdstring | null
    • registrationNumberstring | null
    • namestringзадолжително
    • nameCyrstring | null
    • addressstring | null
    • addressStreetstring | null
    • addressNumberstring | null
    • addressAreastring | null
    • postalCodestring | null
    • faxstring | null
    • citystring | null
    • municipalityCodestring | null
    • managerNamestring | null
    • phonestring | null
    • emailstring | null
    • areaCodestring | null

      МПИН 2.3 — се изведува од `city` кога недостасува.

    • fzomBranchstring | null

      МПИН 3.4б — филијала на ФЗО (фондот за здравствено осигурување) за седиштето; се изведува од `city` кога недостасува.

  • batchobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • periodMonthintegerзадолжително
    • periodYearintegerзадолжително
    • workingHoursnumber

      Месечниот фонд на часови; се презема 176 за секој запис што нема сопствена вредност.

      Стандардна вредност: 176

    • vidObvrskastring | null

      МПИН 1.3 — вид на обврска. Стандардно 101 (редовна). 103 = исправка.

    • vidObvrznikstring | null

      МПИН 1.4 — вид на обврзник. Стандардно 110 (правно лице).

    • filingVariantenum | null

      Напредно, ретко потребно: `no_payment_declared` (внатрешно 555) ја поднесува истата пресметка со полето за исплатено нето пријавено како 0.00 — се користи кога придонесите мора да се пријават пред самата плата да биде исплатена. `vid_700` го репродуцира поднесувањето со вид на обврска 700 што УЈП го прифати за една исплата на плата во 08/2026; неговото точно значење надвор од ова не е документирано од УЈП и се нуди „како што е".

      regularno_payment_declaredvid_700
  • recordsarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • salaryGrossstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • salaryNetstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pensionstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • additionalHealthstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentContribstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pitstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • personalAllowancestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • overtimeHoursnumber

      Стандардна вредност: 0

    • overtimePaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • nightHoursnumber

      Стандардна вредност: 0

    • nightPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • holidayHoursnumber

      Стандардна вредност: 0

    • holidayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sundayHoursnumber

      Стандардна вредност: 0

    • sundayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • workingHoursnumber | null

      Стандардно се презема `workingHours` од серијата (batch).

    • sickFundHoursnumber | null
    • sickFundRatenumber | null
    • sickFundPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sickCompanyHoursnumber | null
    • sickCompanyRatenumber | null
    • sickCompanyPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • unpaidHoursnumber | null
    • absentHoursnumber | null

      МПИН 3.5 — часови надвор од пласманот во делумен месец.

    • serviceDaysnumber | null
    • pensionTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • disabilityTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • hireDayinteger | null

      МПИН 3.27 — ден во месецот на вработување, ако е во периодот.

    • leaveDayinteger | null

      МПИН 3.28 — ден во месецот на напуштање, ако е во периодот.

    • contractNointeger | null

      МПИН 3.30 — 2 или повеќе за повторно вработување во истиот месец.

    • insuranceCodestring | null

      МПИН 3.17 — вид на стаж.

    • sickFundCodestring | null
    • sickFundBasestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • maternityHoursnumber | null

      МПИН 3.24 — часови на породилно отсуство на товар на ФЗОМ (поле 3.23 = 128).

    • maternityBasestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • maternityPartialHoursnumber | null

      Одработени часови по предвремено враќање од породилно отсуство (поле 3.23 = 129).

    • clientTaxIdstring | null
    • netPaidstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employeeobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • embgstring | null

        ЕМБГ на вработениот.

      • firstNamestringзадолжително
      • lastNamestringзадолжително
      • firstNameCyrstring | null
      • lastNameCyrstring | null
      • bankAccountstring | null
      • municipalityCodestring | null
      • fzomBranchstring | null
  • forceboolean

    Генерирај дури и ако валидацијата најде блокирачки проблеми.

    Стандардна вредност: false

Враќа

  • 200

    Резултат од валидацијата.

cURL
curl -X POST "https://api.payroll.merot.com/v1/files/mpin/validate" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/mpin/validate", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/mpin/validate",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/mpin/validate', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/mpin/validate");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/mpin/validate"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "ok": true,
  "issues": []
}

Генерирајте ПДД-ГИ XML датотека за исплати на хонорарци

#

POST /v1/files/pddgi

ПДД-ГИ пријавува персонален данок на доход задржан при исплати на хонорар/договор за дело од серија (batch) за плата.

Тело на барањето

  • companyobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • taxIdstring | null
    • namestringзадолжително
    • emailstring | null
    • phonestring | null
    • contactPersonstring | null
    • municipalityCodestring | null
  • monthintegerзадолжително
  • yearintegerзадолжително
  • recordsarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • salaryGrossstringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employeeobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • embgstring | null
      • firstNamestringзадолжително
      • lastNamestringзадолжително
      • bankAccountstring | null

Враќа

  • 200

    ПДД-ГИ XML датотеката.

cURL
curl -X POST "https://api.payroll.merot.com/v1/files/pddgi" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/pddgi", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/pddgi",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/pddgi', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/pddgi");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/pddgi"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор

application/xml — бинарен одговор (датотека), нема JSON тело за преглед.

Генерирајте самостојна е-ППД ГИ XML датотека

#

POST /v1/files/epdd

е-ППД пријавува персонален данок на доход за исплата надвор од редовната серија (batch) за плата (ujp_ppf_acc_calc).

Тело на барањето

  • issuerobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • edbstringзадолжително
    • namestringзадолжително
    • bankAccountstring | null
    • emailstring | null
    • phonestring | null
  • periodFromstringзадолжително
  • periodTostringзадолжително
  • commentstring | null
  • rowsarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • embgstringзадолжително
    • firstNamestringзадолжително
    • lastNamestringзадолжително
    • municipalityCodestring | null
    • subtypeIncomestring | null
    • grossIncomestringзадолжително

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • bankAccountstring | null

Враќа

  • 200

    е-ППД XML датотеката.

cURL
curl -X POST "https://api.payroll.merot.com/v1/files/epdd" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/epdd", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/epdd",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/epdd', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/epdd");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/epdd"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор

application/xml — бинарен одговор (датотека), нема JSON тело за преглед.

Пресметајте бруто од нето за е-ППД (рамен персонален данок 10%)

#

POST /v1/files/epdd/gross-from-net

Тело на барањето

  • netstringзадолжително

    Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

Враќа

  • 200

    Бруто износ.

cURL
curl -X POST "https://api.payroll.merot.com/v1/files/epdd/gross-from-net" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "net": "20000"
  }'
const response = await fetch("https://api.payroll.merot.com/v1/files/epdd/gross-from-net", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "net": "20000"
  }),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/epdd/gross-from-net",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={
    "net": "20000"
},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/epdd/gross-from-net', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'net' => '20000',
],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/epdd/gross-from-net");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
  ""net"": ""20000""
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/epdd/gross-from-net"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{   \"net\": \"20000\" }"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "net": "20000",
  "gross": "22222"
}

Платни листи

Генерирање PDF платни листи на MK, SQ и EN.

Генерирајте PDF платна листа

#

POST /v1/payslips

Генерира PDF платна листа од резултат на пресметка (од POST /v1/calculations или ваша сопствена серија), податоците за вработениот/компанијата и јазик. Го враќа PDF-от директно.

Тело на барањето

  • companyobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • namestringзадолжително
    • taxIdstring | null
    • addressstring | null
  • employeeobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • firstNamestringзадолжително
    • lastNamestringзадолжително
    • embgstring | null
    • positionstring | null
  • periodobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • yearintegerзадолжително
    • monthintegerзадолжително
  • calculationobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • salaryGrossstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • baseGrossstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pensionstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentContribstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • additionalHealthstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • totalContributionsstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pensionTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • healthTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • disabilityTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • employmentTopUpstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • personalAllowancestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • taxableIncomestring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • pitstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • salaryNetstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • deductionsTotalstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • netPaidstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • workingHoursnumber
    • seniorityPercentagenumber
    • senioritystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • bonusAmountstring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • bonusBasisenum
      grossnet
    • overtimeHoursnumber
    • overtimePaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • nightHoursnumber
    • nightPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • holidayHoursnumber
    • holidayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sundayHoursnumber
    • sundayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sickHoursnumber
    • sickRatenumber
    • sickPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sickFundHoursnumber
    • sickFundRatenumber
    • sickFundPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sickCompanyHoursnumber
    • sickCompanyRatenumber
    • sickCompanyPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • shift1Hoursnumber
    • shift1Ratenumber
    • shift1Paystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • shift2Hoursnumber
    • shift2Ratenumber
    • shift2Paystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • shift3Hoursnumber
    • shift3Ratenumber
    • shift3Paystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • specialHoursnumber
    • specialRatenumber
    • specialPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • unpaidHoursnumber
    • absentHoursnumber
    • maternityHoursnumber
    • holidayNightHoursnumber
    • holidayNightRatenumber
    • holidayNightPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sundayNightHoursnumber
    • sundayNightRatenumber
    • sundayNightPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • sundayHolidayHoursnumber
    • sundayHolidayRatenumber
    • sundayHolidayPaystring

      Децимален износ во денари, како текстуална вредност (string), никогаш како JSON број.

    • prorationobject | null

      Присутно само кога барањето користело `period` + `placements`.

      Прикажи вгнездени параметриСкриј вгнездени параметри
      • serviceDaysnumber | null
      • absentHoursnumber
      • paidHoursnumber | null
      • hireDayinteger | null
      • leaveDayinteger | null
  • languageenumзадолжително
    mksqen

    Стандардна вредност: "mk"

Враќа

  • 200

    PDF платната листа.

  • 422

    validation_failed — едно или повеќе полиња не поминаа валидација.

cURL
curl -X POST "https://api.payroll.merot.com/v1/payslips" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/payslips", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/payslips",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/payslips', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/payslips");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/payslips"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор

application/pdf — бинарен одговор (датотека), нема JSON тело за преглед.

Статус

Јавен endpoint за статус (без автентикација).

Endpoint-и

Статус на сервисот

#

GET /v1/health

Враќа

  • 200

    Тековен статус.

cURL
curl -X GET "https://api.payroll.merot.com/v1/health"
const response = await fetch("https://api.payroll.merot.com/v1/health", {
  method: "GET",
  headers: {

  },
});

const data = await response.json();
console.log(data);
import requests

response = requests.get(
    "https://api.payroll.merot.com/v1/health",
    headers={

    },
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.payroll.merot.com/v1/health', [
    'headers' => [

    ],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.payroll.merot.com/v1/health");



using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/health"))
    .headers()
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Одговор
{
  "status": "ok",
  "version": "2026-09-26"
}