Payroll API
v1 Guides MK Get started

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:

FieldAmount (ден.)
Gross30,000
Pension (ПИО), 19.9%5,970
Health (ФЗО), 7.5%2,250
Additional health / work injury, 0.5%150
Employment, 0.1%30
Total contributions8,400
Personal allowance10,932
Taxable income10,668
Personal income tax, flat 10%1,067
Net20,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.