Personio

Overview

All-in-one HR software for managing employees, attendance, time accounts, and performance. Through Langdock’s integration, you can access and manage Personio directly from your conversations.

Authentication: API Key Category: CRM & Customer Support Availability: All workspace plans

Available Actions

List persons

personio.listpersons

Get a list of persons with optional filters Requires Confirmation: No Parameters:

  • limit (NUMBER, Optional): Number of persons to return per page (1-50, default: 10)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

  • id (TEXT, Optional): Filter by specific person ID

  • email (TEXT, Optional): Filter by email address

  • first_name (TEXT, Optional): Filter by first name

  • last_name (TEXT, Optional): Filter by last name

  • preferred_name (TEXT, Optional): Filter by preferred name

  • created_at (TEXT, Optional): Filter by creation date (YYYY-MM-DD)

  • created_at_gt (TEXT, Optional): Filter persons created after this date (YYYY-MM-DD)

  • created_at_lt (TEXT, Optional): Filter persons created before this date (YYYY-MM-DD)

  • updated_at (TEXT, Optional): Filter by updated date (YYYY-MM-DD)

  • updated_at_gt (TEXT, Optional): Filter persons updated after this date (YYYY-MM-DD)

  • updated_at_lt (TEXT, Optional): Filter persons updated before this date (YYYY-MM-DD)

Output: Returns a list of persons with their details including ID, name, email, and employment information


Get person

personio.getperson

Retrieve a single person by ID Requires Confirmation: No Parameters:

  • id (TEXT, Required): The unique identifier of the employee (e.g. “12345678”)

Output: Returns the specific person details


Create person

personio.createperson

Create a new person and employment Requires Confirmation: Yes Parameters:

  • first_name (TEXT, Required): First name of the employee

  • last_name (TEXT, Required): Last name of the employee

  • email (TEXT, Optional): Email address of the employee. Must be unique across all employees

  • preferred_name (TEXT, Optional): The preferred name of the employee, if relevant

  • gender (TEXT, Optional): Gender of the employee (e.g. MALE, FEMALE, DIVERSE)

  • language_code (TEXT, Optional): Main language of the employee (e.g. ‘de’ for German, ‘en’ for English)

  • custom_attributes (MULTI_LINE_TEXT, Optional): Custom attributes as JSON array or object

  • employments (MULTI_LINE_TEXT, Optional): Employment details as JSON array

Output: Returns the created person with their ID and details


Delete person

personio.deleteperson

Delete a person Requires Confirmation: Yes Parameters:

  • id (TEXT, Required): The unique identifier of the employee to delete (e.g. “12345678”)

Output: Confirmation of deletion


List employments

personio.listemployments

List employments of a given person Requires Confirmation: No Parameters:

  • person_id (TEXT, Required): The unique identifier of the person (e.g. “12345678”)

  • limit (NUMBER, Optional): Number of employments to return per page (1-50, default: 10)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

  • id (TEXT, Optional): Filter by specific employment ID

  • updated_at (TEXT, Optional): Filter by updated date (YYYY-MM-DD)

  • updated_at_gt (TEXT, Optional): Filter employments updated after this date (YYYY-MM-DD)

  • updated_at_lt (TEXT, Optional): Filter employments updated before this date (YYYY-MM-DD)

Output: Returns a list of employments for the specified person


Get employment

personio.getemployment

Retrieve a single employment by ID Requires Confirmation: No Parameters:

  • person_id (TEXT, Required): The unique identifier of the person (e.g. “12345678”)

  • id (TEXT, Required): The unique identifier of the employment (e.g. “98765432”)

Output: Returns the specific employment details


Update employment

personio.updateemployment

Update an employment record Requires Confirmation: Yes Parameters:

  • person_id (TEXT, Required): The unique identifier of the person (e.g. “12345678”)

  • employment_id (TEXT, Required): The unique identifier of the employment to update

  • supervisor (MULTI_LINE_TEXT, Optional): Supervisor object as JSON

  • office (MULTI_LINE_TEXT, Optional): Office object as JSON

  • org_units (MULTI_LINE_TEXT, Optional): Organization units (department/team) as JSON array

  • legal_entity (MULTI_LINE_TEXT, Optional): Legal entity object as JSON

  • position (MULTI_LINE_TEXT, Optional): Position object as JSON

  • status (TEXT, Optional): Employment status (e.g. ACTIVE, INACTIVE)

  • employment_start_date (TEXT, Optional): When the employment contract starts (YYYY-MM-DD)

  • type (TEXT, Optional): Type of employment (e.g. INTERNAL, EXTERNAL)

  • contract_end_date (TEXT, Optional): When the employment contract ends, if temporary (YYYY-MM-DD)

  • probation_end_date (TEXT, Optional): When the probation period ends (YYYY-MM-DD)

  • probation_period_length (NUMBER, Optional): Length of probation period in months

  • weekly_working_hours (NUMBER, Optional): Number of hours worked weekly

  • full_time_weekly_working_hours (NUMBER, Optional): Hours per week considered full time for this employment

  • cost_centers (MULTI_LINE_TEXT, Optional): Weight distribution between cost centers as JSON array with percentages

