View Categories

Developer API Overview

1 min read

Follow this guide to understand how you can integrate your application with payiroll® using REST.

Overview #

Use cases #

Your application needs to:

  1. POST worker and pay information via API
  2. GET live and historic payslips

Steps #

The following steps would allow you to POST data and GET live payslips:

API callWhat DataDescriptionNotes
/api/v1/upload/{id}/start/WorkersStart the worker data feedNew workers will be automatically added as starters.
Existing workers will be updated. Leavers are set if there is a leave date.
/api/v1/upload/{id}/poll/WorkersPoll for completionErrors are listed here
/api/v1/upload/{id}/start/PayStart the pay data feedThis step can be repeated as often as required.
/api/v1/upload/{id}/poll/PayPoll for completion
/api/v1/company/{id}/payslips/Payslip (live)Returns a live payslip for each employee, for each pay schedule.

Other operations not covered above are completed in the GUI, for example, submitting a final pay run. This means that the effort for API development integration is typically a few hours, and an order of magnitude less than with other systems.

Data formats #

Data is formatted as a list of lists or a list of dicts.

Shift pay POST payload examples #

The hours and rates are provided from your application:

[
    ["Works Id", "Rate", "Units"],
    ["B1", "55.55", "1"],
    ["C1", "12.34", "5"]
]
[
    {"Works Id": "B1", "Rate": "55.55", "Units": "1"},
    {"Works Id": "C1", "Rate": "12.34", "Units": "5"},
]

Worker POST payload examples: #

Many columns are optional, and the uploader will provide defaults:

{
    "username": "robinson.crusoe@example.net",
    "email": "robinson.crusoe@example.net",
    "is_active=True": "",
    "title": "",
    "name": "Robinson Crusoe",
    "mobile": "",
    "preferences={}": "",
    "works_id": "RC1",
    "start_date": "2025-01-01",
    "working_days": "{{true,true,true,true,true,false,false}}",
    "fte": "",
    "end_date": "",
    "original_start_date": "",
    "department": "Candidates",
    "existing_employee=False": "",
    "notes": "",
    "uploaded=": "True",
    "external_uid=": "",
    "postaldetail.line1": "221B",
    "postaldetail.line2": "Baker Street",
    "postaldetail.line3": "Lonoon",
    "postaldetail.line4": "",
    "postaldetail.postcode": "{W1A 1AA",
    "postaldetail.foreign_country": "",
    "taxdetail.weekly_hours_worked=Other": "",
    "taxdetail.P45_tax_code=": "",
    "taxdetail.P45_week1_month1=False": "",
    "taxdetail.P45_leaving_date=": "",
    "taxdetail.P45_total_pay_to_date=": "",
    "taxdetail.P45_total_tax_to_date=": "",
    "taxdetail.P45_continue_student_loan=0": "",
    "taxdetail.P45_continue_postgraduate_loan=0": "",
    "taxdetail.NI_category=General": "",
    "taxdetail.workplace_postcode=": "",
    "taxdetail.director=False": "",
    "taxdetail.director_from=": "",
    "taxdetail.director_NI_cumulative=False": "",
    "taxdetail.paid_irregularly=False": "",
    "taxdetail.off_payroll_worker=False": "",
    "taxdetail.migrated_rti_payid=": "",
    "taxdetail.cis=": "",
    "taxeedetail.date_of_birth": "1970-02-02",
    "taxeedetail.gender": "Male",
    "taxeedetail.NI_number": "AB123456A",
    "taxeedetail.employee_statement": "",
    "taxeedetail.student_loan=0": "",
    "taxeedetail.postgraduate_loan=0": "",
    "taxeedetail.cis_trading_name=": "",
    "taxeedetail.cis_utr=": "",
    "taxeedetail.cis_crn=": "",
    "bankdetail.account_name": "R CRUSOE",
    "bankdetail.sort_code": "000000",
    "bankdetail.account_number": "00000000",
    "bankdetail.payment_method=": ""
}

Data Validation #

paiyroll® will typically perform extensive validation on the data. For example, national insurance numbers, bank details, and so on. Full row-by-row error reporting is available from the poll request. Usually, you should present these to the user so they can correct any errors in your application. Once corrected, you can re-post.

Powered by BetterDocs