{"id":"536bff8c-12b7-46b4-b124-aaa3c513ec67","task":"Retrieve data from a Personio Custom Report via the Custom Reports API","domain":"hr-payroll","steps":["Confirm the Custom Reports Read scope is enabled on your API credential; this bypasses the Employee Data attribute whitelist entirely - any attribute added to the report is returned regardless of whitelisting","Call the GetReports endpoint to list available reports and check each report's status (up-to-date, updating, or update_failed) and its data_refreshed_at timestamp","Call GetColumns (optionally with ?locale=<2-letter code>) to map dynamic_ prefixed attribute IDs to human-readable column names","Call GetReportData with a report ID to retrieve rows as JSON; for large reports, wait until enough time has passed since data_refreshed_at before re-querying","For historical-data report types, match rows to employees via employee_id only - name fields are not included in that report type"],"gotchas":["A report auto-archives after 60 days without being viewed or retrieved via API; reactivate it by opening and reloading it in the UI before it will update again","Custom Reports column data types can differ from the Employees endpoint's data types for the same underlying field","Creating or updating a report's definition is not supported via API - only GET is available"],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/536bff8c-12b7-46b4-b124-aaa3c513ec67"}