Other Financial Integration
You can now not only set up the Journal Entries Structure of your financial integrations, but you can also integrate your ZenHR account with Other Financial Systems through the “Other Financial Integrations” page. Integrate your ZenHR account with other financial systems using whatever authentication you want (Auth1, Auth2, etc). You will also be able to export payroll, off-cycle payments, and off-cycle vacation in-advance salaries journal entries with the Journal Entries Exporter, which can be activated in the Journal Entries Structure.
TABLE OF CONTENTS
- Financial Integration Enhancements
Integrate Your ZenHR Account With Other Financial Systems
Marketplace integration → Financial Integration Setup
The Other Financial Integrations Feature enables seamless integration of your ZenHR account with various financial systems using OAuth 1, OAuth 2, and credentials authentication. This feature-rich tool empowers you to effortlessly transmit and update employee data, as well as dispatch journal entries to your financial system.
Key Requirements for Integration:
- Providing an Endpoint:
- Your technical team is required to provide an endpoint (a URL) that ZenHR will use to transmit journal entries and Employee info if needed.
- This endpoint acts as the receiving point for all financial data sent from ZenHR to your system.
- Developing Middleware for Attribute Mapping:
- ZenHR sends financial data in JSON format, which includes specific attributes tied to the journal entries.
- Your team must develop middleware to map these ZenHR attributes to the corresponding fields in your financial system.
- Accurate mapping ensures that data is correctly interpreted and consistently integrated into your system.
- Inputting Specific Values into ZenHR:
- Your team needs to enter specific values into ZenHR, such as GL Accounts, Employee IDs, and Organizational Level IDs (if applicable).
- These values are embedded in the JSON data sent by ZenHR, ensuring proper representation within your financial system.
Practical Example:
- Imagine your financial system assigns the GL Account ID "110011" to Basic Salary.
- Your team inputs this ID into ZenHR.
- When ZenHR generates payroll journal entries, the JSON data includes "110011" for Basic Salary, ensuring it is accurately reflected in the JSON used to send to your financial system.

