OpenAPI Specification
openapi: 3.1.0
info:
title: Personio Public API v2 Absence Periods Persons API
description: 'Next-generation Personio Public API for HR management data including
persons, absence periods, projects, and webhooks. Authenticates via OAuth
2.0 Client Credentials Grant: exchange a Client ID and Secret at
POST /v2/auth/token for a short-lived Bearer access token, then include
it in the Authorization header of subsequent calls.
Only a representative subset of the public v2 surface (persons, absence
periods, projects, webhooks) is modeled here. See the API reference
linked under externalDocs for the full catalog.
'
version: 1.0.0
contact:
name: Personio Developer Hub
url: https://developer.personio.de/
license:
name: Personio Proprietary
servers:
- url: https://api.personio.de/v2
description: Personio Public API v2 production base URL
security:
- bearerAuth: []
tags:
- name: Persons
description: Manage person (employee) records.
paths:
/persons:
get:
tags:
- Persons
summary: List persons
description: Returns a paginated list of persons (employees).
operationId: listPersons
parameters:
- in: query
name: limit
schema:
type: integer
default: 50
- in: query
name: cursor
schema:
type: string
description: Opaque pagination cursor.
responses:
'200':
description: A page of persons.
content:
application/json:
schema:
$ref: '#/components/schemas/PersonList'
'401':
description: Missing or invalid access token.
post:
tags:
- Persons
summary: Create a person
description: 'Creates a new Person resource and an associated Employment resource.
'
operationId: createPerson
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PersonCreate'
responses:
'201':
description: Person created.
content:
application/json:
schema:
$ref: '#/components/schemas/Person'
/persons/{person_id}:
parameters:
- in: path
name: person_id
required: true
schema:
type: string
description: Personio person identifier.
patch:
tags:
- Persons
summary: Update a person
description: Modifies an existing person record.
operationId: patchPerson
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: Person updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Person'
'404':
description: Person not found.
components:
schemas:
PersonCreate:
type: object
required:
- first_name
- last_name
- email
properties:
first_name:
type: string
last_name:
type: string
email:
type: string
format: email
employment:
type: object
description: Associated employment details.
additionalProperties: true
PersonList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Person'
meta:
type: object
properties:
next_cursor:
type: string
Person:
type: object
properties:
id:
type: string
first_name:
type: string
last_name:
type: string
email:
type: string
format: email
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: 'Bearer access token obtained from POST /v2/auth/token using the
OAuth 2.0 Client Credentials grant.
'
externalDocs:
description: Personio Developer Hub
url: https://developer.personio.de/