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

Getting Started:
  1. Enable the Personio integration in your workspace settings
  2. Authenticate using API Key
  3. Test the connection with a simple read operation
  4. Explore available actions for your use case
Important Considerations:
  • Ensure proper authentication credentials
  • Respect rate limits and API quotas
  • Review data privacy settings
  • Test operations in a safe environment first

Troubleshooting

IssueSolution
Authentication failedVerify your API Key credentials
Rate limit exceededReduce request frequency
Data not foundCheck permissions and data availability
Connection timeoutVerify network connectivity

Support

For additional help with the Personio integration, contact support@langdock.com