Skip to main content

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: HR & Recruiting Availability: All workspace plans

Available Actions

List persons

personio.list_employees
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 the operation result

Get person

personio.get_employee
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 operation result

Create person

personio.create_person
Create a new person and employment. Requires Confirmation: No Parameters:
  • first_name (TEXT, Required): First name of the employee (required).
  • last_name (TEXT, Required): Last name of the employee (required).
  • 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: [{“id”: “attribute_name”, “value”: “attribute_value”}] or object: {“attribute_name”: “value”}
  • employments (MULTI_LINE_TEXT, Optional): Employment details as JSON array. Leave empty to create default employment. Example: [{“position”: “Developer”, “department”: “Engineering”}]
Output: Returns the operation result

Delete person

personio.delete_person
Delete a person. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The unique identifier of the employee to delete (e.g. “12345678”).
Output: Returns the operation result

List employments

personio.list_employments
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 the operation result

Get employment

personio.get_employment
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 operation result

Update employment

personio.update_employment
Update an employment record. Requires Confirmation: No 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 (e.g. {“id”: “123456”}).
  • 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). Set either this or probation_period_length.
  • probation_period_length (NUMBER, Optional): Length of probation period in months. Set either this or probation_end_date.
  • 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 operation result

Update person

personio.update_employee
Update a person’s information. Requires Confirmation: No 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: [{“id”: “attribute_name”, “value”: “attribute_value”}] or object: {“attribute_name”: “value”}
Output: Returns the operation result

Get attendance

personio.get_attendance
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 the operation result

Get attendance period

personio.get_attendance_period
Retrieve a single attendance period by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the attendance period to retrieve (required).
Output: Returns the operation result

Create attendance

personio.create_attendance
Create a new attendance entry for an employee. Requires Confirmation: No Parameters:
  • person_id (TEXT, Required): The person’s unique identifier (required).
  • type (TEXT, Required): Attendance period type: WORK or BREAK (required).
  • start (MULTI_LINE_TEXT, Required): Start date/time as JSON: {“date_time”: “2024-01-01T09:00:00”} (required).
  • end (MULTI_LINE_TEXT, Optional): End date/time as JSON: {“date_time”: “2024-01-01T17:00:00”} (optional, null for open periods).
  • 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 operation result

Update attendance period

personio.update_attendance_period
Update an attendance period by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the attendance period to update (required).
  • 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 operation result

Delete attendance period

personio.delete_attendance_period
Delete an attendance period by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the attendance period to delete (required).
Output: Returns the operation result

Create absence period

personio.create_absence
Creates a new absence period Requires Confirmation: No Parameters:
  • person_id (TEXT, Required): The person’s unique identifier (required)
  • absence_type_id (TEXT, Required): The ID of the absence type (UUID format, required)
  • starts_from (MULTI_LINE_TEXT, Required): Start of absence as JSON: {“date_time”: “2025-12-29T00:00:00”, “type”: “FIRST_HALF”} (required)
  • ends_at (MULTI_LINE_TEXT, Optional): End of absence as JSON: {“date_time”: “2026-01-01T00:00:00”, “type”: “SECOND_HALF”} (optional, null for ongoing)
  • 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 operation result

List compensation types

personio.list_compensation_types
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 the operation result

Create compensation type

personio.create_compensation_type
Creates a new compensation type that can be used when creating compensations. Requires Confirmation: No Parameters:
  • name (TEXT, Required): Name of the compensation type (required).
  • category (TEXT, Required): Payout frequency: ONE_TIME or RECURRING (required).
Output: Returns the operation result

Create compensation

personio.create_compensation
Creates a compensation for an employee (one-time, recurring, fixed, or hourly). Bonuses not supported. Requires Confirmation: No Parameters:
  • person_id (TEXT, Required): The person ID or person object as JSON {“id”: “12345678”} (required).
  • type_id (TEXT, Required): The compensation type ID or type object as JSON {“id”: “uuid”} (required).
  • value (NUMBER, Required): Amount in currency’s numeric unit with up to 2 decimal places (required).
  • effective_from (TEXT, Required): The effective start date of the compensation (YYYY-MM-DD) (required).
  • 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 operation result
personio.list_legal_entities
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 the operation result
personio.get_legal_entity
Retrieves a single legal entity by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the legal entity to retrieve (required).
Output: Returns the operation result

Get org unit

personio.get_org_unit
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 (required).
  • type (TEXT, Required): The type of the Org Unit (e.g. team or department) (required).
  • include_parent_chain (BOOLEAN, Optional): Include the parent org unit chain in the response (default: false).
Output: Returns the operation result

List absence periods

personio.list_absence_periods
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 the operation result

Get absence period

personio.get_absence_period
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 (required).
Output: Returns the operation result

Update absence period

personio.update_absence_period
Updates an absence period by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the absence period to update (required).
  • 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 operation result

Delete absence period

personio.delete_absence_period
Deletes an absence period by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the absence period to delete (required).
Output: Returns the operation result

Get absence period breakdowns

personio.get_absence_period_breakdowns
Retrieves daily breakdowns for an absence period. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the absence period (required).
  • 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 the operation result

Get time off types

personio.get_time_off_types
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 the operation result

Get absence type

personio.get_absence_type
Retrieves an absence type by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The ID of the absence type (UUID format, required).
Output: Returns the operation result

List documents

personio.list_documents
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 (required).
  • 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 the operation result

Delete document

personio.delete_document
Deletes a document with the provided document ID. Requires Confirmation: No Parameters:
  • document_id (TEXT, Required): The ID of the document to delete (required).
Output: Returns the operation result

List compensations

personio.list_compensations
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 the operation result

Search person by email

personio.search_employee_by_email
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 operation result

Get time off balance

personio.get_time_off_balance
Get the time off balance for a person. Requires Confirmation: No Parameters:
  • employeeId (TEXT, Required): The unique identifier of the employee.
Output: Returns the operation result

Get custom attributes

personio.get_custom_attributes
Get the list of custom attributes defined in Personio. Requires Confirmation: No Parameters: None Output: Returns the operation result

List applications

personio.list_applications
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 the operation result

Get application

personio.get_application
Retrieve a recruiting application by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The unique identifier of the application.
Output: Returns the operation result

Get application stage transitions

personio.get_application_stage_transitions
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 operation result

List candidates

personio.list_candidates
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 the operation result

Get candidate

personio.get_candidate
Retrieve a recruiting candidate by ID. Requires Confirmation: Yes Parameters:
  • id (TEXT, Required): The unique identifier of the candidate.
Output: Returns the operation result

List jobs

personio.list_jobs
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 the operation result

Get job

personio.get_job
Retrieve a recruiting job by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The unique identifier of the job.
Output: Returns the operation result

List job categories

personio.list_job_categories
Get all recruiting job categories. Requires Confirmation: No Parameters: None Output: Returns the operation result

Get job category

personio.get_job_category
Retrieve a recruiting job category by ID. Requires Confirmation: No Parameters:
  • id (TEXT, Required): The unique identifier of the job category.
Output: Returns the operation result

List cost centers

personio.list_cost_centers
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 the operation result

List workplaces

personio.list_workplaces
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 the operation result