PHPackages                             codebar-ag/laravel-miro - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. codebar-ag/laravel-miro

ActiveLibrary

codebar-ag/laravel-miro
=======================

A simple way to interact with the Miro API in Laravel

v0.2.0(2d ago)01↓100%[2 issues](https://github.com/codebar-ag/laravel-miro/issues)MITPHPPHP ^8.4CI failing

Since Mar 17Pushed 2d agoCompare

[ Source](https://github.com/codebar-ag/laravel-miro)[ Packagist](https://packagist.org/packages/codebar-ag/laravel-miro)[ Docs](https://github.com/codebar-ag/laravel-miro)[ GitHub Sponsors](https://github.com/:vendor_name)[ RSS](/packages/codebar-ag-laravel-miro/feed)WikiDiscussions main Synced today

READMEChangelog (2)Dependencies (11)Versions (9)Used By (0)

[![](https://camo.githubusercontent.com/824bde9660391c9da807629b9a721b8e5f0882e32c9a9dc0d82af8508eaacab2/68747470733a2f2f62616e6e6572732e6265796f6e64636f2e64652f4c61726176656c2532304d69726f2e706e673f7468656d653d6c69676874267061636b6167654d616e616765723d636f6d706f7365722b72657175697265267061636b6167654e616d653d636f64656261722d61672532466c61726176656c2d6d69726f267061747465726e3d63697263756974426f617264267374796c653d7374796c655f32266465736372697074696f6e3d412b4c61726176656c2b4d69726f2b696e746567726174696f6e2e266d643d312673686f7757617465726d61726b3d3026666f6e7453697a653d313530707826696d616765733d74656d706c617465267769647468733d35303026686569676874733d353030)](https://camo.githubusercontent.com/824bde9660391c9da807629b9a721b8e5f0882e32c9a9dc0d82af8508eaacab2/68747470733a2f2f62616e6e6572732e6265796f6e64636f2e64652f4c61726176656c2532304d69726f2e706e673f7468656d653d6c69676874267061636b6167654d616e616765723d636f6d706f7365722b72657175697265267061636b6167654e616d653d636f64656261722d61672532466c61726176656c2d6d69726f267061747465726e3d63697263756974426f617264267374796c653d7374796c655f32266465736372697074696f6e3d412b4c61726176656c2b4d69726f2b696e746567726174696f6e2e266d643d312673686f7757617465726d61726b3d3026666f6e7453697a653d313530707826696d616765733d74656d706c617465267769647468733d35303026686569676874733d353030)

[![Latest Version on Packagist](https://camo.githubusercontent.com/1d390f6b1f642153298e1940e42064b011a442dccce2e1a441533d03b036eefb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636f64656261722d61672f6c61726176656c2d6d69726f2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/codebar-ag/laravel-miro)[![Total Downloads](https://camo.githubusercontent.com/3edf79bdb666116a9807096625e0c71e7ce96327871544b8dc975720feea1c0b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f636f64656261722d61672f6c61726176656c2d6d69726f2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/codebar-ag/laravel-miro)[![GitHub Tests](https://github.com/codebar-ag/laravel-miro/actions/workflows/run-tests-pest.yml/badge.svg?branch=main)](https://github.com/codebar-ag/laravel-miro/actions/workflows/run-tests-pest.yml)[![GitHub Code Style](https://github.com/codebar-ag/laravel-miro/actions/workflows/fix-php-code-style-issues-pint.yml/badge.svg?branch=main)](https://github.com/codebar-ag/laravel-miro/actions/workflows/fix-php-code-style-issues-pint.yml)

This package was developed to give you a quick start to the Miro API.

📑 Table of Contents
-------------------

[](#-table-of-contents)

- [What is Miro?](#-what-is-miro)
- [Requirements](#-requirements)
- [Installation](#%EF%B8%8F-installation)
- [Laravel Boost Skill](#-laravel-boost-skill)
- [Usage](#-usage)
    - [Response Handling](#response-handling)
    - [DTOs](#dtos)
- [API Reference](#api-reference)
    - [Boards](#boards)
    - [Board Items](#board-items)
    - [Sticky Notes](#sticky-notes)
    - [Frames](#frames)
- [Testing](#-testing)
- [Changelog](#-changelog)
- [Contributing](#%EF%B8%8F-contributing)
- [Security Vulnerabilities](#%EF%B8%8F-security-vulnerabilities)
- [Credits](#-credits)
- [License](#-license)

💡 What is Miro?
---------------

[](#-what-is-miro)

Miro is an online collaborative whiteboard platform that enables teams to work effectively together, from brainstorming with digital sticky notes to planning and managing agile workflows.

🛠 Requirements
--------------

[](#-requirements)

PackagePHPLaravelv0.1.1^8.4^12.0 | ^13.0⚙️ Installation
---------------

[](#️-installation)

You can install the package via composer:

```
composer require codebar-ag/laravel-miro
```

Optionally, you can publish the config file with:

```
php artisan vendor:publish --tag="laravel-miro-config"
```

Add your Miro access token to your `.env` file:

```
MIRO_ACCESS_TOKEN=your_access_token_here
```

You can generate a personal access token at [miro.com/app/settings/user-profile/apps](https://miro.com/app/settings/user-profile/apps).

🤖 Laravel Boost Skill
---------------------

[](#-laravel-boost-skill)

This package includes a [Laravel Boost](https://laravel.com/docs/boost) skill. If you use Laravel Boost in your project, the skill is automatically installed when you run:

```
php artisan boost:install
```

The skill provides AI agents with full context about the package — available methods, DTOs, response handling, and usage patterns.

🚀 Usage
-------

[](#-usage)

All methods are available via the `Miro` facade and return a typed Response object.

```
use CodebarAg\Miro\Facades\Miro;

$response = Miro::getBoard('board_id');
```

### Response Handling

[](#response-handling)

All `*Response` objects expose the following methods:

```
$response->successful();  // bool
$response->failed();      // bool
$response->status();      // int    (e.g. 200, 404, 429)
$response->error();       // ?string — null on success
$response->errorCode();   // ?string — null on success
$response->dto();         // typed DTO or array of DTOs, null on failure
```

Check `successful()` before accessing the DTO — no try/catch needed for API errors like 404, 429, or 400.

```
$response = Miro::getBoard('board_id');

if ($response->successful()) {
    $board = $response->dto(); // BoardDto
} else {
    $response->status();     // e.g. 404
    $response->error();      // e.g. "Board not found"
    $response->errorCode();  // e.g. "board_not_found"
}
```

### DTOs

[](#dtos)

We provide DTOs for the following:

DTOFields`BoardDto``id`, `name`, `description`, `type`, `viewLink`, `teamId`, `projectId`, `createdAt`, `modifiedAt``BoardItemDto``id`, `type`, `data`, `position`, `geometry`, `createdAt`, `modifiedAt`, `parentId``StickyNoteDto``id`, `type`, `content`, `shape`, `fillColor`, `textAlign`, `textAlignVertical`, `positionX`, `positionY`, `width`, `height`, `parentId`, `createdAt`, `modifiedAt``FrameDto``id`, `type`, `title`, `fillColor`, `positionX`, `positionY`, `width`, `height`, `parentId`, `createdAt`, `modifiedAt`API Reference
-------------

[](#api-reference)

### Boards

[](#boards)

```
use CodebarAg\Miro\Facades\Miro;
use CodebarAg\Miro\Dto\Boards\CreateBoardDto;
use CodebarAg\Miro\Dto\Boards\GetBoardsDto;
use CodebarAg\Miro\Dto\Boards\UpdateBoardDto;
```

```
/**
 * Get All Boards
 */
$response = Miro::getBoards();
$boards = $response->dto(); // BoardDto[]
```

```
/**
 * Get Boards With Filters
 */
$response = Miro::getBoards(new GetBoardsDto(
    teamId: 'team_123',
    limit: 10,
));
```

```
/**
 * Get A Board
 */
$response = Miro::getBoard('board_id');
$board = $response->dto(); // BoardDto
```

```
/**
 * Create A Board
 */
$response = Miro::createBoard(new CreateBoardDto(
    name: 'My Sprint Board',
    description: 'Q1 planning board',
));
$board = $response->dto(); // BoardDto
```

```
/**
 * Update A Board
 */
$response = Miro::updateBoard('board_id', new UpdateBoardDto(
    name: 'Q1 Planning',
));
$board = $response->dto(); // BoardDto
```

```
/**
 * Delete A Board
 */
Miro::deleteBoard('board_id'); // returns Saloon\Http\Response
```

### Board Items

[](#board-items)

```
use CodebarAg\Miro\Facades\Miro;
use CodebarAg\Miro\Dto\BoardItems\GetBoardItemsDto;
```

```
/**
 * Get All Items On A Board
 */
$response = Miro::getBoardItems('board_id');
$items = $response->dto(); // BoardItemDto[]
```

```
/**
 * Get Items Filtered By Type
 */
$response = Miro::getBoardItems('board_id', new GetBoardItemsDto(
    type: 'sticky_note',
));
```

```
/**
 * Get A Board Item
 */
$response = Miro::getBoardItem('board_id', 'item_id');
$item = $response->dto(); // BoardItemDto
```

### Sticky Notes

[](#sticky-notes)

```
use CodebarAg\Miro\Facades\Miro;
use CodebarAg\Miro\Dto\StickyNotes\CreateStickyNoteDto;
use CodebarAg\Miro\Dto\StickyNotes\GetStickyNotesDto;
use CodebarAg\Miro\Dto\StickyNotes\UpdateStickyNoteDto;
```

```
/**
 * Get All Sticky Notes On A Board
 */
$response = Miro::getStickyNotes('board_id');
$notes = $response->dto(); // StickyNoteDto[]
```

```
/**
 * Get A Sticky Note
 */
$response = Miro::getStickyNote('board_id', 'item_id');
$note = $response->dto(); // StickyNoteDto
```

```
/**
 * Create A Sticky Note
 */
$response = Miro::createStickyNote('board_id', new CreateStickyNoteDto(
    content: 'Hello World',
    shape: 'square',
    fillColor: 'yellow',
    positionX: 100.0,
    positionY: 200.0,
));
$note = $response->dto(); // StickyNoteDto
```

```
/**
 * Update A Sticky Note
 */
$response = Miro::updateStickyNote('board_id', 'item_id', new UpdateStickyNoteDto(
    content: 'Updated content',
));
$note = $response->dto(); // StickyNoteDto
```

```
/**
 * Delete A Sticky Note
 */
Miro::deleteStickyNote('board_id', 'item_id'); // returns Saloon\Http\Response
```

### Frames

[](#frames)

```
use CodebarAg\Miro\Facades\Miro;
use CodebarAg\Miro\Dto\Frames\CreateFrameDto;
use CodebarAg\Miro\Dto\Frames\GetFramesDto;
use CodebarAg\Miro\Dto\Frames\UpdateFrameDto;
```

```
/**
 * Get All Frames On A Board
 */
$response = Miro::getFrames('board_id');
$frames = $response->dto(); // FrameDto[]
```

```
/**
 * Get A Frame
 */
$response = Miro::getFrame('board_id', 'item_id');
$frame = $response->dto(); // FrameDto
```

```
/**
 * Create A Frame
 */
$response = Miro::createFrame('board_id', new CreateFrameDto(
    title: 'Sprint 1',
    positionX: 0.0,
    positionY: 0.0,
    width: 1920.0,
    height: 1080.0,
));
$frame = $response->dto(); // FrameDto
```

```
/**
 * Update A Frame
 */
$response = Miro::updateFrame('board_id', 'item_id', new UpdateFrameDto(
    title: 'Sprint 1 – Updated',
));
$frame = $response->dto(); // FrameDto
```

```
/**
 * Delete A Frame
 */
Miro::deleteFrame('board_id', 'item_id'); // returns Saloon\Http\Response
```

🧪 Testing
---------

[](#-testing)

```
composer test
```

To run the live API tests against the real Miro API, set your token as an environment variable:

```
MIRO_ACCESS_TOKEN=your_access_token_here
```

```
vendor/bin/pest --group=live
```

Alternatively, add it to `.env.testing` in the project root.

📝 Changelog
-----------

[](#-changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

⚒️ Contributing
---------------

[](#️-contributing)

Please see [CONTRIBUTING](https://github.com/codebar-ag/.github/blob/main/CONTRIBUTING.md) for details.

🔒️ Security Vulnerabilities
---------------------------

[](#️-security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

🙏 Credits
---------

[](#-credits)

- [codebar AG](https://github.com/codebar-ag)
- [All Contributors](../../contributors)

📄 License
---------

[](#-license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor3

3 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

3

Last Release

2d ago

PHP version history (2 changes)v0.1.0PHP ^8.2

v0.1.1PHP ^8.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/fd1bbe54b79d041b513a286058b6fa0c479343f82147da3e63eefdf29c2fa6cb?d=identicon)[codebar](/maintainers/codebar)

---

Top Contributors

[![freekmurze](https://avatars.githubusercontent.com/u/483853?v=4)](https://github.com/freekmurze "freekmurze (127 commits)")[![Astro2006](https://avatars.githubusercontent.com/u/135111039?v=4)](https://github.com/Astro2006 "Astro2006 (51 commits)")[![mvdnbrk](https://avatars.githubusercontent.com/u/802681?v=4)](https://github.com/mvdnbrk "mvdnbrk (29 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (26 commits)")[![Nielsvanpach](https://avatars.githubusercontent.com/u/10651054?v=4)](https://github.com/Nielsvanpach "Nielsvanpach (26 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (19 commits)")[![StanBarrows](https://avatars.githubusercontent.com/u/10268813?v=4)](https://github.com/StanBarrows "StanBarrows (13 commits)")[![brendt](https://avatars.githubusercontent.com/u/6905297?v=4)](https://github.com/brendt "brendt (13 commits)")[![pforret](https://avatars.githubusercontent.com/u/474312?v=4)](https://github.com/pforret "pforret (9 commits)")[![riasvdv](https://avatars.githubusercontent.com/u/3626559?v=4)](https://github.com/riasvdv "riasvdv (8 commits)")[![AdrianMrn](https://avatars.githubusercontent.com/u/12762044?v=4)](https://github.com/AdrianMrn "AdrianMrn (7 commits)")[![thecaliskan](https://avatars.githubusercontent.com/u/13554944?v=4)](https://github.com/thecaliskan "thecaliskan (4 commits)")[![gregkos](https://avatars.githubusercontent.com/u/6676236?v=4)](https://github.com/gregkos "gregkos (4 commits)")[![patinthehat](https://avatars.githubusercontent.com/u/5508707?v=4)](https://github.com/patinthehat "patinthehat (3 commits)")[![adevade](https://avatars.githubusercontent.com/u/1066486?v=4)](https://github.com/adevade "adevade (2 commits)")[![AlexVanderbist](https://avatars.githubusercontent.com/u/6287961?v=4)](https://github.com/AlexVanderbist "AlexVanderbist (2 commits)")[![erikn69](https://avatars.githubusercontent.com/u/4933954?v=4)](https://github.com/erikn69 "erikn69 (2 commits)")[![irfanm96](https://avatars.githubusercontent.com/u/42065936?v=4)](https://github.com/irfanm96 "irfanm96 (2 commits)")[![jamessessford](https://avatars.githubusercontent.com/u/17096446?v=4)](https://github.com/jamessessford "jamessessford (2 commits)")[![koossaayy](https://avatars.githubusercontent.com/u/6431084?v=4)](https://github.com/koossaayy "koossaayy (2 commits)")

---

Tags

laravelmiropackagephplaravelcodebar-aglaravel-miromiro

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/codebar-ag-laravel-miro/health.svg)

```
[![Health](https://phpackages.com/badges/codebar-ag-laravel-miro/health.svg)](https://phpackages.com/packages/codebar-ag-laravel-miro)
```

###  Alternatives

[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1220.3k](/packages/codebar-ag-laravel-docuware)[codebar-ag/laravel-zammad

Zammad integration with Laravel

105.6k](/packages/codebar-ag-laravel-zammad)[codebar-ag/laravel-flysystem-cloudinary

Cloudinary Flysystem v1 integration with Laravel

1123.9k1](/packages/codebar-ag-laravel-flysystem-cloudinary)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
