Payroll API
MK payroll concepts
Gross-first, not net-first
North Macedonian payroll is gross-first: the law and the МPIN filing are built around the
gross salary, contributions are computed off it, and personal income tax follows. This is the
opposite of Kosovo, where contracts are typically agreed in net and the employer grosses up.
grossSalary is the primary input to POST /v1/calculations; targetNet exists for the (less
common) case where you’ve agreed a net figure and need Merot to invert it to the statutory gross
that produces it — see POST /v1/calculations/convert for
that inversion standalone.
A worked example
A gross salary of 30,000 ден. for a standard 176-hour month, with today’s rates and no special hours:
| Field | Amount (ден.) |
|---|---|
| Gross | 30,000 |
| Pension (ПИО), 19.9% | 5,970 |
| Health (ФЗО), 7.5% | 2,250 |
| Additional health / work injury, 0.5% | 150 |
| Employment, 0.1% | 30 |
| Total contributions | 8,400 |
| Personal allowance | 10,932 |
| Taxable income | 10,668 |
| Personal income tax, flat 10% | 1,067 |
| Net | 20,533 |
Contributions are capped at a base of 16× the statutory average salary; below a minimum base (50% of the average salary, prorated to hours actually paid in a partial month), the shortfall is topped up and carried in the МПИН’s own top-up fields.
Personal income tax
A flat 10% on gross − contributions − personal allowance, floored at zero. The personal
allowance is prorated to the ratio of paid to full-month hours, and can be dropped entirely
(noPersonalAllowance) for an employee claiming it at a different, primary employer.
Contractors
Contractors (contractor: true, договор за дело) pay a flat 10% personal income tax on gross,
with no social contributions and no personal allowance.
Date-effective rates
Statutory rates change by law, effective on a specific date — for example, the pension
contribution rate rose from 18.8% to 19.9% (and the employment contribution fell from 1.2% to
0.1%, keeping the combined rate at 28%) effective with the July 2026 payroll, per Службен весник
148/2026. GET /v1/rates returns what’s in force today; pass effectiveDate on a calculation
to use the rates in force on a specific date instead (file generators already do this
automatically, using the rates in force on the last day of the filing period). GET /v1/rates/history returns every version of every rate key.
Note
Every number on this page comes from actually running the calculator against today’s rates — never from hand computation.