{"id":46391644,"url":"https://github.com/decole/planka-php-sdk","last_synced_at":"2026-03-05T09:01:55.602Z","repository":{"id":165742040,"uuid":"635519154","full_name":"decole/planka-php-sdk","owner":"decole","description":"PHP PLANKA REST API bundle","archived":false,"fork":false,"pushed_at":"2025-11-27T21:33:15.000Z","size":160,"stargazers_count":13,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-11-30T12:13:02.363Z","etag":null,"topics":["api","planka"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/decole.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-02T21:45:55.000Z","updated_at":"2025-11-27T21:31:05.000Z","dependencies_parsed_at":"2024-03-03T00:26:54.522Z","dependency_job_id":"a2822acb-6a8f-40a0-b1d3-b4c0626d207d","html_url":"https://github.com/decole/planka-php-sdk","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/decole/planka-php-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decole%2Fplanka-php-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decole%2Fplanka-php-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decole%2Fplanka-php-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decole%2Fplanka-php-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/decole","download_url":"https://codeload.github.com/decole/planka-php-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/decole%2Fplanka-php-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30117479,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T08:19:04.902Z","status":"ssl_error","status_checked_at":"2026-03-05T08:17:37.148Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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","planka"],"created_at":"2026-03-05T09:01:55.022Z","updated_at":"2026-03-05T09:01:55.588Z","avatar_url":"https://github.com/decole.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PHP PLANKA REST API\n\nWrapper over the rest api of the Planka (https://github.com/plankanban/planka)\n\nTested on Planka version: \n - 1.10.3\n - 1.11\n - 1.24.3\n\nImplemented all entrypoints for the bar version **1.10.3** and later.\n\nOn 1.24.3 add new entrypoints for OIDC and update result DTO on 1.24.3. - on version this project **1.3.0**\n\n\n## Install\n\n`composer require decole/planka-php-sdk`\n\n\n## How to use\n\nWrapper executes the requests that Planka makes over the web socket or hidden REST API.\nWrapper use hidden REST API. See endpoints in https://github.com/plankanban/planka/blob/master/server/config/routes.js \n\nTo understand how to use the wrapper, you can go to the web socket and see how the web client of the web socket \nworks with its server. Requests and responses are identical. I just standardized the answers in the DTO. \nThe data inside the DTO is identical to the server responses.\n\nIt is also not important to understand that you are working under a specific user. Accordingly, if you do not see \na project or some board, this means that this user is prohibited from having access by access rights.\n\nYou need to add a user. For which you come as a wrapper in the projects and boards you need.\n\n\nWrapper endpoint - /src/[PlankaClient.php](src/PlankaClient.php)\n\n\n```php\n\u003c?php\n\nuse Planka\\Bridge\\PlankaClient;\nuse Planka\\Bridge\\TransportClients\\Client;\n\nrequire __DIR__ . '/vendor/autoload.php';\n\n$config = new Config(\n    user: 'login',\n    password: '***************',\n    baseUri: 'http://192.168.1.101', // https://your.domain.com\n    port: 3000                       // 443\n);\n\n$planka = new PlankaClient($config);\n\n$planka-\u003eauthenticate();\n\n$result = $planka-\u003eproject-\u003elist();\n\nvar_dump($result);\n```\n\n\n## Examples\n\n- [Delete empty board](docs/DELETE_EMPTY_BOARD.md)\n- [Create new card on board.md](docs/ADD_NEW_CARD_ON_BOARD.md)\n- [Subscribe user to card.md](docs/SUBSCRIBE_MEMBERSHIP_TO_CARD.md)\n\nYou can test this bundle for Rest API with a test script, in the folder `/tests/index.php`. \nThere you will find the main examples of using the script.\n\nCopy [config.example.php](tests/config.example.php) for `config.php` and customize to your\nPlanka credentials.\n\nIn the test script, comments describe what is being done and the project, board and card are also created and carried \nout with them manipulations, at the end of the card, board and project are deleted.\n\nAll necessary entrypoints are conveniently divided into controllers. You can view the controllers \nin the `src/Controllers/` folder.\n\nResult data output is strongly typed and returned in Dto objects\n\n## Dto has raw array result\n\n- ProjectListDto `$client-\u003eproject-\u003elist();`\n- \n\n\n## Found problems:\n\nUsing Symfony\\Component\\HttpClient\\NativeHttpClient - as an internal client, you can send passwords with special characters `()\\|/\"'`\nbut if you use Symfony\\Component\\HttpClient\\CurlHttpClient - tricky passwords cannot be used. inside there is escaping for url encoding, which is why Planck\nthe password cannot be intact. Because of this, it is impossible to log in with an account.\n\n\n## For develop\n\n### RTFM\n\n- Planka - https://github.com/plankanban/planka\n- HTTP client lib: https://symfony.com/doc/current/http_client.html\n\n\n### Static analyze code\nPsalm analyze: `./vendor/bin/psalm --no-cache --no-file-cache`\n\nOr if you use linux, use `make psalm`\n\n## API Sources From Planka\n\n### [Routes](https://github.com/plankanban/planka/blob/master/server/config/routes.js)\n### [Models](https://github.com/plankanban/planka/tree/master/server/api/models)\n### [Helpers](https://github.com/plankanban/planka/tree/master/server/api/helpers)\n\n## Alternative SDK\n\nPython:\n- [plankapy](https://github.com/hwelch-fle/plankapy/tree/master)\n\n\n----\n\n[Routes:](https://github.com/plankanban/planka/blob/master/server/config/routes.js)\n\n----\n\n**(create for next iteration)**\n\n\n- 'GET /api/config'\n\n- 'POST /api/access-tokens'\n- 'POST /api/access-tokens/exchange-using-oidc' \n- 'DELETE /api/access-tokens/me' \n\n----\n\n## Checking routes\n\n~~- 'GET /api/users'~~\n~~- 'POST /api/users'~~\n~~- 'GET /api/users/:id'~~\n~~- 'PATCH /api/users/:id'~~\n~~- 'PATCH /api/users/:id/email'~~\n~~- 'PATCH /api/users/:id/password'~~\n~~- 'PATCH /api/users/:id/username'~~\n~~- 'POST /api/users/:id/avatar'~~\n~~- 'DELETE /api/users/:id'~~\n\n\n~~- 'GET /api/projects'~~\n~~- 'POST /api/projects'~~\n~~- 'GET /api/projects/:id'~~\n~~- 'PATCH /api/projects/:id'~~\n~~- 'POST /api/projects/:id/background-image'~~\n~~- 'DELETE /api/projects/:id'~~\n \n\n~~- 'POST /api/projects/:projectId/managers'~~\n~~- 'DELETE /api/project-managers/:id'~~\n\n\n- 'POST /api/projects/:projectId/boards'\n- 'GET /api/boards/:id'\n- 'PATCH /api/boards/:id'\n- 'DELETE /api/boards/:id'\n\n\n- 'POST /api/boards/:boardId/memberships'\n- 'PATCH /api/board-memberships/:id'\n- 'DELETE /api/board-memberships/:id'\n\n\n- 'POST /api/boards/:boardId/labels'\n- 'PATCH /api/labels/:id'\n- 'DELETE /api/labels/:id'\n\n\n- 'POST /api/boards/:boardId/lists'\n- 'PATCH /api/lists/:id'\n- 'POST /api/lists/:id/sort'\n- 'DELETE /api/lists/:id'\n\n\n- 'POST /api/lists/:listId/cards'\n- 'GET /api/cards/:id'\n- 'PATCH /api/cards/:id'\n- 'POST /api/cards/:id/duplicate'\n- 'DELETE /api/cards/:id'\n- 'POST /api/cards/:cardId/memberships'\n- 'DELETE /api/cards/:cardId/memberships'\n- 'POST /api/cards/:cardId/labels'\n- 'DELETE /api/cards/:cardId/labels/:labelId'\n\n\n- 'POST /api/cards/:cardId/tasks'\n- 'PATCH /api/tasks/:id'\n- 'DELETE /api/tasks/:id'\n\n\n- 'POST /api/cards/:cardId/attachments'\n- 'PATCH /api/attachments/:id'\n- 'DELETE /api/attachments/:id'\n\n\n- 'GET /api/cards/:cardId/actions'\n\n\n- 'POST /api/cards/:cardId/comment-actions'\n- 'PATCH /api/comment-actions/:id'\n- 'DELETE /api/comment-actions/:id'\n\n\n- 'GET /api/notifications'\n- 'GET /api/notifications/:id'\n- 'PATCH /api/notifications/:ids'\n\n\n- 'GET /user-avatars/*'\n- 'GET /project-background-images/*'\n- 'GET /attachments/:id/download/:filename'\n- 'GET /attachments/:id/download/thumbnails/cover-256.:extension'\n- 'GET /*'\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecole%2Fplanka-php-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdecole%2Fplanka-php-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdecole%2Fplanka-php-sdk/lists"}