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 resultsid(TEXT, Optional): Filter by specific person IDemail(TEXT, Optional): Filter by email addressfirst_name(TEXT, Optional): Filter by first namelast_name(TEXT, Optional): Filter by last namepreferred_name(TEXT, Optional): Filter by preferred namecreated_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 employeelast_name(TEXT, Required): Last name of the employeeemail(TEXT, Optional): Email address of the employee. Must be unique across all employeespreferred_name(TEXT, Optional): The preferred name of the employee, if relevantgender(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 objectemployments(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 resultsid(TEXT, Optional): Filter by specific employment IDupdated_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 updatesupervisor(MULTI_LINE_TEXT, Optional): Supervisor object as JSONoffice(MULTI_LINE_TEXT, Optional): Office object as JSONorg_units(MULTI_LINE_TEXT, Optional): Organization units (department/team) as JSON arraylegal_entity(MULTI_LINE_TEXT, Optional): Legal entity object as JSONposition(MULTI_LINE_TEXT, Optional): Position object as JSONstatus(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 monthsweekly_working_hours(NUMBER, Optional): Number of hours worked weeklyfull_time_weekly_working_hours(NUMBER, Optional): Hours per week considered full time for this employmentcost_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 employeesfirst_name(TEXT, Optional): First name of the employeelast_name(TEXT, Optional): Last name of the employeepreferred_name(TEXT, Optional): The preferred name of the employee, if relevantgender(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 resultsid(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 identifiertype(TEXT, Required): Attendance period type: WORK or BREAKstart(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 periodproject_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 updatetype(TEXT, Optional): Attendance period type: WORK or BREAKstart(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 periodproject_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 identifierabsence_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 periodskip_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 typecategory(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 placeseffective_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
List legal entities
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
Get legal entity
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 recordstype(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 resultsid(TEXT, Optional): Filter by one or more absence period IDsabsence_type_id(TEXT, Optional): Filter by one or more absence type IDsperson_id(TEXT, Optional): Filter by one or more person IDsstarts_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 updatestarts_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 periodskip_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 periodlimit(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 documentscategory_id(TEXT, Optional): The ID of the category in which the documents belongcreated_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 monthend_date(TEXT, Optional): End date for compensations (YYYY-MM-DD). Duration with start_date must be ≤ 1 monthperson_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 resultsupdated_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 resultsupdated_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 resultsupdated_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, -namelimit(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, -namelimit(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
Troubleshooting
Support
For additional help with the Personio integration, contact [email protected]