Employee Data Structure
| Field | Description | Type | Example |
|---|---|---|---|
| employment_number | Employee’s official employment number in ZenHR | String | "43333" |
| subsidiary_id | Internal branch ID (Added on ZenHR by You Based on your ERP ID) | Integer / null | 123 |
| subsidiary | Branch name | String | "KSA Branch" |
| entity_id | Unique concatenation of ZenHR employee ID + name | String | "147TurkiMohammad" |
| inactive | Employee status (false = active) | Boolean | false |
| first_name | First name | String | "Turki" |
| second_name | Middle name | String | "Hussain" |
| third_name | Third name | String | "Kareem" |
| last_name | Last name | String | "Mohammad" |
| Work email | String | "turki.zenhr@gmail.com" | |
| custentity_hr_id | ZenHR unique internal employee ID | Integer | 147 |
| mobile_phone | Employee’s mobile phone | String | "053 234 3333" |
| social_security_number | Employee’s SSN if applicable | String / null | 124554646 |
| hire_date | Hiring date | String (DD/MM/YYYY) | "15/10/2025" |
| marital_status | Marital status | String | "Single" |
| gender | Employee gender | String | "Male" |
| birth_date | Date of birth | String | "16/04/1996" |
| title | Job title | String | "Senior Anti-Fraud Officer" |
| title_id | ZenHR Internal job title ID | Integer | 2293 |
| release_date | Termination date | String / null | null |
| integration_id | Employee’s ID in external financial system (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| national_id | National ID | String | "1094518725" |
| iqama_number | Iqama number (KSA) | String | "12312421" |
| supervisor | Direct manager’s name | String | "Abdulaziz Kareem" |
| supervisor_id | Direct manager’s ZenHR employee ID (Added on ZenHR by You Based on your ERP ID) | Integer | 43333 |
| supervisor_integration_id | Manager’s financial system ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| official_supervisor | Official supervisor name | String | "Kareem Lelo" |
| official_supervisor_id | Official supervisor’s ZenHR employee ID | Integer / null | null |
| official_supervisor_integration_id | Official supervisor’s financial system ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| passport_number | Passport number | String | "12321413" |
| class | Project / main class | String / null | null |
| class_id | ZenHR class ID | Integer / null | null |
| class_integration_id | Financial system class ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| department | Department name | String | "Compliance" |
| department_id | ZenHR department ID | Integer | 125233 |
| department_integration_id | Financial system department ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| location | Work location name | String | "KSA - Riyadh" |
| location_id | ZenHR work location ID | Integer | 124644 |
| location_integration_id | Financial system location ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| business_unit | Business unit name | String / null | null |
| business_unit_id | ZenHR business unit ID | Integer / null | null |
| business_unit_integration_id | Financial system business unit ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| division | Division name | String | "HQ (Global Function)" |
| division_id | ZenHR division ID | Integer | 451055 |
| division_integration_id | Financial system division ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| segment | Segment name | String / null | null |
| segment_id | ZenHR segment ID | Integer / null | null |
| segment_integration_id | Financial system segment ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| section | Section name | String / null | null |
| section_id | ZenHR section ID | Integer / null | null |
| section_integration_id | Financial system section ID (Added on ZenHR by You Based on your ERP ID) | String / null | null |
| customized_fields | Any custom fields added to employee profile | Object | {} |
Sample Employee Data JSON:
{
"employment_number": "43333",
"subsidiary_id": null,
"subsidiary": "KSA Branch",
"entity_id": "147TurkiMohammad",
"inactive": false,
"first_name": "Turki",
"second_name": "Hussain ",
"third_name": "",
"last_name": "Mohammad",
"email": "turki.zenhr@gmail.com",
"custentity_hr_id": 147,
"mobile_phone": "053 234 3333",
"social_security_number": null,
"hire_date": "15/10/2025",
"marital_status": "",
"gender": "Male",
"birth_date": "16/04/1996",
"title": "Senior Anti-Fraud Officer",
"title_id": 2293,
"release_date": null,
"integration_id": null,
"national_id": "1094518725",
"iqama_number": "",
"supervisor": "Abdulaziz Kareem",
"supervisor_id": 43333,
"supervisor_integration_id": null,
"official_supervisor": "",
"official_supervisor_id": null,
"official_supervisor_integration_id": null,
"passport_number": "",
"class": null,
"class_id": null,
"class_integration_id": null,
"department": "Compliance",
"department_id": 125233,
"department_integration_id": null,
"location": "KSA - Riyadh",
"location_id": 124644,
"location_integration_id": null,
"business_unit": null,
"business_unit_id": null,
"business_unit_integration_id": null,
"division": "HQ (Global Function)",
"division_id": 451055,
"division_integration_id": null,
"segment": null,
"segment_id": null,
"segment_integration_id": null,
"section": null,
"section_id": null,
"section_integration_id": null,
"customized_fields": {}
}
Journal Entries Branch Details Structure
Attribute | Attribute Description |
key | Journal entry name and type |
name | Branch name |
date | Journal creation date |
currency | Journal entry currency |
id | Branch ID on ZenHR |
company_id | Company ID on ZenHR |
Sample Branch Details JSON:
"Payroll Journal Entries - KSA Branch": {
"name": null,
"date": "25/01/2022",
"currency": "SAR",
"branch": {
"id": 5670,
"company_id": 3850,
"name": "KSA Branch",
"logo_file_name": "Screenshot_2022-11-13_105131.png",
"logo_content_type": "image/png",
"logo_file_size": 19640,
"logo_updated_at": "2022-11-13T11:18:06.029+03:00",
"created_at": "2022-10-27T11:27:16.727+03:00",
"updated_at": "2024-09-28T11:48:30.237+03:00",
"probation_period": {
"type": "Month",
"period": "3"
},
"working_hours": 8,
"cut_off_date": 25,
"working_days": 30,
"days_off": [
"5",
"6"
],
"location": null,
"timezone": "Riyadh",
"auto_increment": true,
"round": 3,
"currency_currency": "SAR",
"country_id": 192,
"dashboard_logo_file_name": "Screenshot_2022-11-13_105131.png",
"dashboard_logo_content_type": "image/png",
"dashboard_logo_file_size": 19640,
"dashboard_logo_updated_at": "2022-11-13T11:18:06.287+03:00",
"reminder_email": "",
"dashboard_active_widgets": {
"timeoffs": "true",
"who_is_off": "true",
"announcements": "true",
"upcoming_birthdays": "true"
},
"date_format": "%b %d, %Y",
"time_format": "%I:%M %P",
"show_who_is_off_type": true,
"week_start_day": 0,
"allowed_emp_directory": true,
"withdraw_approved_transactions": false,
"fiscal_day": 1,
"fiscal_month": 1,
"whos_off_type": 1,
"whos_off_interval": 30,
"subsidiary_id": null,
"active_slack": false,
"view_financial_hr_letters": false,
"is_localization_default": true,
"enable_timeoff_default_type": false,
"gosi_integration_enabled": true,
"editable_employee_profile_picture": true,
"enable_altibbi": false,
"employee_day_rate": null
},
"offcycle_journal": false,
"in_advanced_journal": false,
"setup": {
"id": 543,
"branch_id": 5670,
"clearance_type": "accrued_clearance",
"request_size": null,
"journal_type": "detailed",
"group_by": null,
"separate_journal_by_group": false,
"auto_generate_offcycle_transactions": true,
"auto_generate_in_advance": true,
"separate_company_expenses": true,
"separate_company_contributions": true,
"calculate_provisions": false,
"provision_journal_type": "separate_provisions",
"activate_exporter": true,
"created_at": "2022-12-07T11:26:17.616+03:00",
"updated_at": "2022-12-19T15:05:23.471+03:00",
"prevent_deleting_transactions": null,
"send_provisions_manually": null,
"calculate_provisions_for_out_sourced_employees": null,
"calc_vacation_yearly": false,
"prevent_editing_transactions": null,
"accrued_employee": null,
"prevent_resending_transactions": false,
"deduct_absence": true,
"calc_provision_with_settlement": false,
"calculate_provisions_based_on_cut_off_date": true,
"seperate_journal_per_request_by_group": null
},
"subsidiary": {
"id": 5670,
"company_id": 3850,
"name": "KSA Branch",
"logo_file_name": "Screenshot_2022-11-13_105131.png",
"logo_content_type": "image/png",
"logo_file_size": 19640,
"logo_updated_at": "2022-11-13T11:18:06.029+03:00",
"created_at": "2022-10-27T11:27:16.727+03:00",
"updated_at": "2024-09-28T11:48:30.237+03:00",
"probation_period": {
"type": "Month",
"period": "3"
},
"working_hours": 8,
"cut_off_date": 25,
"working_days": 30,
"days_off": [
"5",
"6"
],
"location": null,
"timezone": "Riyadh",
"auto_increment": true,
"round": 3,
"currency_currency": "SAR",
"country_id": 192,
"dashboard_logo_file_name": "Screenshot_2022-11-13_105131.png",
"dashboard_logo_content_type": "image/png",
"dashboard_logo_file_size": 19640,
"dashboard_logo_updated_at": "2022-11-13T11:18:06.287+03:00",
"reminder_email": "",
"dashboard_active_widgets": {
"timeoffs": "true",
"who_is_off": "true",
"announcements": "true",
"upcoming_birthdays": "true"
},
"date_format": "%b %d, %Y",
"time_format": "%I:%M %P",
"show_who_is_off_type": true,
"week_start_day": 0,
"allowed_emp_directory": true,
"withdraw_approved_transactions": false,
"fiscal_day": 1,
"fiscal_month": 1,
"whos_off_type": 1,
"whos_off_interval": 30,
"subsidiary_id": null,
"active_slack": false,
"view_financial_hr_letters": false,
"is_localization_default": true,
"enable_timeoff_default_type": false,
"gosi_integration_enabled": true,
"editable_employee_profile_picture": true,
"enable_altibbi": false,
"employee_day_rate": null
},Introduction to the Detailed Journal Entry JSON
When ZenHR generates payroll journal entries, each line in the journal is represented as a structured JSON object. This JSON contains all the financial, employee, and organizational information your system needs to correctly post payroll transactions into your financial or ERP platform.
The detailed journal JSON provides a line-by-line breakdown for every payroll component (such as Basic Salary, GOSI, Allowances, Deductions, etc.).
Each line includes:
The GL account the amount should be posted to
The employee that the transaction belongs to
Whether the value is a debit or a credit
The financial amount
The employee’s organizational levels (department, section, project, work location)
This format ensures your financial system can classify, group, and post data accurately based on your internal accounting structure.
Below is a clear explanation of the fields included in a single detailed journal entry line.
Detailed Journal Entry Line Field Reference Table
| Field | Description | Type | Example |
|---|---|---|---|
| account | The GL account that this payroll transaction should post to in your financial system. This is entered inside ZenHR under GL Identifiers. | String | "324-GL3453" |
| memo | The name of the payroll component (e.g., Basic Salary, GOSI, Allowance). This helps your financial system classify the transaction. | String | "Basic Salary" |
| employee_id | The internal ZenHR employee ID. This is how ZenHR identifies the employee inside its own system. | Integer | 138679 |
| integration_id | The employee’s ID in your financial system. You add this inside ZenHR → Connected People. Used for accurate employee mapping. | Integer | 1244 |
| employment_number | The employment number displayed in ZenHR. Often used as a secondary identifier by financial systems. | String | "01" |
| name | Employee name. Only included when journals are generated in Detailed mode. Helpful for readability in your financial system. | String | "Salim Al Harbi" |
| type | Indicates whether the line is a debit or credit entry. | String | "debit" |
| debit | The debit amount for this transaction. Only appears when type = debit. | Float | 80000.0 |
| credit | The credit amount for this transaction. Only appears when type = credit. | Float | 80000.0 |
Organization Levels – Simplified Structure Overview
Each journal entry line includes an organization_levels object that describes where the employee belongs inside your organization (department, section, project, location, etc.).These values help your financial system categorize the transaction into the correct dimension, cost center, or tracking category.
organization_levels → department
| Field | Description | Type | Example |
|---|---|---|---|
| id | The internal ZenHR Department ID assigned to the employee. | Integer | 40707 |
| name | The department name exactly as stored in ZenHR. | String | "Management" |
| integration_id | The department’s ID in your financial system (entered by you in ZenHR → Organizational Levels). Used for accurate dimension mapping. | String / null | 53 |
Sample (Detailed) Journal Entries JSON lines:
"lines": [
{
"salary_id": 10963999,
"account": "324-GL3453",
"gl_account_name": "",
"payment_method": "Bank Transfer",
"memo": "Basic Salary",
"employee_id": 138679,
"integration_id": "",
"employment_number": "01",
"name": "Salim Al Harbi",
"hiring_date": "2020-01-01",
"cost_center_id": null,
"cost_center_integration_id": null,
"cost_center": "",
"cost_center_name": null,
"cost_center_account": null,
"type": "debit",
"object_type": null,
"debit": 80000.0,
"zenhr_transaction_id": 10963999,
"location": "Head Office",
"department": "Management : Management Section",
"class": "ZenHR & Testello",
"organization_levels": {
"department": {
"id": 40707,
"name": "Management",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"section": {
"id": 40712,
"name": "Management Section",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"project": {
"id": 40713,
"name": "ZenHR & Testello",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"hierarchy_group": {
"id": 40715,
"name": "Management Group",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"work_location": {
"id": 40666,
"name": "Head Office",
"account": null,
"dimension_code": null,
"tracking_category": null,
"integration_id": null
}
}
},
{
"salary_id": 10963999,
"account": "",
"gl_account_name": "",
"payment_method": "Bank Transfer",
"memo": "Saudi Employees GOSI",
"employee_id": 138679,
"integration_id": "",
"employment_number": "01",
"name": "Salim Al Harbi",
"hiring_date": "2020-01-01",
"cost_center_id": null,
"cost_center_integration_id": null,
"cost_center": "",
"cost_center_name": null,
"cost_center_account": null,
"type": "credit",
"object_type": "SocialSecurity",
"credit": 4387.5,
"zenhr_transaction_id": 86,
"location": "Head Office",
"department": "Management : Management Section",
"class": "ZenHR & Testello",
"organization_levels": {
"department": {
"id": 40707,
"name": "Management",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"section": {
"id": 40712,
"name": "Management Section",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"project": {
"id": 40713,
"name": "ZenHR & Testello",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"hierarchy_group": {
"id": 40715,
"name": "Management Group",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"work_location": {
"id": 40666,
"name": "Head Office",
"account": null,
"dimension_code": null,
"tracking_category": null,
"integration_id": null
}
}
},
{
"salary_id": 10963999,
"account": "324-GL3453",
"gl_account_name": "",
"payment_method": "Bank Transfer",
"memo": "Accrued Salaries - Clearance",
"employee_id": 138679,
"integration_id": "",
"employment_number": "01",
"name": "Salim Al Harbi",
"hiring_date": "2020-01-01",
"cost_center_id": null,
"cost_center_integration_id": null,
"cost_center": "",
"cost_center_name": null,
"cost_center_account": null,
"type": "credit",
"object_type": null,
"credit": 105612.5,
"location": "Head Office",
"department": "Management : Management Section",
"class": "ZenHR & Testello",
"organization_levels": {
"department": {
"id": 40707,
"name": "Management",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"section": {
"id": 40712,
"name": "Management Section",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"project": {
"id": 40713,
"name": "ZenHR & Testello",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"hierarchy_group": {
"id": 40715,
"name": "Management Group",
"account": "",
"dimension_code": null,
"tracking_category": null,
"integration_id": null
},
"work_location": {
"id": 40666,
"name": "Head Office",
"account": null,
"dimension_code": null,
"tracking_category": null,
"integration_id": null
}
}
}
]
},
"event_id": 10802914
}Introduction to the Summary Journal Entry JSON
Summary journal entries provide a consolidated version of payroll data, grouping amounts by cost center, branch, or other configured criteria. Unlike detailed journals, which include employee-level information for every payroll component, summary journal JSON focuses only on aggregated financial totals, making it ideal for financial systems that do not require per-employee posting.
Each summary line represents a total amount for a specific payroll component (e.g., Basic Salary, Allowances, GOSI, Deductions), grouped according to the structure you configured in ZenHR’s Journal Entries Setup.
Because this format is designed for high-level financial posting, many employee-specific fields (such as employee_id, name, hiring_date) are intentionally omitted or left empty.
Summary lines still include:
The GL account mapping
The payroll component name (memo)
Whether the line is a debit or credit entry
The aggregated financial amount
The cost center or grouping level (if activated)
Basic classification details such as location or cost center name
This format is optimized for ERPs that rely on cost centers / Org Levels , branches, or GL account groupings rather than employee-level detail.
Below is the field reference for the Summary Journal JSON.
Summary Journal Entry Line Field Reference Table
| Field | Description | Type | Example |
|---|---|---|---|
| account | The GL account for this grouped payroll component. Pulled from ZenHR GL Identifiers. | String / null | "2" |
| memo | Name of the payroll component being grouped (Basic Salary, Allowance, etc.). | String | "Basic Salary" |
| type | Indicates whether the entry is a debit or credit. | String | "debit" |
| object_type | Shows the transaction category (e.g., RecurringTransaction). Optional for summary journals. | String / null | "RecurringTransaction" |
| debit | Debit amount for this grouped component. Present only if type = debit. | Float | 4000.0 |
| credit | Credit amount for this component. Present only if type = credit. | Float | 4800.0 |
| location » Changes based on your grouping option | The cost center or predefined location label used for grouping. | String | "Location 1" |
| Integration_id | Organizational Level ID. You add this inside ZenHR → Organizational Level. Used for accurate Org Level mapping. | Integer | 123 |
Sample (Summary) Journal Entries JSON lines:
"lines": [
{
"salary_id": null,
"account": null,
"gl_account_name": null,
"payment_method": "Bank Transfer",
"memo": "Basic Salary",
"employee_id": "",
"integration_id": "",
"employment_number": "",
"name": "",
"hiring_date": "",
"cost_center_id": 177993,
"cost_center_integration_id": 177993,
"cost_center": {
"id": 177993,
"branch_id": 105,
"organization_level_id": null,
"name": "Location 1",
"created_at": "2024-10-28T22:59:14.557+03:00",
"updated_at": "2024-10-28T22:59:14.557+03:00",
"organization_level_type": "site",
"key_staff": null,
"gl_identifier": null,
"logo_file_name": null,
"logo_content_type": null,
"logo_file_size": null,
"logo_updated_at": null,
"type_translation": {
"ar": "موقع العمل",
"en": "Work Location"
},
"integration_id": null,
"gl_identifiers": {},
"subsidiary_id": null,
"dimension": null,
"tracking_category": null
},
"cost_center_name": "Location 1",
"cost_center_account": null,
"type": "debit",
"object_type": null,
"debit": 4000.0,
"location": "Location 1"
},
{
"salary_id": null,
"account": "2",
"gl_account_name": null,
"payment_method": "Bank Transfer",
"memo": "Allowance",
"employee_id": "",
"integration_id": "",
"employment_number": "",
"name": "",
"hiring_date": "",
"cost_center_id": 177993,
"cost_center_integration_id": 177993,
"cost_center": {
"id": 177993,
"branch_id": 105,
"organization_level_id": null,
"name": "Location 1",
"created_at": "2024-10-28T22:59:14.557+03:00",
"updated_at": "2024-10-28T22:59:14.557+03:00",
"organization_level_type": "site",
"key_staff": null,
"gl_identifier": null,
"logo_file_name": null,
"logo_content_type": null,
"logo_file_size": null,
"logo_updated_at": null,
"type_translation": {
"ar": "موقع العمل",
"en": "Work Location"
},
"integration_id": null,
"gl_identifiers": {},
"subsidiary_id": null,
"dimension": null,
"tracking_category": null
},
"cost_center_name": "Location 1",
"cost_center_account": null,
"type": "debit",
"object_type": "RecurringTransaction",
"debit": 800.0,
"location": "Location 1"
},
{
"salary_id": null,
"memo": "Accrued Salaries - Clearance",
"account": null,
"gl_account_name": "",
"payment_method": "Bank Transfer",
"type": "credit",
"credit": 4800.0
}
]
},
"event_id": 10803059
}How To Activate The Other Financial Integration Tool?
To activate Other Financial Integrations on ZenHR, first set up your Journal Entries Structure and generate the needed API keys to proceed with the integration process.
Step 1: Set Up Journal Entry Structure
User Menu → System Preferences → Journal Entries Structure
Refer to this page for more details "Journal Entries Structure" page in ZenHR offers a powerful set of tools to customize and automate journal entry processes for payroll and accounting. Here’s a concise overview of what can be achieved:
- General Configuration:
- Match journal entries using clearing accounts, accrued salary differences, or employee-level data.
- Set the number of employees per journal (e.g., all employees or a specific limit).
- Choose detailed or summary journal types.
- Group entries by branch, department, or other criteria.
- Prevent deletion, editing, or resending of sent transactions.
- Deduct absences from the basic salary automatically.
- Off-Cycle Payments:
- Auto-generate separate journals for off-cycle payments and vacation in-advance salaries.
- Company Contributions and Expenses:
- Create separate journals for company contributions and expenses.
- Provisions Management:
- Automatically calculate employee provisions with payroll.
- Generate provision entries within payroll journals or as separate journals (by provision type or employee).
- Base calculations on cut-off dates or termination settlements.
- Cost Centers:
- Activate and auto-generate cost center journals with payroll.
- Create separate journals per cost center and exclude off-cycle payments.
- Select detailed or summary journal types.
- Bank Transfers:
- Activate bank transfer journals with customizable journal types (detailed or summary).
- Group entries by specific levels (e.g., branch or department).
- Exporting Journal Entries:
- Enable the journal entries exporter for easy data export.
This page provides a flexible, automated solution for managing journal entries, ensuring precision and alignment with organizational needs.

Step 2: Generate API Keys
- Go to Marketplace Integrations → Other Financial Integration Setup → Add API Keys.
Fill in the API key name, select the Authentication type, and make sure to fill in all of the required related fields.

Step 3: Set up Other Financial Integrations
- On ZenHR, click your user icon in the upper right corner and go to Marketplace Integrations → Other Financial Integration Setup.

- Enter the Name of the financial system.
- Activate the toggles in the Employee Data and Journal Entry sections.
- Add the Employee URL and the Journal entries URL retrieved from your financial system’s account.
- Then click “Save”.
Things needed to be done on ZenHR
To ensure proper integration between ZenHR and your financial system, the following configurations must be completed within ZenHR.
GL Accounts Page
Navigate to:Marketplace Integrations → Other Financial Integrations Setup → GL Accounts
On this page, and its related tabs (Incomes & Deductions, Company Expenses, Overview, Loans, Leaves and Vacations), enter the GL Account IDs matching those in your financial system. These IDs will appear in the journal entry JSON payload sent to your system. Here is an article that explains our main GLs GL Accounts ExplanationConnected People Page
Navigate to: Marketplace Integrations → Other Financial Integrations Setup → Connected People.For each employee, populate the Integration ID field with the internal employee ID from your financial system. This ensures employee JSON payloads include the correct identifiers.Organizational Levels Page
Navigate to:Marketplace Integrations → Other Financial Integrations Setup → Organizational Levels
For each organizational level, enter the corresponding internal ID from your financial system. These will be reflected in the organizational levels section of the journal entry JSON payload.Cost Centers Page (if applicable)
Navigate to:Marketplace Integrations → Other Financial Integrations Setup → Cost Centers
If your financial system uses cost centers, enter the relevant internal IDs here to ensure correct mapping in the exported data.
That’s it, your financial integration will now be complete! You can now post journal entries directly from ZenHR.
Posting Salaries From ZenHR to Other Financial Integrations:
To post salaries from ZenHR to Other Financial Integrations, follow these steps:
- On the left side of the page, go to Main Menu → Payroll → Manage Salaries.
- Filter the desired salary "Year" and "Month" for all employees, and click “Filter”.
- Then click “Send to (Other Financial Integration Name)”, and your salaries will be transferred as journals.


Post Off-Cycle Payments From ZenHR to Other Financial Integrations:
To auto-generate separate journals for off-cycle payments and post them with your payroll journal entries, follow these steps:
- Click your user icon in the upper right corner and go to System Preferences → Journal Entries Structure.
- Activate the Auto-generate separate journals for off-cycle payments checkbox and click “Save”.

- You can then post salaries from ZenHR to Other Financial Integrations, and the transferred journals will include separate journal entries for your off-cycle payments.
To manually generate your off-cycle payments journal entries, follow these steps:
Click your user icon in the upper right corner and go to System Preferences → Integration Setup → Financial Integrations → Journal Entries Structure.
Clear the Auto-generate separate journals for off-cycle payments checkbox and click “Save”.

- Go to Main Menu → Payroll → Manage Financial Transactions → Off-Cycle Payments
- Use the “Date from” and “to” filters to filter out the duration of the transactions you wish to include in your journal entries, and click “Filter”.
- In the Employee ID column, select the transactions you wish to include in your journal entries.
- Then click “Send to (Other Financial Integration Name)”, and your off-cycle payments will be transferred as journals.

Post Off-Cycle Vacation In-Advance Salaries From ZenHR to Other Financial Integrations
To auto-generate separate journals for off-cycle vacation in-advance salaries and post them with your payroll journal entries, follow these steps:
- Click your user icon in the upper right corner and go to System Preferences → Integration Setup → Financial Integrations → Journal Entries Structure
- Activate the Auto-generate separate journals for off-cycle vacation in-advance salaries checkbox and click “Save”.

- You can then post salaries from ZenHR to Other Financial Integrations, and the transferred journals will include separate journal entries for your off-cycle vacation in-advance salaries.
To manually generate your off-cycle vacation in-advance journal entries, follow these steps:
- Click your user icon in the upper right corner and go to System Preferences→ Journal Entries Structure.
- Clear the Auto-generate separate journals for off-cycle vacation in-advance checkbox.
- Then click “Save”.

- Go to Main Menu → Payroll → Manage Vacation In-Advance Salary.
- Filter out the vacation in-advance salaries that fall within a specific time period by using the “In-advance from date” and “In-advance to date” filters.
- Select “Off-cycle” in the Payroll status filter.
- In the Employee No olumn, select the in-advance salaries you wish to include in your exported journal entries. Or you can select all the filtered salaries by clicking the “Select all” checkbox.
- Then click “Send to (Other Financial Integration Name)”, and your off-cycle vacation in-advance salaries will be transferred as journals.

Other Financial Integrations Event Viewer
- To retry sending failed posts, go to User Menu → System Preferences → Marketplace Integration Setup → Financial Integrations →Other Financial Integrations.
- On the Event Viewer page, click “Retry” to send journal entries again.

Exporting Journal Entries
To activate the Journal Entries Exporter, follow these steps:
- Click your user icon in the upper right corner and go to User Menu → System Preferences → Integration Setup → Financial Integrations → Journal Entries Structure.
- On the Journal Entries Structure page, check the “Activate journal entries exporter” box, and click “Save”to activate the Journal Entries Exporter.

- Once it’s activated, the option to export your journal entries will appear on all related pages.
To export your payroll journal entries, follow these steps:
- Go to Main Menu → Payroll → Manage Financials → Manage Salaries.
- On the Manage Salaries page, filter out the year and month of the salaries you wish to export.
- Then click the “Export Journal Entries” button.

- A pop-up will then appear, click “Export” to export your payroll journal entries for the selected month according to your defined Journal Entries Structure.

To export your off-cycle payments journal entries, follow these steps:
- Go to Main Menu → Payroll → Manage Financials → Manage Financial Transactions → Off-Cycle Payments.
- Use the “Date from” and “to” filters to filter out the duration of the transactions you wish to include in your journal entries.
- In the Employee ID column, select the transactions you wish to include in your journal entries. Or select all the filtered transactions by clicking the “Select all” checkbox.
- Click on the “Export Journal Entries” button.

- A pop-up will then appear; click “Export” to export your selected off-cycle payments journal entries according to your defined Journal Entries Structure.

Note: Multiple off-cycle payment journal entries might be created based on the effective dates of the selected exported transactions.
To export your off-cycle vacation in-advance salaries journal entries, follow these steps:
- Go to Main Menu → Payroll → Manage Financials → Manage Vacation In-Advance Salary.
- Filter out the vacation in-advance salaries that fall within a specific time period by using the “In-advance from date” and “In-advance to date” filters.
- On the Payroll status filter, select “Off-cycle” and click “Apply Filters”.
- In the Employee No. column, select the in-advance salaries you wish to include in your exported journal entries. Or you can select all the filtered salaries by clicking the “Select all” checkbox.
- Click on the “Export Journal Entries” button.

- A pop-up will then appear, click “Export” to export your selected off-cycle vacation in-advance journal entries according to your defined Journal Entries Structure.

Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article