> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anny.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Personio with anny

> Cancel bookings on absence automatically and create absences from bookings in Personio.

[Personio](https://www.personio.de/) is an all-in-one HR software for personnel management, recruiting, payroll, and absence management. With the integration, anny can detect absences from Personio and react to them.

With Personio, you can in anny:

* Automatically cancel bookings when employees are marked as absent in Personio
* Create absences in Personio when employees book specific resources in anny (for example, home office)
* Configure absence rules individually per absence type and resource

The integration is especially handy when your team manages hybrid workspaces through anny and absences are maintained centrally in Personio.

## Typical use cases

| Use case                             | Description                                                                                                                                                                |
| :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Automatic cancellation on sick leave | **Bookings are cancelled automatically when a sick note exists in Personio.** Employees don't have to cancel bookings manually, and blocked resources are freed up.        |
| Track home office days               | **Bookings of a specific resource automatically create an absence in Personio.** This way, home office days are recorded in the HR system, without maintaining data twice. |
| Vacation with resource release       | **On approved vacation in Personio, all bookings within the vacation period are cancelled.** Meeting rooms and desks become available for other employees.                 |

## How the Personio connection works

Authentication runs via OAuth with a client ID and client secret that you generate in Personio. This authorizes anny to read employee data and absences and to create absences. If the credentials become invalid (for example, because they were deleted in Personio), synchronization pauses until you successfully verify the authentication in anny again.

| Data                          | Direction       | Frequency                    |
| ----------------------------- | --------------- | ---------------------------- |
| Absences (cancellation rules) | Personio → anny | Hourly (automatic) or manual |
| Absences (creation rules)     | anny → Personio | On booking (real time)       |

<Warning>
  Synchronization only checks absences that start on the current day. Future absences (for example, a vacation next week) are only detected and processed on the relevant day, not in advance.
</Warning>

## Connect Personio

### Requirements

Before you connect Personio, make sure you have the following:

* In Personio: admin access with permission to create API credentials under **Settings > Integrations > API credentials**
* In Personio: the following API scopes must be enabled:
  * Read employees
  * Read/edit absences
  * Read/edit attendances
  * Read/edit webhooks
* In anny: admin role in the organization

### Set up the connection

<Steps>
  <Step title="Open the integration">
    Open **Integrations** from the sidebar and go to **Personio**.
  </Step>

  <Step title="Generate API credentials in Personio">
    Log in to Personio and navigate to **Settings > Integrations > API credentials**.

    1. Click **Add new credentials**
    2. Enter a name, for example "anny API key"
    3. Choose the integration **Other**
    4. Enable the scopes: Read employees, Read/edit absences, Read/edit attendances, Read/edit webhooks
    5. Click **Generate new credentials**
  </Step>

  <Step title="Verify authentication in anny">
    Enter the generated client ID and client secret into the **Client ID** and **Client Secret** fields in anny and click **Verify authentication**.
  </Step>

  <Step title="Configure rules">
    After successful authentication, set up the rules you want (see Settings & options).
  </Step>
</Steps>

Once the connection is active, you can configure cancellation rules and absence creation rules.

### Settings & options

The Personio integration offers two rule types that are configured independently of each other.

#### Cancellation of bookings through absences

Define which absence types cancel bookings automatically.

<Steps>
  <Step title="Add a new rule">
    In the **Cancellation of bookings through absences** section, click **Add**.
  </Step>

  <Step title="Select the absence type">
    Choose one or more absence types from Personio (for example, sick leave, vacation).
  </Step>

  <Step title="Add a restriction (optional)">
    Without a restriction, the rule applies to all resources. Via **Add restriction**, you can limit the rule to a resource, group, or category. If you choose a resource with sub-resources, the rule applies to its sub-resources. For multiple restrictions, create multiple rules.
  </Step>

  <Step title="Confirm">
    Save the rule with **Confirm**. With **Synchronize**, you can trigger synchronization immediately, otherwise it runs automatically every hour.
  </Step>
</Steps>

Once a rule is active, anny cancels the affected person's confirmed bookings automatically. The cancellation applies even after the cancellation deadline has passed, and the name of the absence type appears as the cancellation reason. For multi-day absences, all bookings across the entire absence period are cancelled immediately.

<Tip>
  By default, even unapproved absence requests in Personio trigger a cancellation. With the **Only cancel accepted absences** switch, you limit cancellation to approved absences.
</Tip>

#### Automatic creation of absences

Define which resource booking automatically creates an absence in Personio.

<Steps>
  <Step title="Add a new rule">
    In the **Creation of absences through bookings** section, click **Add**.
  </Step>

  <Step title="Choose the trigger in anny">
    Choose the resource, group, or category whose booking should trigger an absence (for example, the "Home office" resource). For resources with sub-resources, choose the parent resource: bookings of the sub-resources count, a rule directly on a sub-resource does not apply.
  </Step>

  <Step title="Choose the absence type in Personio">
    Choose the absence type that should be created in Personio (for example, "Home office").
  </Step>

  <Step title="Confirm">
    Save the rule with **Confirm**.
  </Step>
</Steps>

Once the rule is active, every confirmed booking of the chosen resource creates an absence in Personio. There, the absence goes through the normal approval process and carries the comment "automatically created by anny". If you cancel the booking, anny deletes the created absence again; if you reschedule it, the absence is automatically recreated.

The assignment to the half-day happens automatically:

| Booking time                               | Created absence        |
| ------------------------------------------ | ---------------------- |
| End time before 3:00 PM                    | First half of the day  |
| Start time from 12:00 PM                   | Second half of the day |
| Entirely between 12:00 PM and 3:00 PM      | Second half of the day |
| Start before 12:00 PM and end from 3:00 PM | Full day               |

For multi-day bookings, the assignment applies to the first or last day of the absence.

## Limitations

The Personio integration does not support:

* Forward-looking checks: absences are only detected on the current day, not in advance (for example, no cancelling of vacations entered for next week)
* Real-time synchronization for cancellations: bookings are checked hourly, not in real time
* User provisioning or deprovisioning: employees are not created or removed in anny automatically
* Automatic restoration: cancelled bookings stay cancelled, even if the absence in Personio is later declined or deleted
* Error notifications: if creating an absence in Personio fails, anny does not retry and does not notify admins

## Disconnect

<Warning>
  If you deactivate the integration, no new synchronizations are performed. Existing rules stay saved but inactive. When you delete, all rules and the connection configuration are removed.
</Warning>

You can do both under **Integrations**: deactivate via the **toggle** in the top right, delete via the **three dots** → **Delete**.

## FAQ

<AccordionGroup>
  <Accordion title="How often does anny sync absences from Personio?">
    Synchronization runs automatically once an hour. You can trigger it manually at any time via the **Synchronize** button.
  </Accordion>

  <Accordion title="Are future absences taken into account too?">
    No. The integration only checks absences that start on the current day. Future entries (for example, a vacation in two weeks) are only processed on their start day.
  </Accordion>

  <Accordion title="What happens if an absence in Personio is not yet approved?">
    By default, unapproved absence requests also lead to automatic cancellation of the affected bookings. With the **Only cancel accepted absences** switch, you can limit this to approved absences. Note: if a request is later declined, bookings that were already cancelled stay cancelled.
  </Accordion>

  <Accordion title="Which Personio scopes do I need exactly?">
    You need four scopes: Read employees, Read/edit absences, Read/edit attendances, and Read/edit webhooks. Without these permissions, anny cannot retrieve or create absences.
  </Accordion>

  <Accordion title="Can I limit cancellation to specific resources?">
    Yes. When creating a rule, you can set a resource, group, or category via **Add restriction**; for multiple restrictions, create multiple rules. Without a restriction, the rule applies to all resources.
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Bookings are not cancelled even though an absence is entered in Personio">
    Check whether all four API scopes are set correctly (especially "Read employees" and "Read/edit absences"). Also make sure the employee is registered in Personio with the same email address as in anny. If the **Only cancel accepted absences** switch is active, check whether the absence in Personio has already been approved. Also note: only confirmed bookings are cancelled.
  </Accordion>

  <Accordion title="Synchronization only cancels on a manual click">
    Check whether the integration is active (toggle in the top right on the integration page). If it is active, the sync runs automatically every hour. Note that only absences starting on the current day are checked.
  </Accordion>

  <Accordion title="The absence in Personio is not created">
    Make sure the "Read/edit absences" scope is active and the rule is configured correctly. Important for sub-resources: the rule must point to the parent resource (or its group or category), not to the sub-resource itself. Also check whether the booking person exists in Personio with the same email address.
  </Accordion>
</AccordionGroup>

> Important information for agents:
>
> * Sync clarification: what counts as "today" is based on the organization's time zone. Absences without an end date are treated as ending 5 years after the start.
> * Cancellation clarification: only confirmed bookings are cancelled; cancellation conditions/deadlines are bypassed; the name of the Personio absence type is stored as the cancellation reason.
> * "Only cancel accepted absences" switch: for Personio, OFF by default (open requests also cancel).
> * Creation rules react to: a new booking as well as a change of status, period, or resource. Other changes (for example, participant count, forms) do not update the absence. On changes, the absence is deleted and recreated.
> * User matching: email matching without case sensitivity; after the first hit, anny remembers the person's Personio person ID.
> * Credentials: after successful authentication, the Client ID/Client Secret fields are locked and cannot be changed directly.
> * Distinction: no synchronization of attendances or working times, no calendar synchronization, no SSO. Personio is not a calendar integration.
> * Relationships: the HRworks integration has identical rule logic and interface, but different authentication (API key instead of OAuth with client ID + client secret). No plan/feature gating for Personio.
> * UI paths/labels: Sidebar > Integrations > Personio; sections "Cancellation of bookings through absences" and "Creation of absences through bookings" (the article heading "Automatic creation of absences" is historical); table columns "Absence type" and "Restriction" (without a restriction: "None"); modal "Create rule"/"Edit rule" with the selections "Personio absence types" and "Selection in anny:"; buttons "Add", "Confirm", "Add restriction", "Synchronize" (shows "Synchronized" afterwards).
