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
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)
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”)
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
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”)
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)
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”)
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
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
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
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
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)
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)
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
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)
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
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
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
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
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
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)
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)
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
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)
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
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
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
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)
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
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
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
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
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
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
Get application
personio.getapplication
Retrieve a recruiting application by ID
Requires Confirmation: No
Parameters:
id
(TEXT, Required): The unique identifier of the application
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
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
Get candidate
personio.getcandidate
Retrieve a recruiting candidate by ID
Requires Confirmation: Yes
Parameters:
id
(TEXT, Required): The unique identifier of the candidate
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’
Get job
personio.getjob
Retrieve a recruiting job by ID
Requires Confirmation: No
Parameters:
id
(TEXT, Required): The unique identifier of the job
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
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
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
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:
- 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
Important Considerations:
- Ensure proper authentication credentials
- Respect rate limits and API quotas
- Review data privacy settings
- Test operations in a safe environment first
Troubleshooting
Issue | Solution |
---|---|
Authentication failed | Verify your API Key credentials |
Rate limit exceeded | Reduce request frequency |
Data not found | Check permissions and data availability |
Connection timeout | Verify network connectivity |