# Data Exchange

> Monthly input file spec and payroll outputs for platforms: CSV and JSON fields, payroll register, GL journal, payslips and F24 summary.


<section> <span class="eyebrow">Data exchange</span> <h1 id="one-input-file-in-five-outputs-back">One input file in, five outputs back</h1> <p class="lede">Send one file per period as CSV (UTF-8, comma separated, header row) or JSON array, by SFTP or REST API. Each line is one event for one employee. Field names below are the defaults; we can map yours.</p> </section> <section> <h2 id="monthly-input">Monthly input</h2> <div class="tbl"><table> <thead><tr><th>Field</th><th>Type</th><th>Notes</th></tr></thead> <tbody><tr><td class="code">partner_employee_id</td><td class="code">string</td><td>Your ID for the employee. Key for every record.</td></tr><tr><td class="code">period</td><td class="code">YYYY-MM</td><td>Payroll month.</td></tr><tr><td class="code">record_type</td><td class="code">enum</td><td>hire, change, leave, variable, termination</td></tr><tr><td class="code">effective_date</td><td class="code">YYYY-MM-DD</td><td>Date the event applies from.</td></tr><tr><td class="code">first_name, last_name</td><td class="code">string</td><td>Hires only.</td></tr><tr><td class="code">tax_code</td><td class="code">string(16)</td><td>Italian codice fiscale.</td></tr><tr><td class="code">birth_date</td><td class="code">YYYY-MM-DD</td><td>Hires only.</td></tr><tr><td class="code">email</td><td class="code">string</td><td>Payslip delivery and contact.</td></tr><tr><td class="code">iban</td><td class="code">string</td><td>Net pay account.</td></tr><tr><td class="code">address, city, postal_code, province</td><td class="code">string</td><td>Residence; drives regional and municipal surtaxes.</td></tr><tr><td class="code">contract_type</td><td class="code">enum</td><td>permanent, fixed_term</td></tr><tr><td class="code">ccnl_code</td><td class="code">string</td><td>Collective agreement; we suggest one at quote stage.</td></tr><tr><td class="code">level</td><td class="code">string</td><td>Grade under the CCNL.</td></tr><tr><td class="code">weekly_hours</td><td class="code">number</td><td>Full time or part time hours.</td></tr><tr><td class="code">annual_gross</td><td class="code">number (EUR)</td><td>Agreed annual gross salary.</td></tr><tr><td class="code">monthly_installments</td><td class="code">13 | 14</td><td>Set by the CCNL.</td></tr><tr><td class="code">overtime_hours</td><td class="code">number</td><td>Per rate type: ot_day, ot_night, ot_holiday.</td></tr><tr><td class="code">bonus_amount</td><td class="code">number (EUR)</td><td>One-off bonus for the period.</td></tr><tr><td class="code">allowance_code, allowance_amount</td><td class="code">string, number</td><td>Recurring or one-off allowances.</td></tr><tr><td class="code">expense_amount</td><td class="code">number (EUR)</td><td>Reimbursements, with receipt reference.</td></tr><tr><td class="code">meal_voucher_days</td><td class="code">integer</td><td>Days eligible for meal vouchers.</td></tr><tr><td class="code">absence_type</td><td class="code">enum</td><td>vacation, permit, sick, maternity, paternity, unpaid, other</td></tr><tr><td class="code">absence_from, absence_to</td><td class="code">YYYY-MM-DD</td><td>Absence period; sick leave needs the certificate number.</td></tr><tr><td class="code">termination_reason</td><td class="code">enum</td><td>resignation, dismissal, end_of_term, mutual</td></tr><tr><td class="code">notes</td><td class="code">string</td><td>Free text for our ops team; not used in calculations.</td></tr></tbody> </table></div> <h3 id="example-json-one-record">Example (JSON, one record)</h3> <pre class="panel" style="overflow-x:auto;margin:0"><code>{
  &quot;partner_employee_id&quot;: &quot;EMP-0042&quot;,
  &quot;period&quot;: &quot;2026-11&quot;,
  &quot;record_type&quot;: &quot;variable&quot;,
  &quot;effective_date&quot;: &quot;2026-11-01&quot;,
  &quot;overtime_hours&quot;: { &quot;ot_day&quot;: 6 },
  &quot;bonus_amount&quot;: 500.00,
  &quot;absence_type&quot;: &quot;vacation&quot;,
  &quot;absence_from&quot;: &quot;2026-11-10&quot;,
  &quot;absence_to&quot;: &quot;2026-11-12&quot;
}</code></pre> </section> <section> <h2 id="outputs">Outputs</h2> <div class="tbl"><table> <thead><tr><th>Output</th><th>Format</th><th>Content</th></tr></thead> <tbody><tr><td><b>Payroll register</b></td><td class="code">CSV / JSON</td><td>One row per employee: gross items, employee contributions, taxable income, IRPEF, regional and municipal surtaxes, deductions, net pay, employer contributions, INAIL, TFR accrual, total employment cost.</td></tr><tr><td><b>GL journal</b></td><td class="code">CSV / JSON</td><td>Double-entry lines: date, account code (mapped to your chart), cost center, partner_employee_id, debit, credit, currency, description.</td></tr><tr><td><b>Payslips</b></td><td class="code">PDF (one per employee) + ZIP</td><td>White-label with your logo; file name <code>{period}_{partner_employee_id}.pdf</code>.</td></tr><tr><td><b>F24 summary</b></td><td class="code">CSV / JSON + PDF receipt</td><td>Tax codes, reference period, amounts by tribute (IRPEF withholding, surtaxes, INPS), payment date and receipt reference.</td></tr><tr><td><b>Funding invoice</b></td><td class="code">PDF + JSON</td><td>Employment cost on actuals plus partner fees, per client and per employee.</td></tr></tbody> </table></div> <p class="prose">Validation runs on upload: missing keys, unknown employee IDs and out-of-range values come back as an error file with line numbers, within <span class="review">[1 business hour]</span>.</p> </section>


---
Source: https://italyincountry.com/data-exchange.html