Output: Returns the updated employment details


Update person

personio.updateperson

Update a person’s information Requires Confirmation: Yes Parameters:

  • id (TEXT, Required): The unique identifier of the employee to update (e.g. “12345678”)

  • email (TEXT, Optional): Email address of the employee. Must be unique across all employees

  • first_name (TEXT, Optional): First name of the employee

  • last_name (TEXT, Optional): Last name of the employee

  • preferred_name (TEXT, Optional): The preferred name of the employee, if relevant

  • gender (TEXT, Optional): Gender of the employee (e.g. MALE, FEMALE, DIVERSE)

  • language_code (TEXT, Optional): Main language of the employee (e.g. ‘de’ for German, ‘en’ for English)

  • custom_attributes (MULTI_LINE_TEXT, Optional): Custom attributes as JSON array or object

Output: Returns the updated person details


Get attendance

personio.getattendance

Get attendance records with date range and employee filtering Requires Confirmation: No Parameters:

  • limit (NUMBER, Optional): Maximum number of attendance periods to return (1-100, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

  • id (TEXT, Optional): Filter by attendance period IDs (comma-separated for multiple)

  • person_id (TEXT, Optional): Filter by person IDs (comma-separated for multiple)

  • start_gte (TEXT, Optional): Filter periods starting from this date-time (ISO-8601)

  • start_lte (TEXT, Optional): Filter periods starting before or at this date-time (ISO-8601)

  • end_lte (TEXT, Optional): Filter periods ending before or at this date-time (ISO-8601)

  • end_gte (TEXT, Optional): Filter periods ending after or at this date-time (ISO-8601)

  • updated_at_gte (TEXT, Optional): Filter periods updated after or at this date-time (ISO-8601)

  • updated_at_lte (TEXT, Optional): Filter periods updated before or at this date-time (ISO-8601)

  • status (TEXT, Optional): Filter by attendance period status

Output: Returns a list of attendance records with details


Get attendance period

personio.getattendanceperiod

Retrieve a single attendance period by ID Requires Confirmation: No Parameters:

  • id (TEXT, Required): The ID of the attendance period to retrieve

Output: Returns the specific attendance period details


Create attendance

personio.createattendance

Create a new attendance entry for an employee Requires Confirmation: Yes Parameters:

  • person_id (TEXT, Required): The person’s unique identifier

  • type (TEXT, Required): Attendance period type: WORK or BREAK

  • start (MULTI_LINE_TEXT, Required): Start date/time as JSON: {"date_time": "2024-01-01T09:00:00"}

  • end (MULTI_LINE_TEXT, Optional): End date/time as JSON: {"date_time": "2024-01-01T17:00:00"}

  • comment (TEXT, Optional): Optional comment for the attendance period

  • project_id (TEXT, Optional): Project ID (only for WORK periods, must be ACTIVE)

  • skip_approval (BOOLEAN, Optional): Skip any approval that this request would otherwise require (default: false)

Output: Returns the created attendance record


Update attendance period

personio.updateattendanceperiod

Update an attendance period by ID Requires Confirmation: Yes Parameters:

  • id (TEXT, Required): The ID of the attendance period to update

  • type (TEXT, Optional): Attendance period type: WORK or BREAK

  • start (MULTI_LINE_TEXT, Optional): Start date/time as JSON: {"date_time": "2024-01-01T09:00:00"}

  • end (MULTI_LINE_TEXT, Optional): End date/time as JSON: {"date_time": "2024-01-01T17:00:00"}

  • comment (TEXT, Optional): Optional comment for the attendance period

  • project_id (TEXT, Optional): Project ID (only for WORK periods, must be ACTIVE, or null to remove)

  • skip_approval (BOOLEAN, Optional): Skip any approval that this request would otherwise require (default: false)

Output: Returns the updated attendance period details


Delete attendance period

personio.deleteattendanceperiod

Delete an attendance period by ID Requires Confirmation: Yes Parameters:

  • id (TEXT, Required): The ID of the attendance period to delete

Output: Confirmation of deletion


Create absence period

personio.createabsenceperiod

Creates a new absence period Requires Confirmation: Yes Parameters:

  • person_id (TEXT, Required): The person’s unique identifier

  • absence_type_id (TEXT, Required): The ID of the absence type (UUID format)

  • starts_from (MULTI_LINE_TEXT, Required): Start of absence as JSON: {"date_time": "2025-12-29T00:00:00", "type": "FIRST_HALF"}

  • ends_at (MULTI_LINE_TEXT, Optional): End of absence as JSON: {"date_time": "2026-01-01T00:00:00", "type": "SECOND_HALF"}

  • comment (TEXT, Optional): Optional comment for the absence period

  • skip_approval (BOOLEAN, Optional): Skip any approval that this request would otherwise require (default: false)

Output: Returns the created absence period details


List compensation types

personio.listcompensationtypes

Returns a list of compensation types including one-time and recurring types Requires Confirmation: No Parameters:

  • limit (NUMBER, Optional): Number of compensation types to return per page (1-100, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns a list of compensation types


Create compensation type

personio.createcompensationtype

Creates a new compensation type that can be used when creating compensations Requires Confirmation: Yes Parameters:

  • name (TEXT, Required): Name of the compensation type

  • category (TEXT, Required): Payout frequency: ONE_TIME or RECURRING

Output: Returns the created compensation type details


Create compensation

personio.createcompensation

Creates a compensation for an employee (one-time, recurring, fixed, or hourly). Bonuses not supported Requires Confirmation: Yes Parameters:

  • person_id (TEXT, Required): The person ID or person object as JSON {"id": "12345678"}

  • type_id (TEXT, Required): The compensation type ID or type object as JSON {"id": "uuid"}

  • value (NUMBER, Required): Amount in currency’s numeric unit with up to 2 decimal places

  • effective_from (TEXT, Required): The effective start date of the compensation (YYYY-MM-DD)

  • interval (TEXT, Optional): Payout interval: MONTHLY, YEARLY (mandatory for RECURRING, ignored for ONE_TIME)

  • comment (TEXT, Optional): Optional comment about this compensation

Output: Returns the created compensation details


personio.listlegalentities

Returns a list of legal entities for the company, sorted by creation date Requires Confirmation: No Parameters:

  • id (TEXT, Optional): Filter by one or more legal entity IDs (comma-separated for multiple)

  • country (TEXT, Optional): Filter by country codes (comma-separated for multiple, e.g. DE,US)

  • limit (NUMBER, Optional): Number of legal entities to return per page (1-100, default: 20)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns a list of legal entities


personio.getlegalentity

Retrieves a single legal entity by ID Requires Confirmation: No Parameters:

  • id (TEXT, Required): The ID of the legal entity to retrieve

Output: Returns the specific legal entity details


Get org unit

personio.getorgunit

Retrieves an organizational unit (team or department) by ID. Get org unit IDs from list_employments or get_employment responses Requires Confirmation: No Parameters:

  • id (TEXT, Required): The ID of the Org Unit to retrieve. Get this from list_employments or employment records

  • type (TEXT, Required): The type of the Org Unit (e.g. team or department)

  • include_parent_chain (BOOLEAN, Optional): Include the parent org unit chain in the response (default: false)

Output: Returns the organizational unit details


List absence periods

personio.listabsenceperiods

Returns a list of absence periods with pagination and filtering Requires Confirmation: No Parameters:

  • limit (NUMBER, Optional): Maximum number of absence periods to return (1-100, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

  • id (TEXT, Optional): Filter by one or more absence period IDs

  • absence_type_id (TEXT, Optional): Filter by one or more absence type IDs

  • person_id (TEXT, Optional): Filter by one or more person IDs

  • starts_from_gte (TEXT, Optional): Filter periods starting from this date-time (inclusive, ISO-8601)

  • starts_from_lte (TEXT, Optional): Filter periods starting before or at this date-time (ISO-8601)

  • ends_at_lte (TEXT, Optional): Filter periods ending before or at this date-time (ISO-8601)

  • ends_at_gte (TEXT, Optional): Filter periods ending after or at this date-time (ISO-8601)

  • updated_at_gte (TEXT, Optional): Filter periods updated after or at this date-time (ISO-8601)

  • updated_at_lte (TEXT, Optional): Filter periods updated before or at this date-time (ISO-8601)

Output: Returns a list of absence periods


Get absence period

personio.getabsenceperiod

Retrieves an absence period by ID. Get absence period IDs from list_absence_periods or create_absence responses Requires Confirmation: No Parameters:

  • id (TEXT, Required): The ID of the absence period to retrieve. Get this from list_absence_periods or create_absence responses

Output: Returns the specific absence period details


Update absence period

personio.updateabsenceperiod

Updates an absence period by ID Requires Confirmation: Yes Parameters:

  • id (TEXT, Required): The ID of the absence period to update

  • starts_from (MULTI_LINE_TEXT, Optional): Start of absence period as JSON object: {"date_time": "2025-12-29T00:00:00", "type": "FIRST_HALF"}

  • ends_at (MULTI_LINE_TEXT, Optional): End of absence period as JSON object: {"date_time": "2026-01-01T00:00:00", "type": "SECOND_HALF"}

  • comment (TEXT, Optional): Optional comment for the absence period

  • skip_approval (BOOLEAN, Optional): Skip any approval that this update would otherwise require (default: false)

Output: Returns the updated absence period details


Delete absence period

personio.deleteabsenceperiod

Deletes an absence period by ID Requires Confirmation: Yes Parameters:

  • id (TEXT, Required): The ID of the absence period to delete

Output: Confirmation of deletion


Get absence period breakdowns

personio.getabsenceperiodbreakdowns

Retrieves daily breakdowns for an absence period Requires Confirmation: No Parameters:

  • id (TEXT, Required): The ID of the absence period

  • limit (NUMBER, Optional): Number of breakdown days to return (1-28, default: 28)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns daily breakdowns for the absence period


Get time off types

personio.gettimeofftypes

Get all available time off types Requires Confirmation: No Parameters:

  • limit (NUMBER, Optional): Maximum number of absence types to return (1-100, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns a list of time off types


Get absence type

personio.getabsencetype

Retrieves an absence type by ID Requires Confirmation: No Parameters:

  • id (TEXT, Required): The ID of the absence type (UUID format)

Output: Returns the specific absence type details


List documents

personio.listdocuments

Lists the metadata of documents belonging to the provided owner ID Requires Confirmation: No Parameters:

  • owner_id (TEXT, Required): The ID of the owner of the documents

  • category_id (TEXT, Optional): The ID of the category in which the documents belong

  • created_at_gte (TEXT, Optional): Filter documents created on or after this date (YYYY-MM-DD)

  • created_at_lt (TEXT, Optional): Filter documents created before this date (YYYY-MM-DD)

  • limit (NUMBER, Optional): Number of documents to return (1-200, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns a list of documents


Delete document

personio.deletedocument

Deletes a document with the provided document ID Requires Confirmation: Yes Parameters:

  • document_id (TEXT, Required): The ID of the document to delete

Output: Confirmation of deletion


List compensations

personio.listcompensations

Returns payroll compensations including salary, hourly, one-time, recurring, and bonuses Requires Confirmation: No Parameters:

  • start_date (TEXT, Optional): Start date for compensations (YYYY-MM-DD). Duration with end_date must be ≤ 1 month

  • end_date (TEXT, Optional): End date for compensations (YYYY-MM-DD). Duration with start_date must be ≤ 1 month

  • person_id (TEXT, Optional): Filter by one or more person IDs (comma-separated for multiple)

  • legal_entity_id (TEXT, Optional): Filter by one or more legal entity IDs (comma-separated for multiple)

  • limit (NUMBER, Optional): Number of compensations to return per page (1-100, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns a list of compensations


Search person by email

personio.searchpersonbyemail

Find a person by their email address Requires Confirmation: No Parameters:

  • email (TEXT, Required): The email address of the employee to search for

Output: Returns the person details if found


Get time off balance

personio.gettimeoffbalance

Get the time off balance for a person Requires Confirmation: No Parameters:

  • employeeId (TEXT, Required): The unique identifier of the employee

Output: Returns the time off balance details


Get custom attributes

personio.getcustomattributes

Get the list of custom attributes defined in Personio Requires Confirmation: No Parameters: None

Output: Returns a list of custom attributes


List applications

personio.listapplications

Get a list of recruiting applications with optional filters Requires Confirmation: No Parameters:

  • limit (NUMBER, Optional): Number of applications to return (1-200, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

  • updated_at_lt (TEXT, Optional): Return applications updated before this date/time (ISO 8601 format). Cannot be used with ‘Updated after’

  • updated_at_gt (TEXT, Optional): Return applications updated after this date/time (ISO 8601 format). Cannot be used with ‘Updated before’

  • candidate_email (TEXT, Optional): Filter applications by candidate email address

Output: Returns a list of recruiting applications


Get application

personio.getapplication

Retrieve a recruiting application by ID Requires Confirmation: No Parameters:

  • id (TEXT, Required): The unique identifier of the application

Output: Returns the specific application details


Get application stage transitions

personio.getapplicationstagetransitions

Get the history of stage transitions for a recruiting application Requires Confirmation: No Parameters:

  • id (TEXT, Required): The unique identifier of the application

Output: Returns the stage transition history


List candidates

personio.listcandidates

Get a list of recruiting candidates with optional filters Requires Confirmation: Yes Parameters:

  • limit (NUMBER, Optional): Number of candidates to return (1-200, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

  • updated_at_lt (TEXT, Optional): Return candidates updated before this date/time (ISO 8601 format). Cannot be used with ‘Updated after’

  • updated_at_gt (TEXT, Optional): Return candidates updated after this date/time (ISO 8601 format). Cannot be used with ‘Updated before’

  • email (TEXT, Optional): Filter candidates by email address

Output: Returns a list of recruiting candidates


Get candidate

personio.getcandidate

Retrieve a recruiting candidate by ID Requires Confirmation: Yes Parameters:

  • id (TEXT, Required): The unique identifier of the candidate

Output: Returns the specific candidate details


List jobs

personio.listjobs

Get a list of recruiting jobs with optional filters Requires Confirmation: No Parameters:

  • limit (NUMBER, Optional): Number of jobs to return (1-200, default: 100)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

  • updated_at_lt (TEXT, Optional): Return jobs updated before this date/time (ISO 8601 format). Cannot be used with ‘Updated after’

  • updated_at_gt (TEXT, Optional): Return jobs updated after this date/time (ISO 8601 format). Cannot be used with ‘Updated before’

Output: Returns a list of recruiting jobs


Get job

personio.getjob

Retrieve a recruiting job by ID Requires Confirmation: No Parameters:

  • id (TEXT, Required): The unique identifier of the job

Output: Returns the specific job details


List job categories

personio.listjobcategories

Get all recruiting job categories Requires Confirmation: No Parameters: None

Output: Returns a list of job categories


Get job category

personio.getjobcategory

Retrieve a recruiting job category by ID Requires Confirmation: No Parameters:

  • id (TEXT, Required): The unique identifier of the job category

Output: Returns the specific job category details


List cost centers

personio.listcostcenters

Get a list of cost centers with filtering, sorting, and pagination Requires Confirmation: Yes Parameters:

  • id (TEXT, Optional): Filter by one or more cost center IDs (comma-separated)

  • name (TEXT, Optional): Filter by one or more cost center names (comma-separated)

  • sort (TEXT, Optional): Sort results by field. Use field name for ascending (e.g., ‘name’) or minus sign for descending (e.g., ‘-name’). Options: id, -id, name, -name

  • limit (NUMBER, Optional): Number of cost centers to return (1-100, default: 50)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns a list of cost centers


List workplaces

personio.listworkplaces

Get a list of workplaces with filtering, sorting, and pagination Requires Confirmation: No Parameters:

  • id (TEXT, Optional): Filter by one or more workplace IDs (comma-separated)

  • name (TEXT, Optional): Filter by one or more workplace names (comma-separated)

  • sort (TEXT, Optional): Sort results by field. Use field name for ascending (e.g., ‘name’) or minus sign for descending (e.g., ‘-name’). Options: id, -id, name, -name

  • limit (NUMBER, Optional): Number of workplaces to return (1-100, default: 50)

  • cursor (TEXT, Optional): Pagination cursor for next page of results

Output: Returns a list of workplaces


Common Use Cases

  • Data Management Manage and organize your Personio data

  • Automation Automate workflows with Personio

  • Reporting Generate insights and reports

  • Integration Connect Personio with other tools

Best Practices

1

Getting Started

  • Enable the Personio integration in your workspace settings

  • Authenticate using API Key

  • Test the connection with a simple read operation

  • Explore available actions for your use case

2

Important Considerations

  • Ensure proper authentication credentials

  • Respect rate limits and API quotas

  • Review data privacy settings

  • Test operations in a safe environment first

Troubleshooting

chevron-rightAuthentication failedhashtag

Verify your API Key credentials.

chevron-rightRate limit exceededhashtag

Reduce request frequency.

chevron-rightData not foundhashtag

Check permissions and data availability.

chevron-rightConnection timeouthashtag

Verify network connectivity.

Support

For additional help with the Personio integration, contact [email protected]envelope