🏆 Make your 2026 football predictions with Miro — + win $400 in our June Challenge
Discuss everything related to Miro API, SDK, embedding and Miro Platform apps development.
Recently active
Hello, I am trying to add a button to WidgetContextMenu if the selected widget is a Sticker and it is not locked. I can get the type of widget from the widget object, but it is not clear where i can garner if the widget has been locked or not. This leads to my button being accessible on locked objects, as shown: Can you please offer any guidance on how to tell whether the widget is locked from within the plugin code? Hope this is clear and thanks in advance. Oliver.
Hi there, I'd like to do 4 things. I'm wondering if someone has done these, or if there's a simple way to "hack" the functionality. Thanks! 1. Cards with icons. I'd like to be able to add an icon to a card. 2. Hierarchical tags. I'd like to have nesting in tags to import an existing hierarchy. 3. Import RDF. I'd like to create an importer of RDF files, so it would map them to a visual. 4. Export RDF. I'd like to take my mappings and export them to RDF.
I know you can add metadata through the API, but I cannot find documentation on how to add meta data via web plugins, I’d like to add a “session_id” to the group of objects I create via a single button and I need a way to group them up for future use.
currently working on a toy project for rolling dice. it needs read/write on a board. https://github.com/megonemad1/MiroDicePostIt I’ve tried a bunch of different things. but i keep getting either “A client must have at least one registered redirect URL” or “A redirect_uri must be supplied.” I’ve tried a bunch of different things any ideas? I’m aware: 'https://' + window.location.host + '/success.html' results to the wrong thing for github pages. fixing that doesn't fix the problem
Our company is looking to populate Salesforce information into MIRO via Microsoft Excel for project management. Ideally, we’d like to be pulling data sets and converting them into MIRO Cards for Kanban use. From there we’d like to track and report said cards Kanban position back to Salesforce via excel. At least until there is a more comprehensive Salesforce integration. Any suggestions are greatly appreciated.
Hi! I was using the CANVAS_Clicked event to place objects with the x and y attribute of the event. Now these have disappeared and i have not found out how to use the new event info how to place an item right at the click point on the canvas. Can anyone help? Thanks Falk
Hi! How do i add an image to the board with a webplugin? I cannot find it in the widget create part. Best regards Falk
Hi Miro developers Can someone help me out with some code how to access properties for a board such as title and project in JavaScript in a WebPlugin? //Tomas
Hi everyone It’s @Natalie Nedre and the Platfrom team ⬇️(@Boris Borodyansky @Oleg Plotnikov Artem and Igor). And this is a special thread for your stories about building apps with Miro API, SDK & iframe. If you have successfully built a custom app - share your experience with the Miro community below to get feedback and generate ideas for improvement! Here are some helpful questions to plot your story. What does your plugin do and what is the pain/ problem your plugin solves (share GIF or a short Loom video)? Were there any workarounds before? Why they didn’t work if any. Have you built apps or plugins on any API before? What’s your advice on starting with Miro Platfrom Documentation? What was the most pleasant/funny/interesting moment for your team when building an app? If you are open for GitHub pull requests, share a link to GitHub source code. FYI: for any Developer Platfrom bug reports or questions to the team, please find a dedicated thread, or chat with a team in t
Hi How do I change the size of the BottomPanel when opening it from javascript? miro.initialize({ extensionPoints: { bottomBar: { title: 'Timer', svgIcon: icon24, onClick: () => { miro.board.ui.openBottomPanel('index.html') } }, } })
Can you explain the reasons behind all of the permission needed fro Miro integration into Slack? There seem to be number of extraneous permissions but that is likely due to my limited understanding of how this will be used with the org.
Hi, In sharing a web plugin with a team, do we need to “wrap” Miro REST calls on our application server (e.g. within a Node.js server), sending the authorization in the header for each service call? Or can our plugin code remain as it is? Currently, our test plugin makes use of code like this, using the Miro API that gets loaded automatically in the context of the plugin: miro.board.widgets.create() Without OAuth, this works for the user who created and installed the plugin. However, though other team members can invoke the plugin, they don’t have the authorization for this command to work. Basically, I’m wondering whether, for “web plugins” specifically, the OAuth flow is meant for a one-time installation by each team member, or whether the authentication has to be managed for each user every time they are using the plugin and/or whenever a specific Miro API is called. Thanks, Sheldon
Hi everyone! How i can add an application icon to the widgetContextMenu? By looking at the documentation, i tried the following code: miro.onReady(() => { miro.initialize({ extensionPoints: { widgetContextMenu: { title: 'Hi', svgIcon: "<circle cx=\"12\" cy=\"12\" r=\"9\"></circle>", } } })}) but in console i get the following error However, I can do it in bottomBar if I replace “widgetContextMenu” with “BottomBar”.
Hi! I would like to be able to add items, that have a certain functionality and would need a special rendering, like having dice represented on the board or playingcards, that can be flipped, or an avatar with a hands up indicator. Is there a way to do that? The normal API options do not allow for something like this. Thanks Falk
I have noticed something strange: I created a Sticky Note and wanted to wrap the words into two lines. As I clicked enter it shows me this: I have seen this only one time before but I cannot remember how I could reproduce it. Any solution? Michael
Hello, ich have a problem with my first Miro Plugin. Attached a video that shows the issue: https://storyxpress.co/video/k8shzojjkpud07w0c Thanks for your help BR Roman
Hi, I had a simple plugin up and running that executed a function when I clicked a new icon in the bottomBar. I used some of the example code to get up it set up and everything worked ok. Now the icon no longer appears in the bar. The browser tools show that there is an error message (before the plugin is loaded though) that says: XML Parsing Error: prefix not bound to a namespace. I am not sure if this error message is new or not. Has something changed that means the the button-display code needs to change? The relevant plugin code is: miro.onReady(() => { miro.initialize({ extensionPoints: { bottomBar: { title: 'Post-it Counter', svgIcon: '<circle cx="12" cy="12" r="9" fill="none" fill-rule="evenodd" stroke="currentColor" stroke-width="2"/>', onClick: async () => {...} updateCount(); } } })})
We show in our app a button that allows users to link their Miro profile to our app. Once authorized (via OAuth flow) we deactivate the button, so users understand that Miro is linked. Yet, if the user deauthorizes our app within Miro, we don’t know about it - i.e. our app shows the wrong information. It would be great if you could add a webhook to inform when the user deauthorizes our app. See for inspiration Zoom: https://marketplace.zoom.us/docs/guides/auth/deauthorization
When users are asked to authorize our app to access Miro (OAuth), Miro shows a generic logo on the page. How can we change this to our company logo?
Right now, the Miro access tokens are bound to a specific user and a specific team. This requires users to authorize our app multiple times with Miro (for each team). Our users found this pretty counter-intuitive. Their expectations are set by Zoom/Slack/Github which asks users during their default OAuth flow only once to connect the account. It would therefore be easier to if Miro OAuth access tokens could work across teams (and the API requires the team_id as a parameter when e.g. creating a board).
Today, the api doesn’t allow to set the borderColor to “transparent”. Not setting any value, Miro defaults the border to black. We figured out that setting the borderOpacity to 0 is a possible workaround. Yet, this isn’t ideal because getWidgets doesn’t do this if users create transparent borders in the Miro UI (i.e. input and output API aren’t consistent). It would be great if you would allow API developers to set the border color to transparent.
The API allows to use the following colors for widgets (every other color is rejected): #F5F6F8, #FFF9B1, #F5D128, #D0E17A, #D5F692, #A6CCF5, #67C6C0, #23BFE7, #FF9D48, #EA94BB, #F16C7F, #B384BB Yet, the Miro UI itself supports a different set of colors: #fef445, #fac710, #e6e6e6, #f24726, … This confuses users of API generated widgets because they can’t reproduce the same ones in the UI.
Regarding the docu (https://developers.miro.com/reference#authorization-and-authentication), the endpoint to trigger the oauth flow is “https://miro.com/oauth/authorize” whereas the code exchange endpoint is “https://api.miro.com/v1/oauth/token”. The API calls itself are as well “https://api.miro.com/v1/boards/id”. This is unexpected and not overly nice when writing integration code. It would be better if you the /authorize endpoint would be consistent => https://api.miro.com/v1/oauth/authorize
The Miro OAuth flows shows a page on which the user can select the team to which Miro should be installed. Afterwards, the code (and subsequently the access_token) is provided. Yet, the flow can be only executed once because the “Installed” button isn’t clickable. This means, in case the application looses the Miro access-token (which I understand from the docu should be cached forever), the user is required to deinstalled the application from Miro and then trigger again the OAuth flow.
How does the positioning system in the RESTAPI work? What I understood so far is that x/y coordinates define the middle point of the widget and that the values seem to correspond to display pixels. In particular: which x/y coordinates and width/height is advised to use when placing widget (assumption: all team members have different devices)?
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.