{"id":17705133,"url":"https://github.com/jeromegamez/personio-php","last_synced_at":"2026-01-15T03:52:15.672Z","repository":{"id":62508869,"uuid":"167337571","full_name":"jeromegamez/personio-php","owner":"jeromegamez","description":"Interact with Personio from your PHP application.","archived":true,"fork":false,"pushed_at":"2024-12-08T23:34:15.000Z","size":4069,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"2.x","last_synced_at":"2025-12-16T02:43:07.310Z","etag":null,"topics":["api","api-client","personio","personio-api","personio-sdk","php","time-tracking","timetracking"],"latest_commit_sha":null,"homepage":"https://www.personio.de","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeromegamez.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"jeromegamez"}},"created_at":"2019-01-24T09:10:18.000Z","updated_at":"2024-12-08T23:34:37.000Z","dependencies_parsed_at":"2025-03-13T08:42:10.941Z","dependency_job_id":null,"html_url":"https://github.com/jeromegamez/personio-php","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/jeromegamez/personio-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeromegamez%2Fpersonio-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeromegamez%2Fpersonio-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeromegamez%2Fpersonio-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeromegamez%2Fpersonio-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeromegamez","download_url":"https://codeload.github.com/jeromegamez/personio-php/tar.gz/refs/heads/2.x","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeromegamez%2Fpersonio-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28419257,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-client","personio","personio-api","personio-sdk","php","time-tracking","timetracking"],"created_at":"2024-10-24T22:06:38.841Z","updated_at":"2026-01-15T03:52:15.630Z","avatar_url":"https://github.com/jeromegamez.png","language":"PHP","funding_links":["https://github.com/sponsors/jeromegamez"],"categories":[],"sub_categories":[],"readme":"# Personio SDK for PHP\n\n\u003e [!NOTE]\n\u003e I don't have developer access to Personio anymore, so I can't continue to maintain this project.\n\nInteract with [Personio](https://www.personio.de) from your PHP application.\n\n[![Current version](https://img.shields.io/packagist/v/gamez/personio.svg)](https://packagist.org/packages/gamez/personio)\n![Supported PHP version](https://img.shields.io/packagist/php-v/gamez/personio.svg)\n[![Build Status](https://travis-ci.com/jeromegamez/personio-php.svg?branch=2.x)](https://travis-ci.com/jeromegamez/personio-php)\n[![Discord](https://img.shields.io/discord/807679292573220925.svg?color=7289da\u0026logo=discord)](https://discord.gg/Yacm7unBsr)\n[![Sponsor](https://img.shields.io/static/v1?logo=GitHub\u0026label=Sponsor\u0026message=%E2%9D%A4\u0026color=ff69b4)](https://github.com/sponsors/jeromegamez)\n\n---\n\n* [Requirements](#requirements)\n* [Installation](#installation)\n* [Usage](#usage)\n  * [Basic API client](#basic-api-client)\n  * [Simple API](#simple-api)\n  * [Catching errors](#catching-errors)\n  * [Caching HTTP requests](#caching-http-requests)\n  * [Creating your own API client](#creating-your-own-api-client)\n* [License](#license)\n\n---\n\n## Requirements\n\n- A Client ID and Client Secret (You can generate them at https://xxx.personio.de/configuration/api/credentials)\n\n---\n\n## Installation\n\nIn order to use this library, you need a [PSR-18 HTTP Client](https://packagist.org/providers/psr/http-client-implementation), and a\n[PSR-17 HTTP Message Factory](https://packagist.org/providers/psr/http-factory-implementation).\n\n### Example using `kriswallsmith/buzz` and `nyholm/psr7`\n\n```bash\ncomposer require kriswallsmith/buzz nyholm/psr7 gamez/personio\n```\n\n```php\n$requestFactory = new \\Nyholm\\Psr7\\Factory\\Psr17Factory();\n$httpClient = new \\Buzz\\Client\\FileGetContents($requestFactory);\n```\n\n### Example using `guzzlehttp/guzzle` and `laminas/laminas-diactoros`\n\n```bash\ncomposer require guzzlehttp/guzzle laminas/laminas-diactoros gamez/personio\n```\n\n```php\n$requestFactory = new \\Laminas\\Diactoros\\RequestFactory();\n$httpClient = new \\GuzzleHttp\\Client();\n```\n\n---\n\n## Usage\n\n### Basic API client\n\nOnce you have created an HTTP Client and Request Factory as described in the installation section,\nyou can create an API client with them:\n\n```php\nuse Gamez\\Personio\\Api\\HttpApiClient;\n\n$clientId = 'xxx';\n$clientSecret = 'xxx';\n\n/**\n * @var \\Psr\\Http\\Message\\RequestFactoryInterface $requestFactory\n * @var \\Psr\\Http\\Client\\ClientInterface $httpClient\n */\n$apiClient = HttpApiClient::with($clientId, $clientSecret, $httpClient, $requestFactory);\n```\n\nThis API client allows you to make authenticated HTTP requests to the API of your Personio account -\nsee [Personio's REST API documentation](https://developer.personio.de/reference) for the endpoints you can use.\n\n### Simple API\n\n[`Gamez\\Personio\\SimpleApi`](./src/SimpleApi.php) is the easiest and fastest way to access the data in your \nPersonio account. Its methods are named after the [available REST API endpoints](https://developer.personio.de/v1.0/reference) \nand return arrays of data. You can inspect the available methods by looking at the\n[source code of the `Gamez\\Personio\\SimpleApi` class](./src/SimpleApi.php) or by using the \nautocompletion features of your IDE.\n\nThe Simple API doesn't get in your way when accessing the Personio API, but it doesn't provide additional \nfeatures either. It will, for example, not tell you if you used a wrong query parameter or invalid\nfield value, so you will have to rely on the returned API responses.\n\nFor information on which query parameters and field values are allowed, see \n[Personio Developer Hub](https://developer.personio.de/v1.0/reference).\n\n### Catching errors\n\nAll exceptions thrown by this library implement the `\\Gamez\\Personio\\Exception\\PersonioException` interface.\nExceptions thrown while using an API Client will throw a `\\Gamez\\Personio\\Exception\\ApiClientError`.\n\n```php\n\u003c?php \n\nuse Gamez\\Personio\\Exception\\ApiClientError;\nuse Gamez\\Personio\\Exception\\PersonioException;\n\ntry {\n    /** @var \\Gamez\\Personio\\Api\\ApiClient $apiClient */\n    $result = $apiClient-\u003eget('nice-try');\n} catch (ApiClientError $e) {\n    $message = \"Something went wrong while accessing {$e-\u003egetRequest()-\u003egetUri()}\";\n\n    if ($response = $e-\u003egetResponse()) {\n        $message .= \" ({$response-\u003egetStatusCode()})\";\n    }\n\n    $message .= ' : '.$e-\u003egetMessage();\n\n    exit($message);\n} catch (PersonioException $e) {\n    exit('Something not API related went really wrong: '.$e-\u003egetMessage());\n}\n```\n\n### Caching HTTP requests\n\nTo cache HTTP requests to the API, you can add a caching middleware/plugin to the HTTP client\nbefore injecting it into the API client instance. See the documentation of the respective\ncomponent for instructions on how to do that.\n\n* Guzzle: [kevinrob/guzzle-cache-middleware](https://github.com/Kevinrob/guzzle-cache-middleware)\n* HTTPlug: [Cache Plugin](http://docs.php-http.org/en/latest/plugins/cache.html)\n\n### Creating your own API client\n\nIf you want to create your own API client, implement the `\\Gamez\\Personio\\Api\\ApiClient` interface\nand use your implementation.\n\n## License\n\n`gamez/personio` is licensed under the [MIT License](LICENSE).\n\nYour use of Personio is governed by the [Terms of Service for Personio](https://www.personio.com/gtc/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeromegamez%2Fpersonio-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeromegamez%2Fpersonio-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeromegamez%2Fpersonio-php/lists"}