Skip to content
English
  • There are no suggestions because the search field is empty.

Export Company Payroll Report Data via API Integration

This article is a guide on how to create a Company Payroll Report API integration to export company payroll data from the BrioHR Payroll module.

Note: For a comprehensive overview of the BrioHR API integration flow, please refer to the article here.

IMPORTANT:

To enable this integration, you will need to contact our support team via email or live chat so we can provide the necessary access. Please contact us via: 

Note: If you are still in the implementation stage, please reach out to your implementation manager for support.

The integration flow with BrioHR will consist of the steps below: 

  1. Client request for the APIs/integration access together with the list of IPs (recommended for securing the line of integration).
  2. BrioHR will create the credentials for client. Consists of: Authentication credentials and client’s ID. 
  3. Client can try to connect to BrioHR API using the link, authentication & ID. 

Report API URL: 

https://static.api.briohr.com/v2/api/external/reports/payroll-report/download

Header Value
Authorization

Basic

base64_encode(<username:password>)

x-api-context-company <company id>
x-resource-type payroll-report
Query Parameter Mandatory/Optional Example Value
country Mandatory MY (ISO-2; expands to every payroll center of that country for the company unless payrollCenter is also provided). Supported: MYSG.
period Mandatory 2026-04 (YYYY-MM - single month, Mode = Monthly)
payrollCenter Optional 66f1a2b3c4d5e6f708091011 (comma-seperated for multiple PCs; each id must belong to your company). When provided, explicit ids win over country.
cycleName Optional Bonus Cycle (the cycle's name as shown in BrioHR; case-sensitive). Only valid when exactly one payrollCenter is targeted. Pass CombinedCycle or omit for the combined view
granularity Optional (Default employees) employees | employees and departments
format Optional (Default csv) csv | json

For Power BI & other 3rd party that cannot inject the x-api-context-company in the header:

https://static.api.briohr.com/v2/api/external/reports/payroll-report/download?
format=csv&company=&resource=payroll-report&country=MY&period=2026-04

Expected output: payroll-report.csv (or payroll-report.json when format=json).


Example of CURL 

curl -o payroll-report.csv --location
'https://static.api.briohr.com/v2/api/external/reports/payroll-report/download?
format=csv&country=MY&period=2026-04' \
--header 'Authorization: Basic aHotYXBwOmJyaW9ocg==' \
--header 'x-api-context-company: 6100c5285e18f90007694f8a' \
--header 'x-resource-type: payroll-report'

Example of CURL for PowerBI

curl -o payroll-report.csv --location
'https://static.api.briohr.com/v2/api/external/reports/payroll-report/download?
format=csv&company=6100c5285e18f90007694f8a&resource=payroll-report&country=MY&period=2026-
04' \
--header 'Authorization: Basic aHotYXBwOmJyaW9ocg=='

Example of CSV Output

A row per employee. Columns are Title Case (e.g., "First Name", "Basic Salary"). The full set is ~100 columns covering identity, employment, tax/statutory categories, and
earnings/deductions; the exact column set depends on the country (MY vs SG). Truncated
sample showing the first columns:

"Manager","Job Title","Age","Employment Type","Office","Nationality","Joining
Date","Active/Inactive","Salary","Department","Internal Id","First Name","Last
Name","Email","Payroll Center","Basic Salary","Gross Earnings","Net Pay","Total Employee
Deductions","Total Employer Deductions", ...
"Francis Wiley","HR demo","","","Nabil Group","Malaysian","2020-01-
01","Active",3600,"Mangement","00004","Kaseem","Avery","taticawyho@mailinator.com","Nabil
Group",3600,3600,2808,792,936, ...

NOTES:

  • Returns the same source data as the Company Payroll Report in the BrioHR web app. The CSV column set and order differ from the web app's "Export CSV" — the API returns the raw column set (~100+ fields), while the web app's export uses a curated, smaller column set. Values for shared columns (Internal Id, First Name, Basic Salary, Net Pay, etc.) match.

  • cycleName is case-insensitive but only works when a single payrollCenter
    is targeted. Pass Combined Cycle (or omit) for the combined view across all cycles in the period.

  • Every payrollCenter ID you pass must belong to your company. Placeholder IDs in this doc (e.g. 66f1a2b3c4d5e6f708091011) are illustrative — replace them with your real IDs.

IMPORTANT:
Kindly be informed that BrioHR will need to whitelist the client's IP and then provide the client with the username, password and company ID. 

 

Common Errors

HTTP Body message Cause
400 country is required (e.g. MY, SG) Missing country param

400

country must be one of: MY, SG Unknown or unsupported country code
400 no payroll centers found for country <CODE>; passpayrollCenter explicitly or use a different country Your company has no payroll centers in that country
400 period is required(format YYYY-MM) Missing period
400 period must be in YYYY-MM format Invalid period shape (e.g.
Apr2026)
400 cycleName "<name>" can only be used when a single payrollCenter is targeted Used cycleName
with 0 or 2+ payroll centers
400 cycleName "<name>" not found for the selected payroll center and period The cycle name doesn't exist for that payroll center + period combination
500 Cannot read property 'country' of undefined
(type: "typescript")
One or more
payrollCenter
IDs do not belong to your company.
Fix: replace any placeholder IDs with the real IDs your BrioHR contact provided.
403 (no body) Invalid API key, IP not allowlisted, or the integration isn't enabled for
payroll-report

 

Need Assistance?

If you have any questions regarding the API above or require assistance, please reach out to our support team via live chat or email us at support@briohr.com.