{"_id":"577fa38ec6a4f00e0052dfa7","hidden":false,"isReference":false,"title":"Overview","type":"basic","__v":5,"api":{"auth":"required","params":[],"results":{"codes":[]},"settings":"","url":""},"slug":"overview","version":"565358949cf4b42b00529a74","githubsync":"","link_external":false,"createdAt":"2016-07-08T12:58:54.595Z","project":"5652e65ff8206a350049b491","updates":[],"category":"577e8d2ca326490e000b7398","link_url":"","order":0,"parentDoc":null,"sync_unique":"","user":"5652e5c6a3de712b00d176f8","body":"The MindMeister API v2 provides access for 3rd-party applications to retrieve mind mapping data on behalf of users. It is a HTTP [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API and currently offers the resource Users, Maps and Files. Authorization is done via OAuth 2.0.\n\nThe base URL for all REST API endpoints is:\n[https://www.mindmeister.com/api/v2/](https://www.mindmeister.com/api/v2/)","excerpt":"","childrenPages":[]}

Overview


The MindMeister API v2 provides access for 3rd-party applications to retrieve mind mapping data on behalf of users. It is a HTTP [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API and currently offers the resource Users, Maps and Files. Authorization is done via OAuth 2.0. The base URL for all REST API endpoints is: [https://www.mindmeister.com/api/v2/](https://www.mindmeister.com/api/v2/)
The MindMeister API v2 provides access for 3rd-party applications to retrieve mind mapping data on behalf of users. It is a HTTP [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API and currently offers the resource Users, Maps and Files. Authorization is done via OAuth 2.0. The base URL for all REST API endpoints is: [https://www.mindmeister.com/api/v2/](https://www.mindmeister.com/api/v2/)
{"_id":"5784f7d0fd4ee30e0007a53d","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"excerpt":"","githubsync":"","isReference":false,"parentDoc":null,"slug":"basic-steps","user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","__v":17,"link_url":"","order":1,"type":"basic","updates":[],"title":"Basic Steps","body":"All applications follow the same principle steps when accessing the MindMeister OAuth 2.0 API. These steps are:\n\n### 1. Register your client application\nRegister an OAuth 2.0 client application here to obtain a client ID and a client secret. For details read [register your application](doc:register-application).\n\n### 2. Obtain an access token from the MindMeister authorization server\nUse one of the supported OAuth 2.0 flows to receive an access token. If the client application is a web app it should use the [authorization code flow](https://mindmeister.readme.io/docs/basic-steps#section-authorization-code-flow). For client-side JavaScript applications the [implicit flow](https://mindmeister.readme.io/docs/basic-steps#section-implicit-flow) should be selected. And if the client application just needs access on its own without access to user related data, the [client credentials](https://mindmeister.readme.io/docs/basic-steps#section-client-credentials-flow) flow is enough alone.\nThe MindMeister API additionally provides the ability to create personal access tokens without prior application registration. These tokens can only be used to access the API on the user's own behalf.\n\n### 3. Interact with API endpoints using access tokens\nThe access token allows requests to protected user resources. To authorize an API request the access token has to be send in the bearer authorization header.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"GET /api/v2/resource/1 HTTP/1.1\\nHost: www.mindmeister.com\\nAuthorization: Bearer ACCESS_TOKEN\\n\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS Example\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"It's also possible to provide the access token in the query string, e.g. */api/v2/resource/1?access_token=ACCESS_TOKEN*. This is really **not recommended**. The access token might be exposed to the end user or any other non authorized party. User-agents might cache the query string together with the base URL as well.\"\n}\n[/block]","category":"577e8d2ca326490e000b7398","createdAt":"2016-07-12T13:59:44.912Z","hidden":false,"link_external":false,"project":"5652e65ff8206a350049b491","sync_unique":"","childrenPages":[]}

Basic Steps


All applications follow the same principle steps when accessing the MindMeister OAuth 2.0 API. These steps are: ### 1. Register your client application Register an OAuth 2.0 client application here to obtain a client ID and a client secret. For details read [register your application](doc:register-application). ### 2. Obtain an access token from the MindMeister authorization server Use one of the supported OAuth 2.0 flows to receive an access token. If the client application is a web app it should use the [authorization code flow](https://mindmeister.readme.io/docs/basic-steps#section-authorization-code-flow). For client-side JavaScript applications the [implicit flow](https://mindmeister.readme.io/docs/basic-steps#section-implicit-flow) should be selected. And if the client application just needs access on its own without access to user related data, the [client credentials](https://mindmeister.readme.io/docs/basic-steps#section-client-credentials-flow) flow is enough alone. The MindMeister API additionally provides the ability to create personal access tokens without prior application registration. These tokens can only be used to access the API on the user's own behalf. ### 3. Interact with API endpoints using access tokens The access token allows requests to protected user resources. To authorize an API request the access token has to be send in the bearer authorization header. [block:code] { "codes": [ { "code": "GET /api/v2/resource/1 HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN\n", "language": "http", "name": "HTTPS Example" } ] } [/block] [block:callout] { "type": "warning", "body": "It's also possible to provide the access token in the query string, e.g. */api/v2/resource/1?access_token=ACCESS_TOKEN*. This is really **not recommended**. The access token might be exposed to the end user or any other non authorized party. User-agents might cache the query string together with the base URL as well." } [/block]
All applications follow the same principle steps when accessing the MindMeister OAuth 2.0 API. These steps are: ### 1. Register your client application Register an OAuth 2.0 client application here to obtain a client ID and a client secret. For details read [register your application](doc:register-application). ### 2. Obtain an access token from the MindMeister authorization server Use one of the supported OAuth 2.0 flows to receive an access token. If the client application is a web app it should use the [authorization code flow](https://mindmeister.readme.io/docs/basic-steps#section-authorization-code-flow). For client-side JavaScript applications the [implicit flow](https://mindmeister.readme.io/docs/basic-steps#section-implicit-flow) should be selected. And if the client application just needs access on its own without access to user related data, the [client credentials](https://mindmeister.readme.io/docs/basic-steps#section-client-credentials-flow) flow is enough alone. The MindMeister API additionally provides the ability to create personal access tokens without prior application registration. These tokens can only be used to access the API on the user's own behalf. ### 3. Interact with API endpoints using access tokens The access token allows requests to protected user resources. To authorize an API request the access token has to be send in the bearer authorization header. [block:code] { "codes": [ { "code": "GET /api/v2/resource/1 HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN\n", "language": "http", "name": "HTTPS Example" } ] } [/block] [block:callout] { "type": "warning", "body": "It's also possible to provide the access token in the query string, e.g. */api/v2/resource/1?access_token=ACCESS_TOKEN*. This is really **not recommended**. The access token might be exposed to the end user or any other non authorized party. User-agents might cache the query string together with the base URL as well." } [/block]
{"_id":"565358959cf4b42b00529a77","isReference":false,"project":"5652e65ff8206a350049b491","sync_unique":"","version":"565358949cf4b42b00529a74","api":{"auth":"required","params":[],"results":{"codes":[{"code":"{}","language":"json","status":200,"name":""},{"language":"json","status":400,"name":"","code":"{}"}]},"settings":"","url":""},"body":"In order to use the MindMeister API endpoints, first you have to register an API client application.\n\n### 1) Login or create profile\n[Login](https://www.mindmeister.com/de/account/login?product=1&return_to=https%3A%2F%2Fwww.mindmeister.com) with an existing MindMeister account or [signup](https://www.mindmeister.com/de/mm/signup/basic) for a new one. \n\n### 2) New application\nAdd an OAuth 2.0 application [here](https://www.mindmeister.com/api). Set your **application name** and add one or more valid **redirect URIs**.\n \n### 3) After application registration \nYou will receive a unique **client ID**, which identifies your application and a **client secret**. This is needed when you have to authenticate your app against MindMeister's authorization server.\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"title\": \"Hide your client secret\",\n  \"body\": \"**Important**: Keep your client secret hidden and don't check it in on your version control system like Git.\"\n}\n[/block]","category":"577e8d2ca326490e000b7398","hidden":false,"__v":31,"order":2,"type":"basic","updates":[],"parentDoc":null,"slug":"register-application","user":"5652e5c6a3de712b00d176f8","excerpt":"","githubsync":"","link_url":"","createdAt":"2015-11-23T10:11:45.517Z","link_external":false,"title":"Register your Application","childrenPages":[]}

Register your Application


In order to use the MindMeister API endpoints, first you have to register an API client application. ### 1) Login or create profile [Login](https://www.mindmeister.com/de/account/login?product=1&return_to=https%3A%2F%2Fwww.mindmeister.com) with an existing MindMeister account or [signup](https://www.mindmeister.com/de/mm/signup/basic) for a new one. ### 2) New application Add an OAuth 2.0 application [here](https://www.mindmeister.com/api). Set your **application name** and add one or more valid **redirect URIs**. ### 3) After application registration You will receive a unique **client ID**, which identifies your application and a **client secret**. This is needed when you have to authenticate your app against MindMeister's authorization server. [block:callout] { "type": "danger", "title": "Hide your client secret", "body": "**Important**: Keep your client secret hidden and don't check it in on your version control system like Git." } [/block]
In order to use the MindMeister API endpoints, first you have to register an API client application. ### 1) Login or create profile [Login](https://www.mindmeister.com/de/account/login?product=1&return_to=https%3A%2F%2Fwww.mindmeister.com) with an existing MindMeister account or [signup](https://www.mindmeister.com/de/mm/signup/basic) for a new one. ### 2) New application Add an OAuth 2.0 application [here](https://www.mindmeister.com/api). Set your **application name** and add one or more valid **redirect URIs**. ### 3) After application registration You will receive a unique **client ID**, which identifies your application and a **client secret**. This is needed when you have to authenticate your app against MindMeister's authorization server. [block:callout] { "type": "danger", "title": "Hide your client secret", "body": "**Important**: Keep your client secret hidden and don't check it in on your version control system like Git." } [/block]
{"_id":"577fa3b940bede0e00b5384b","__v":18,"body":"An error response may occur on invalid requests e.g. on missing parameters, unknown resources or unauthorized access.\n\nThe MindMeister API uses standard HTTP status codes and custom error objects to provide a machine-readable and user friendly response.\n\n## HTTP Status Codes\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"2xx\",\n    \"h-0\": \"Status\",\n    \"h-1\": \"Description\",\n    \"1-0\": \"3xx\",\n    \"2-0\": \"4xx\",\n    \"3-0\": \"5xx\",\n    \"0-1\": \"The request was successfully received, understood, and accepted.\",\n    \"1-1\": \"Further action is needed to fulfill the request.\",\n    \"2-1\": \"The client sent an invalid request. In most cases some parameters are missing or incorrect.\",\n    \"3-1\": \"An error occured on the server and is incapable of performing the request.\"\n  },\n  \"cols\": 2,\n  \"rows\": 4\n}\n[/block]\n## Error Response Object\nThe error response JSON object is always in the following format and sent in the response body.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n    \\\"error\\\": {\\n        \\\"type\\\": \\\"errorType\\\",\\n        \\\"message\\\": \\\"Error message\\\",\\n        \\\"details\\\": \\\"OPTIONAL error details\\\"\\n    }\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n## Error Types\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Error Type\",\n    \"h-1\": \"Status\",\n    \"h-2\": \"Description\",\n    \"0-1\": \"500\",\n    \"1-1\": \"404\",\n    \"2-1\": \"406\",\n    \"3-1\": \"422\",\n    \"4-1\": \"403\",\n    \"5-1\": \"401\",\n    \"6-1\": \"403\",\n    \"7-1\": \"400\",\n    \"8-1\": \"400\",\n    \"9-1\": \"400\",\n    \"10-1\": \"400\",\n    \"11-1\": \"\",\n    \"12-1\": \"\",\n    \"0-0\": \"internalServerError\",\n    \"1-0\": \"notFound\",\n    \"2-0\": \"notAcceptable\",\n    \"3-0\": \"unprocessableEntity\",\n    \"4-0\": \"forbidden\",\n    \"5-0\": \"invalidCredentials\",\n    \"h-3\": \"\",\n    \"6-0\": \"unauthorizedScopes\",\n    \"7-0\": \"productUnknown\",\n    \"8-0\": \"userInvalid\",\n    \"9-0\": \"accessTokenInvalid\",\n    \"10-0\": \"resourceInvalid\",\n    \"11-0\": \"\",\n    \"12-0\": \"\",\n    \"1-2\": \"The requested resource is not found.\",\n    \"2-2\": \"The requested resource is not available due to the Accept header format.\",\n    \"3-2\": \"The request resource couldn't be processed due to semantic errors.\",\n    \"4-2\": \"The request was refused due to insufficient permissions.\",\n    \"5-2\": \"The request was refused because authentication failed.\",\n    \"6-2\": \"The provided scopes are insufficient.\",\n    \"7-2\": \"The product parameter is missing or unknown.\",\n    \"8-2\": \"The user resource is invalid due to semantic errors.\",\n    \"9-2\": \"The access token is invalid due to semantic errors.\",\n    \"10-2\": \"The requested resource is invalid due to semantic errors.\",\n    \"0-2\": \"An internal server error occured. Please [submit a request](https://support.mindmeister.com/hc/en-us/requests/new) to get this fixed soon.\"\n  },\n  \"cols\": 3,\n  \"rows\": 11\n}\n[/block]","excerpt":"","parentDoc":null,"slug":"errors","sync_unique":"","updates":[],"category":"577e8d2ca326490e000b7398","isReference":false,"link_url":"","api":{"auth":"required","params":[],"results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"hidden":false,"link_external":false,"project":"5652e65ff8206a350049b491","user":"5652e5c6a3de712b00d176f8","createdAt":"2016-07-08T12:59:37.868Z","githubsync":"","order":3,"title":"Errors","type":"basic","version":"565358949cf4b42b00529a74","childrenPages":[]}

Errors


An error response may occur on invalid requests e.g. on missing parameters, unknown resources or unauthorized access. The MindMeister API uses standard HTTP status codes and custom error objects to provide a machine-readable and user friendly response. ## HTTP Status Codes [block:parameters] { "data": { "0-0": "2xx", "h-0": "Status", "h-1": "Description", "1-0": "3xx", "2-0": "4xx", "3-0": "5xx", "0-1": "The request was successfully received, understood, and accepted.", "1-1": "Further action is needed to fulfill the request.", "2-1": "The client sent an invalid request. In most cases some parameters are missing or incorrect.", "3-1": "An error occured on the server and is incapable of performing the request." }, "cols": 2, "rows": 4 } [/block] ## Error Response Object The error response JSON object is always in the following format and sent in the response body. [block:code] { "codes": [ { "code": "{\n \"error\": {\n \"type\": \"errorType\",\n \"message\": \"Error message\",\n \"details\": \"OPTIONAL error details\"\n }\n}", "language": "json" } ] } [/block] ## Error Types [block:parameters] { "data": { "h-0": "Error Type", "h-1": "Status", "h-2": "Description", "0-1": "500", "1-1": "404", "2-1": "406", "3-1": "422", "4-1": "403", "5-1": "401", "6-1": "403", "7-1": "400", "8-1": "400", "9-1": "400", "10-1": "400", "11-1": "", "12-1": "", "0-0": "internalServerError", "1-0": "notFound", "2-0": "notAcceptable", "3-0": "unprocessableEntity", "4-0": "forbidden", "5-0": "invalidCredentials", "h-3": "", "6-0": "unauthorizedScopes", "7-0": "productUnknown", "8-0": "userInvalid", "9-0": "accessTokenInvalid", "10-0": "resourceInvalid", "11-0": "", "12-0": "", "1-2": "The requested resource is not found.", "2-2": "The requested resource is not available due to the Accept header format.", "3-2": "The request resource couldn't be processed due to semantic errors.", "4-2": "The request was refused due to insufficient permissions.", "5-2": "The request was refused because authentication failed.", "6-2": "The provided scopes are insufficient.", "7-2": "The product parameter is missing or unknown.", "8-2": "The user resource is invalid due to semantic errors.", "9-2": "The access token is invalid due to semantic errors.", "10-2": "The requested resource is invalid due to semantic errors.", "0-2": "An internal server error occured. Please [submit a request](https://support.mindmeister.com/hc/en-us/requests/new) to get this fixed soon." }, "cols": 3, "rows": 11 } [/block]
An error response may occur on invalid requests e.g. on missing parameters, unknown resources or unauthorized access. The MindMeister API uses standard HTTP status codes and custom error objects to provide a machine-readable and user friendly response. ## HTTP Status Codes [block:parameters] { "data": { "0-0": "2xx", "h-0": "Status", "h-1": "Description", "1-0": "3xx", "2-0": "4xx", "3-0": "5xx", "0-1": "The request was successfully received, understood, and accepted.", "1-1": "Further action is needed to fulfill the request.", "2-1": "The client sent an invalid request. In most cases some parameters are missing or incorrect.", "3-1": "An error occured on the server and is incapable of performing the request." }, "cols": 2, "rows": 4 } [/block] ## Error Response Object The error response JSON object is always in the following format and sent in the response body. [block:code] { "codes": [ { "code": "{\n \"error\": {\n \"type\": \"errorType\",\n \"message\": \"Error message\",\n \"details\": \"OPTIONAL error details\"\n }\n}", "language": "json" } ] } [/block] ## Error Types [block:parameters] { "data": { "h-0": "Error Type", "h-1": "Status", "h-2": "Description", "0-1": "500", "1-1": "404", "2-1": "406", "3-1": "422", "4-1": "403", "5-1": "401", "6-1": "403", "7-1": "400", "8-1": "400", "9-1": "400", "10-1": "400", "11-1": "", "12-1": "", "0-0": "internalServerError", "1-0": "notFound", "2-0": "notAcceptable", "3-0": "unprocessableEntity", "4-0": "forbidden", "5-0": "invalidCredentials", "h-3": "", "6-0": "unauthorizedScopes", "7-0": "productUnknown", "8-0": "userInvalid", "9-0": "accessTokenInvalid", "10-0": "resourceInvalid", "11-0": "", "12-0": "", "1-2": "The requested resource is not found.", "2-2": "The requested resource is not available due to the Accept header format.", "3-2": "The request resource couldn't be processed due to semantic errors.", "4-2": "The request was refused due to insufficient permissions.", "5-2": "The request was refused because authentication failed.", "6-2": "The provided scopes are insufficient.", "7-2": "The product parameter is missing or unknown.", "8-2": "The user resource is invalid due to semantic errors.", "9-2": "The access token is invalid due to semantic errors.", "10-2": "The requested resource is invalid due to semantic errors.", "0-2": "An internal server error occured. Please [submit a request](https://support.mindmeister.com/hc/en-us/requests/new) to get this fixed soon." }, "cols": 3, "rows": 11 } [/block]
{"_id":"5864e5147865153700dcee6b","version":"565358949cf4b42b00529a74","githubsync":"","isReference":false,"next":{"pages":[],"description":""},"sync_unique":"","title":"JavaScript API","slug":"javascript-api","api":{"url":"","results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"code":"{}","name":"","status":400,"language":"json"}]},"settings":"","auth":"required","params":[]},"createdAt":"2016-12-29T10:27:32.013Z","hidden":false,"order":4,"__v":0,"body":"The JavaScript API is built for web apps running in a browser. It allows quick access to MindMeister's Rest API using the [implicit flow](https://developers.mindmeister.com/docs/oauth-2#section-implicit-flow) of the OAuth 2.0 protocol.\n\n**To get started** a client application has to be registered. See [Register your Application](doc:register-application) for details. Make sure that the URL of your web app is added as a **redirect URI**, otherwise the authorization step will fail.\n\nNext, add the following line to the HTML header of your web app with the client id, that was created in the previous step.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<script src=\\\"https://www.mindmeister.com/api/v2/js/api.js?client_id=[Client_ID]\\\"></script>\",\n      \"language\": \"html\",\n      \"name\": \"api.js\"\n    }\n  ]\n}\n[/block]\nAfter including the JavaScript source file, you have access to the **global ML object**. It represents the interface to the entire JavaScript API of MindMeister.\n\n## Authorization\n\nBefore any API resource can be accessed, the resource owner, so the user has to grant permissions. This is done through *ML.authorize()*. It opens the **OAuth 2.0 consent screen** in a separate window and initiates the [OAuth 2.0 implicit flow](https://developers.mindmeister.com/docs/oauth-2#section-implicit-flow).\n\nAfter the user granted permissions for the requested scope, the window is closed automatically and the callback onSuccess is called. In case of a failure the callback onError is called.\n\nAfter authorization an access token is received and stored internally. This is used automatically for any subsequent API call.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"ML.authorize({\\n  onSuccess: function() {},\\n  onError: function() {},\\n  persist: true,\\n  scope: 'userinfo.email userinfo.profile mindmeister'\\n});\",\n      \"language\": \"javascript\",\n      \"name\": \"JavaScript example\"\n    }\n  ]\n}\n[/block]\n### Parameters of ML.authorize(...) \n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parameter\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"onSuccess\",\n    \"1-0\": \"onError\",\n    \"0-1\": \"A method that is called when the authorization is granted.\",\n    \"1-1\": \"A method that is called in case the authorization failed.\",\n    \"2-0\": \"persist\",\n    \"2-1\": \"A boolean flag that indicates if the access token will be stored to window.localStorage. Default is *true*.\",\n    \"3-0\": \"scope\",\n    \"3-1\": \"The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'. Default is '*userinfo.email userinfo.profile mindmeister*'.\"\n  },\n  \"cols\": 2,\n  \"rows\": 4\n}\n[/block]\nThe **authorization status** can be check with *ML.authorized()*. To **deauthorize** the API access for the user, call *ML.deauthorize()*.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"if (ML.authorized()) {\\n\\tML.deauthorize();\\n}\",\n      \"language\": \"javascript\",\n      \"name\": \"JavaScript example\"\n    }\n  ]\n}\n[/block]\n\n\n## API Access\n\nAll Rest API endpoints can be accessed through *ML.rest(...)* .\n\n### Parameters of ML.rest(...) \n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parameter\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"method\",\n    \"0-1\": \"One of the HTTP methods \\\"GET\\\", \\\"POST\\\", \\\"PUT\\\" or \\\"DELETE\\\".\",\n    \"1-0\": \"path\",\n    \"1-1\": \"The path of the API endpoint e.g., \\\"/maps/1\\\".\",\n    \"2-0\": \"params\",\n    \"2-1\": \"A params object with params for the specific API endpoint. Default is {}.\",\n    \"3-0\": \"onSuccess\",\n    \"3-1\": \"A success callback method. The API response is provided with the first parameter.\",\n    \"4-0\": \"onError\",\n    \"4-1\": \"An error callback method. The error response is provided with the first parameter.\"\n  },\n  \"cols\": 2,\n  \"rows\": 5\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"var method = 'GET',\\n    path = '/maps/1',\\n    params = {},\\n    onSuccess = function(respObj) {},\\n    onError = function(respObj) {};\\n\\nML.rest(method, path, params, onSuccess, onError);\",\n      \"language\": \"javascript\",\n      \"name\": \"JavaScript example\"\n    }\n  ]\n}\n[/block]\nAdditional helper methods for API access are:\n\n  * ML.get(path, params, onSuccess, onError)\n  * ML.post(path, params, onSuccess, onError)\n  * ML.put(path, params, onSuccess, onError)\n  * ML.delete(path, params, onSuccess, onError)\n\n\n  * ML.users(id, params, onSuccess, onError)\n  * ML.maps(id, params, onSuccess, onError)\n  * ML.files(id, params, onSuccess, onError)\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"/users/me\",\n  \"body\": \"To receive user profile data from the resource owner, use the path '/users/me'. And make sure that the related scopes 'userinfo.email userinfo.profile' are provided during the authorization.\"\n}\n[/block]","parentDoc":null,"updates":[],"user":"5652e5c6a3de712b00d176f8","type":"basic","category":"577e8d2ca326490e000b7398","excerpt":"","link_external":false,"link_url":"","project":"5652e65ff8206a350049b491","childrenPages":[]}

JavaScript API


The JavaScript API is built for web apps running in a browser. It allows quick access to MindMeister's Rest API using the [implicit flow](https://developers.mindmeister.com/docs/oauth-2#section-implicit-flow) of the OAuth 2.0 protocol. **To get started** a client application has to be registered. See [Register your Application](doc:register-application) for details. Make sure that the URL of your web app is added as a **redirect URI**, otherwise the authorization step will fail. Next, add the following line to the HTML header of your web app with the client id, that was created in the previous step. [block:code] { "codes": [ { "code": "<script src=\"https://www.mindmeister.com/api/v2/js/api.js?client_id=[Client_ID]\"></script>", "language": "html", "name": "api.js" } ] } [/block] After including the JavaScript source file, you have access to the **global ML object**. It represents the interface to the entire JavaScript API of MindMeister. ## Authorization Before any API resource can be accessed, the resource owner, so the user has to grant permissions. This is done through *ML.authorize()*. It opens the **OAuth 2.0 consent screen** in a separate window and initiates the [OAuth 2.0 implicit flow](https://developers.mindmeister.com/docs/oauth-2#section-implicit-flow). After the user granted permissions for the requested scope, the window is closed automatically and the callback onSuccess is called. In case of a failure the callback onError is called. After authorization an access token is received and stored internally. This is used automatically for any subsequent API call. [block:code] { "codes": [ { "code": "ML.authorize({\n onSuccess: function() {},\n onError: function() {},\n persist: true,\n scope: 'userinfo.email userinfo.profile mindmeister'\n});", "language": "javascript", "name": "JavaScript example" } ] } [/block] ### Parameters of ML.authorize(...) [block:parameters] { "data": { "h-0": "Parameter", "h-1": "Description", "0-0": "onSuccess", "1-0": "onError", "0-1": "A method that is called when the authorization is granted.", "1-1": "A method that is called in case the authorization failed.", "2-0": "persist", "2-1": "A boolean flag that indicates if the access token will be stored to window.localStorage. Default is *true*.", "3-0": "scope", "3-1": "The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'. Default is '*userinfo.email userinfo.profile mindmeister*'." }, "cols": 2, "rows": 4 } [/block] The **authorization status** can be check with *ML.authorized()*. To **deauthorize** the API access for the user, call *ML.deauthorize()*. [block:code] { "codes": [ { "code": "if (ML.authorized()) {\n\tML.deauthorize();\n}", "language": "javascript", "name": "JavaScript example" } ] } [/block] ## API Access All Rest API endpoints can be accessed through *ML.rest(...)* . ### Parameters of ML.rest(...) [block:parameters] { "data": { "h-0": "Parameter", "h-1": "Description", "0-0": "method", "0-1": "One of the HTTP methods \"GET\", \"POST\", \"PUT\" or \"DELETE\".", "1-0": "path", "1-1": "The path of the API endpoint e.g., \"/maps/1\".", "2-0": "params", "2-1": "A params object with params for the specific API endpoint. Default is {}.", "3-0": "onSuccess", "3-1": "A success callback method. The API response is provided with the first parameter.", "4-0": "onError", "4-1": "An error callback method. The error response is provided with the first parameter." }, "cols": 2, "rows": 5 } [/block] [block:code] { "codes": [ { "code": "var method = 'GET',\n path = '/maps/1',\n params = {},\n onSuccess = function(respObj) {},\n onError = function(respObj) {};\n\nML.rest(method, path, params, onSuccess, onError);", "language": "javascript", "name": "JavaScript example" } ] } [/block] Additional helper methods for API access are: * ML.get(path, params, onSuccess, onError) * ML.post(path, params, onSuccess, onError) * ML.put(path, params, onSuccess, onError) * ML.delete(path, params, onSuccess, onError) * ML.users(id, params, onSuccess, onError) * ML.maps(id, params, onSuccess, onError) * ML.files(id, params, onSuccess, onError) [block:callout] { "type": "info", "title": "/users/me", "body": "To receive user profile data from the resource owner, use the path '/users/me'. And make sure that the related scopes 'userinfo.email userinfo.profile' are provided during the authorization." } [/block]
The JavaScript API is built for web apps running in a browser. It allows quick access to MindMeister's Rest API using the [implicit flow](https://developers.mindmeister.com/docs/oauth-2#section-implicit-flow) of the OAuth 2.0 protocol. **To get started** a client application has to be registered. See [Register your Application](doc:register-application) for details. Make sure that the URL of your web app is added as a **redirect URI**, otherwise the authorization step will fail. Next, add the following line to the HTML header of your web app with the client id, that was created in the previous step. [block:code] { "codes": [ { "code": "<script src=\"https://www.mindmeister.com/api/v2/js/api.js?client_id=[Client_ID]\"></script>", "language": "html", "name": "api.js" } ] } [/block] After including the JavaScript source file, you have access to the **global ML object**. It represents the interface to the entire JavaScript API of MindMeister. ## Authorization Before any API resource can be accessed, the resource owner, so the user has to grant permissions. This is done through *ML.authorize()*. It opens the **OAuth 2.0 consent screen** in a separate window and initiates the [OAuth 2.0 implicit flow](https://developers.mindmeister.com/docs/oauth-2#section-implicit-flow). After the user granted permissions for the requested scope, the window is closed automatically and the callback onSuccess is called. In case of a failure the callback onError is called. After authorization an access token is received and stored internally. This is used automatically for any subsequent API call. [block:code] { "codes": [ { "code": "ML.authorize({\n onSuccess: function() {},\n onError: function() {},\n persist: true,\n scope: 'userinfo.email userinfo.profile mindmeister'\n});", "language": "javascript", "name": "JavaScript example" } ] } [/block] ### Parameters of ML.authorize(...) [block:parameters] { "data": { "h-0": "Parameter", "h-1": "Description", "0-0": "onSuccess", "1-0": "onError", "0-1": "A method that is called when the authorization is granted.", "1-1": "A method that is called in case the authorization failed.", "2-0": "persist", "2-1": "A boolean flag that indicates if the access token will be stored to window.localStorage. Default is *true*.", "3-0": "scope", "3-1": "The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'. Default is '*userinfo.email userinfo.profile mindmeister*'." }, "cols": 2, "rows": 4 } [/block] The **authorization status** can be check with *ML.authorized()*. To **deauthorize** the API access for the user, call *ML.deauthorize()*. [block:code] { "codes": [ { "code": "if (ML.authorized()) {\n\tML.deauthorize();\n}", "language": "javascript", "name": "JavaScript example" } ] } [/block] ## API Access All Rest API endpoints can be accessed through *ML.rest(...)* . ### Parameters of ML.rest(...) [block:parameters] { "data": { "h-0": "Parameter", "h-1": "Description", "0-0": "method", "0-1": "One of the HTTP methods \"GET\", \"POST\", \"PUT\" or \"DELETE\".", "1-0": "path", "1-1": "The path of the API endpoint e.g., \"/maps/1\".", "2-0": "params", "2-1": "A params object with params for the specific API endpoint. Default is {}.", "3-0": "onSuccess", "3-1": "A success callback method. The API response is provided with the first parameter.", "4-0": "onError", "4-1": "An error callback method. The error response is provided with the first parameter." }, "cols": 2, "rows": 5 } [/block] [block:code] { "codes": [ { "code": "var method = 'GET',\n path = '/maps/1',\n params = {},\n onSuccess = function(respObj) {},\n onError = function(respObj) {};\n\nML.rest(method, path, params, onSuccess, onError);", "language": "javascript", "name": "JavaScript example" } ] } [/block] Additional helper methods for API access are: * ML.get(path, params, onSuccess, onError) * ML.post(path, params, onSuccess, onError) * ML.put(path, params, onSuccess, onError) * ML.delete(path, params, onSuccess, onError) * ML.users(id, params, onSuccess, onError) * ML.maps(id, params, onSuccess, onError) * ML.files(id, params, onSuccess, onError) [block:callout] { "type": "info", "title": "/users/me", "body": "To receive user profile data from the resource owner, use the path '/users/me'. And make sure that the related scopes 'userinfo.email userinfo.profile' are provided during the authorization." } [/block]
{"_id":"577fa3240614001900b92c5e","category":"565358949cf4b42b00529a75","link_external":false,"next":{"description":"","pages":[]},"slug":"oauth-2","__v":170,"api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"updates":[],"user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","project":"5652e65ff8206a350049b491","title":"OAuth 2.0","type":"basic","githubsync":"","parentDoc":null,"excerpt":"","hidden":false,"isReference":false,"link_url":"","order":0,"sync_unique":"","body":"The MindMeister API uses [OAuth 2.0](http://tools.ietf.org/html/rfc6749) for authorization. It allows access to API endpoints on behalf of a user who prior gave consent to the accessing third party application.\n\nThree different authorization flows of OAuth 2.0 are provided to receive a valid access token. Which flow to use depends on the use case and the client application type. The **authorization code flow** is designed for server-side apps. The **implicit flow** should be used for client-side apps, e.g. JavaScript apps. The **client credentials flow** is built for client application access only. No user interaction is permitted.\n\nBefore you start with one of the following OAuth 2.0 flows, first you have to register an application as described [here](http://google.com).\n\nThe OAuth 2.0 endpoints are explained [here](doc:oauth-20-endpoints) in detail. For more information about the scopes read [this Chapter](doc:scopes).\n\nIf you just need onetime API access using your own account, you might want to skip the OAuth 2.0 flows and create a [personal access token](doc:personal-access-token) directly.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Use OAuth 2.0 libraries\",\n  \"body\": \"We strongly encourage you to use OAuth 2.0 libraries. It is best practice to use well-debugged code provided by third-parties. It will provide better security and protect your users.\"\n}\n[/block]\n## Authorization Code Flow\n\nThe authorization code flow is the safest and most commonly used flow using OAuth 2.0. It is optimized for confidential clients and includes client authentication. Access tokens are not exposed to the end user. Try to use this flow if it fits to your use case.\n\n###  1) Redirect user to authorization endpoint\nThe resource owner's user-agent has to be directed to the authorization endpoint **https://www.mindmeister.com/oauth2/authorize** with the following parameters\n\n  * **client_id**, this is obtained after [registration of your application](doc:register-application).\n  * **scope**, they define the permission level for your app. See [scopes](doc:scopes) for details.\n  * **redirect_uri**, is the HTTP endpoint on your server that will receive the response from MindMeister.\n  * **response_type**, must be set to *code* to trigger the authorization code flow.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"GET /oauth2/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI\\n\\t&scope=userprofile.email%20mindmeister HTTP/1.1\\nHost: www.mindmeister.com\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS\"\n    }\n  ]\n}\n[/block]\nIf all parameters are present and the request is valid, then the response is a HTTP redirect to either the login or the consent page of MindMeister.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Ask always only for the least requiring scopes. The less you're asking for, the more likely the user will grant permission.\",\n  \"title\": \"Requiring scopes\"\n}\n[/block]\n###  2) User authentication and consent\nThe user has to login on mindmeister.com if he isn't already and then he is asked for granting access to your client application.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/31YtOoyGRleqISyGjryV_mindmeister_consent_screen.png\",\n        \"mindmeister_consent_screen.png\",\n        \"364\",\n        \"509\",\n        \"#607491\",\n        \"\"\n      ],\n      \"sizing\": \"smart\",\n      \"border\": true,\n      \"caption\": \"\"\n    }\n  ]\n}\n[/block]\n###  3) Receive authorization code after redirect\nAfter the user authorized or denied client access, they are redirected to the redirect URI provided earlier. If the user granted access an authorization code is sent within the query string of the redirect url.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Authorization code validity\",\n  \"body\": \"The authorization code is only valid for 10 minutes and can't be reused.\"\n}\n[/block]\n### 4) Exchange code for access token\nYour client requests an access token from the MindMeister token endpoint **https://www.mindmeister.com/oauth2/token** providing the authorization code received in the previous step.\n\nThe request must include the following parameters\n\n * **grant_type**, must be the value *authorization_code*.\n * **code**, the authorization code received from the MindMeister authorization server.\n * **client_id**,  this is obtained after [registration of your application](doc:register-application).\n * **client_secret**, this is created together with the client_id.\n * **scopes**, they define the permission level for your app. See [scopes](doc:scopes) for details.\n * **redirect_uri**, the same redirect URI that was provided in [step 1](https://mindmeister.readme.io/docs/oauth-2#section-1-redirect-user-to-authorization-endpoint).\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /oauth2/token HTTP/1.1\\nHost: www.mindmeister.com\\nContent-Type: application/x-www-form-urlencoded\\n\\ncode=CODE&\\nclient_id=CLIENT_ID&\\nclient_secret=CLIENT_SECRET&\\nredirect_uri=REDIRECT_URI&\\ngrant_type=authorization_code\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS\"\n    }\n  ]\n}\n[/block]\n### 5) Access token response\nThe MindMeister authorization server authenticates the client, validates the authorization code and ensures that the given redirection URI matches the URI used to redirect the client in [step 3](https://mindmeister.readme.io/docs/oauth-2#section-3-receive-authorization-code-after-redirect). \n\nIf valid, the MindMeister server responds back with an JSON object. This contains the following data:\n * **access_token**, the actual access token. It must be kept secretly, because it allows API access on behalf of the respective user.\n * **token_type**, the type of the access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750).\n *  **scope**, the authorized scopes for this access token.\n *  **expires_in** (optional), the lifetime in seconds of the access token. If this parameter is not given then the token doesn't expire by time.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"access_token\\\": \\\"ACCESS_TOKEN\\\",\\n  \\\"token_type\\\": \\\"bearer\\\",\\n  \\\"scope\\\": \\\"userprofile.email mindmeister\\\",\\n  \\\"expires_in\\\": 7200\\n}\",\n      \"language\": \"json\",\n      \"name\": \"JSON Result Format\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Access token validity\",\n  \"body\": \"Access tokens without an **expires_in** parameter don't expire at a certain time and can be revoked only manually from the client or the resource owner.\"\n}\n[/block]\n## Implicit Flow\n\nThe implicit flow is designed for clients that are publicly exposed and can't keep a client secret, e.g. JavaScript applications running in a browser. In this case the client authentication step is left out and the access token is obtained directly by the client. \n\nThis flow relies on the presence of the resource owner and a valid redirect URI. Because the access token is encoded into the fragment of the redirection URI, it may be exposed to the resource owner.\n\n###  1) Redirect user to authorization endpoint\nThe resource owner's user-agent has to be directed to the authorization endpoint **https://www.mindmeister.com/oauth2/authorize** with the following parameters\n\n  * **client_id**, this is obtained after [registration of your application](doc:register-application).\n  * **scope**, they define the permission level for your app. See [scopes](doc:scopes) for details.\n  * **redirect_uri**, is the HTTP endpoint of the client application that will receive the access token.\n  * **response_type**, must be set to *token* to trigger the implicit flow.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"GET /oauth2/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI\\n\\t&scope=userprofile.email%20mindmeister HTTP/1.1\\nHost: www.mindmeister.com\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS\"\n    }\n  ]\n}\n[/block]\n###  2) User authentication and consent\nThe user is asked for granting access to your client application. See [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-2-user-authentication-and-consent) for details.\n\n### 3) Redirect with access token\nIf the resource owner granted permission in the previous step, then the MindMeister authorization server redirects the user back to the given redirect URI. The access token is provided in the fragment of the redirect URI.\n\nThe following parameters are included in the URI fragment\n\n * **access_token**, the actual access token.\n * **token_type**, the type of the access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750).\n *  **expires_in** (optional), the lifetime in seconds of the access token. If this parameter is not given then the token doesn't expire by time.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 302 Found\\nLocation: REDIRECT_URI#access_token=ACCESS_TOKEN&token_type=example&expires_in=7200\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS\"\n    }\n  ]\n}\n[/block]\n### 4) Obtain access token from fragment\nThe access token is sent in the fragement of the redirect URI, though it is only exposed to the user-agent and not to the server of the client application. Usually an embedded script within an HTML document is capable of accessing the full redirect URI including the fragment and finally extracts the access token.\n\n## Client Credentials Flow\n\nThe client application can obtain an access token without user interaction and using only its client credentials as well. This token is not authorized to access any protected user resources, but can be used to request resources under its control.\n\n### 1) Client authentication with access token request\nTo obtain an access token the client application requests the MindMeister token endpoint **https://www.mindmeister.com/oauth2/token** with the following parameters:\n\n * **grant_type**, must be set to *client_credentials*.\n * **client_id**,  this is obtained after [registration of your application](doc:register-application).\n * **client_secret**, this is created together with the client_id.\n * **scopes**, they define the permission level for your app. See [scopes](doc:scopes) for details.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /oauth2/token HTTP/1.1\\nHost: www.mindmeister.com\\nContent-Type: application/x-www-form-urlencoded\\n\\ngrant_type=client_credentials&\\nclient_id=CLIENT_ID&\\nclient_secret=CLIENT_SECRET&\\nscope=userinfo.profilef%20userinfo.email&20mindmeister\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS\"\n    }\n  ]\n}\n[/block]\n### 2) Access token response\nThe MindMeister authorization server authenticates the client and if valid, responds with an access token.\n\nThe response contains the following data:\n * **access_token**, the actual access token.\n * **token_type**, the type of access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750).\n *  **expires_in**, the lifetime in seconds of the access token.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"access_token\\\": \\\"ACCESS_TOKEN\\\",\\n  \\\"token_type\\\": \\\"bearer\\\",\\n  \\\"scope\\\": \\\"userprofile.profile userprofile.email mindmeister\\\",\\n  \\\"expires_in\\\": 7200\\n}\",\n      \"language\": \"json\",\n      \"name\": \"JSON Result Format\"\n    }\n  ]\n}\n[/block]","createdAt":"2016-07-08T12:57:08.342Z","childrenPages":[]}

OAuth 2.0


The MindMeister API uses [OAuth 2.0](http://tools.ietf.org/html/rfc6749) for authorization. It allows access to API endpoints on behalf of a user who prior gave consent to the accessing third party application. Three different authorization flows of OAuth 2.0 are provided to receive a valid access token. Which flow to use depends on the use case and the client application type. The **authorization code flow** is designed for server-side apps. The **implicit flow** should be used for client-side apps, e.g. JavaScript apps. The **client credentials flow** is built for client application access only. No user interaction is permitted. Before you start with one of the following OAuth 2.0 flows, first you have to register an application as described [here](http://google.com). The OAuth 2.0 endpoints are explained [here](doc:oauth-20-endpoints) in detail. For more information about the scopes read [this Chapter](doc:scopes). If you just need onetime API access using your own account, you might want to skip the OAuth 2.0 flows and create a [personal access token](doc:personal-access-token) directly. [block:callout] { "type": "info", "title": "Use OAuth 2.0 libraries", "body": "We strongly encourage you to use OAuth 2.0 libraries. It is best practice to use well-debugged code provided by third-parties. It will provide better security and protect your users." } [/block] ## Authorization Code Flow The authorization code flow is the safest and most commonly used flow using OAuth 2.0. It is optimized for confidential clients and includes client authentication. Access tokens are not exposed to the end user. Try to use this flow if it fits to your use case. ### 1) Redirect user to authorization endpoint The resource owner's user-agent has to be directed to the authorization endpoint **https://www.mindmeister.com/oauth2/authorize** with the following parameters * **client_id**, this is obtained after [registration of your application](doc:register-application). * **scope**, they define the permission level for your app. See [scopes](doc:scopes) for details. * **redirect_uri**, is the HTTP endpoint on your server that will receive the response from MindMeister. * **response_type**, must be set to *code* to trigger the authorization code flow. [block:code] { "codes": [ { "code": "GET /oauth2/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI\n\t&scope=userprofile.email%20mindmeister HTTP/1.1\nHost: www.mindmeister.com", "language": "http", "name": "HTTPS" } ] } [/block] If all parameters are present and the request is valid, then the response is a HTTP redirect to either the login or the consent page of MindMeister. [block:callout] { "type": "info", "body": "Ask always only for the least requiring scopes. The less you're asking for, the more likely the user will grant permission.", "title": "Requiring scopes" } [/block] ### 2) User authentication and consent The user has to login on mindmeister.com if he isn't already and then he is asked for granting access to your client application. [block:image] { "images": [ { "image": [ "https://files.readme.io/31YtOoyGRleqISyGjryV_mindmeister_consent_screen.png", "mindmeister_consent_screen.png", "364", "509", "#607491", "" ], "sizing": "smart", "border": true, "caption": "" } ] } [/block] ### 3) Receive authorization code after redirect After the user authorized or denied client access, they are redirected to the redirect URI provided earlier. If the user granted access an authorization code is sent within the query string of the redirect url. [block:callout] { "type": "info", "title": "Authorization code validity", "body": "The authorization code is only valid for 10 minutes and can't be reused." } [/block] ### 4) Exchange code for access token Your client requests an access token from the MindMeister token endpoint **https://www.mindmeister.com/oauth2/token** providing the authorization code received in the previous step. The request must include the following parameters * **grant_type**, must be the value *authorization_code*. * **code**, the authorization code received from the MindMeister authorization server. * **client_id**, this is obtained after [registration of your application](doc:register-application). * **client_secret**, this is created together with the client_id. * **scopes**, they define the permission level for your app. See [scopes](doc:scopes) for details. * **redirect_uri**, the same redirect URI that was provided in [step 1](https://mindmeister.readme.io/docs/oauth-2#section-1-redirect-user-to-authorization-endpoint). [block:code] { "codes": [ { "code": "POST /oauth2/token HTTP/1.1\nHost: www.mindmeister.com\nContent-Type: application/x-www-form-urlencoded\n\ncode=CODE&\nclient_id=CLIENT_ID&\nclient_secret=CLIENT_SECRET&\nredirect_uri=REDIRECT_URI&\ngrant_type=authorization_code", "language": "http", "name": "HTTPS" } ] } [/block] ### 5) Access token response The MindMeister authorization server authenticates the client, validates the authorization code and ensures that the given redirection URI matches the URI used to redirect the client in [step 3](https://mindmeister.readme.io/docs/oauth-2#section-3-receive-authorization-code-after-redirect). If valid, the MindMeister server responds back with an JSON object. This contains the following data: * **access_token**, the actual access token. It must be kept secretly, because it allows API access on behalf of the respective user. * **token_type**, the type of the access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750). * **scope**, the authorized scopes for this access token. * **expires_in** (optional), the lifetime in seconds of the access token. If this parameter is not given then the token doesn't expire by time. [block:code] { "codes": [ { "code": "{\n \"access_token\": \"ACCESS_TOKEN\",\n \"token_type\": \"bearer\",\n \"scope\": \"userprofile.email mindmeister\",\n \"expires_in\": 7200\n}", "language": "json", "name": "JSON Result Format" } ] } [/block] [block:callout] { "type": "warning", "title": "Access token validity", "body": "Access tokens without an **expires_in** parameter don't expire at a certain time and can be revoked only manually from the client or the resource owner." } [/block] ## Implicit Flow The implicit flow is designed for clients that are publicly exposed and can't keep a client secret, e.g. JavaScript applications running in a browser. In this case the client authentication step is left out and the access token is obtained directly by the client. This flow relies on the presence of the resource owner and a valid redirect URI. Because the access token is encoded into the fragment of the redirection URI, it may be exposed to the resource owner. ### 1) Redirect user to authorization endpoint The resource owner's user-agent has to be directed to the authorization endpoint **https://www.mindmeister.com/oauth2/authorize** with the following parameters * **client_id**, this is obtained after [registration of your application](doc:register-application). * **scope**, they define the permission level for your app. See [scopes](doc:scopes) for details. * **redirect_uri**, is the HTTP endpoint of the client application that will receive the access token. * **response_type**, must be set to *token* to trigger the implicit flow. [block:code] { "codes": [ { "code": "GET /oauth2/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI\n\t&scope=userprofile.email%20mindmeister HTTP/1.1\nHost: www.mindmeister.com", "language": "http", "name": "HTTPS" } ] } [/block] ### 2) User authentication and consent The user is asked for granting access to your client application. See [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-2-user-authentication-and-consent) for details. ### 3) Redirect with access token If the resource owner granted permission in the previous step, then the MindMeister authorization server redirects the user back to the given redirect URI. The access token is provided in the fragment of the redirect URI. The following parameters are included in the URI fragment * **access_token**, the actual access token. * **token_type**, the type of the access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750). * **expires_in** (optional), the lifetime in seconds of the access token. If this parameter is not given then the token doesn't expire by time. [block:code] { "codes": [ { "code": "HTTP/1.1 302 Found\nLocation: REDIRECT_URI#access_token=ACCESS_TOKEN&token_type=example&expires_in=7200", "language": "http", "name": "HTTPS" } ] } [/block] ### 4) Obtain access token from fragment The access token is sent in the fragement of the redirect URI, though it is only exposed to the user-agent and not to the server of the client application. Usually an embedded script within an HTML document is capable of accessing the full redirect URI including the fragment and finally extracts the access token. ## Client Credentials Flow The client application can obtain an access token without user interaction and using only its client credentials as well. This token is not authorized to access any protected user resources, but can be used to request resources under its control. ### 1) Client authentication with access token request To obtain an access token the client application requests the MindMeister token endpoint **https://www.mindmeister.com/oauth2/token** with the following parameters: * **grant_type**, must be set to *client_credentials*. * **client_id**, this is obtained after [registration of your application](doc:register-application). * **client_secret**, this is created together with the client_id. * **scopes**, they define the permission level for your app. See [scopes](doc:scopes) for details. [block:code] { "codes": [ { "code": "POST /oauth2/token HTTP/1.1\nHost: www.mindmeister.com\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=client_credentials&\nclient_id=CLIENT_ID&\nclient_secret=CLIENT_SECRET&\nscope=userinfo.profilef%20userinfo.email&20mindmeister", "language": "http", "name": "HTTPS" } ] } [/block] ### 2) Access token response The MindMeister authorization server authenticates the client and if valid, responds with an access token. The response contains the following data: * **access_token**, the actual access token. * **token_type**, the type of access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750). * **expires_in**, the lifetime in seconds of the access token. [block:code] { "codes": [ { "code": "{\n \"access_token\": \"ACCESS_TOKEN\",\n \"token_type\": \"bearer\",\n \"scope\": \"userprofile.profile userprofile.email mindmeister\",\n \"expires_in\": 7200\n}", "language": "json", "name": "JSON Result Format" } ] } [/block]
The MindMeister API uses [OAuth 2.0](http://tools.ietf.org/html/rfc6749) for authorization. It allows access to API endpoints on behalf of a user who prior gave consent to the accessing third party application. Three different authorization flows of OAuth 2.0 are provided to receive a valid access token. Which flow to use depends on the use case and the client application type. The **authorization code flow** is designed for server-side apps. The **implicit flow** should be used for client-side apps, e.g. JavaScript apps. The **client credentials flow** is built for client application access only. No user interaction is permitted. Before you start with one of the following OAuth 2.0 flows, first you have to register an application as described [here](http://google.com). The OAuth 2.0 endpoints are explained [here](doc:oauth-20-endpoints) in detail. For more information about the scopes read [this Chapter](doc:scopes). If you just need onetime API access using your own account, you might want to skip the OAuth 2.0 flows and create a [personal access token](doc:personal-access-token) directly. [block:callout] { "type": "info", "title": "Use OAuth 2.0 libraries", "body": "We strongly encourage you to use OAuth 2.0 libraries. It is best practice to use well-debugged code provided by third-parties. It will provide better security and protect your users." } [/block] ## Authorization Code Flow The authorization code flow is the safest and most commonly used flow using OAuth 2.0. It is optimized for confidential clients and includes client authentication. Access tokens are not exposed to the end user. Try to use this flow if it fits to your use case. ### 1) Redirect user to authorization endpoint The resource owner's user-agent has to be directed to the authorization endpoint **https://www.mindmeister.com/oauth2/authorize** with the following parameters * **client_id**, this is obtained after [registration of your application](doc:register-application). * **scope**, they define the permission level for your app. See [scopes](doc:scopes) for details. * **redirect_uri**, is the HTTP endpoint on your server that will receive the response from MindMeister. * **response_type**, must be set to *code* to trigger the authorization code flow. [block:code] { "codes": [ { "code": "GET /oauth2/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI\n\t&scope=userprofile.email%20mindmeister HTTP/1.1\nHost: www.mindmeister.com", "language": "http", "name": "HTTPS" } ] } [/block] If all parameters are present and the request is valid, then the response is a HTTP redirect to either the login or the consent page of MindMeister. [block:callout] { "type": "info", "body": "Ask always only for the least requiring scopes. The less you're asking for, the more likely the user will grant permission.", "title": "Requiring scopes" } [/block] ### 2) User authentication and consent The user has to login on mindmeister.com if he isn't already and then he is asked for granting access to your client application. [block:image] { "images": [ { "image": [ "https://files.readme.io/31YtOoyGRleqISyGjryV_mindmeister_consent_screen.png", "mindmeister_consent_screen.png", "364", "509", "#607491", "" ], "sizing": "smart", "border": true, "caption": "" } ] } [/block] ### 3) Receive authorization code after redirect After the user authorized or denied client access, they are redirected to the redirect URI provided earlier. If the user granted access an authorization code is sent within the query string of the redirect url. [block:callout] { "type": "info", "title": "Authorization code validity", "body": "The authorization code is only valid for 10 minutes and can't be reused." } [/block] ### 4) Exchange code for access token Your client requests an access token from the MindMeister token endpoint **https://www.mindmeister.com/oauth2/token** providing the authorization code received in the previous step. The request must include the following parameters * **grant_type**, must be the value *authorization_code*. * **code**, the authorization code received from the MindMeister authorization server. * **client_id**, this is obtained after [registration of your application](doc:register-application). * **client_secret**, this is created together with the client_id. * **scopes**, they define the permission level for your app. See [scopes](doc:scopes) for details. * **redirect_uri**, the same redirect URI that was provided in [step 1](https://mindmeister.readme.io/docs/oauth-2#section-1-redirect-user-to-authorization-endpoint). [block:code] { "codes": [ { "code": "POST /oauth2/token HTTP/1.1\nHost: www.mindmeister.com\nContent-Type: application/x-www-form-urlencoded\n\ncode=CODE&\nclient_id=CLIENT_ID&\nclient_secret=CLIENT_SECRET&\nredirect_uri=REDIRECT_URI&\ngrant_type=authorization_code", "language": "http", "name": "HTTPS" } ] } [/block] ### 5) Access token response The MindMeister authorization server authenticates the client, validates the authorization code and ensures that the given redirection URI matches the URI used to redirect the client in [step 3](https://mindmeister.readme.io/docs/oauth-2#section-3-receive-authorization-code-after-redirect). If valid, the MindMeister server responds back with an JSON object. This contains the following data: * **access_token**, the actual access token. It must be kept secretly, because it allows API access on behalf of the respective user. * **token_type**, the type of the access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750). * **scope**, the authorized scopes for this access token. * **expires_in** (optional), the lifetime in seconds of the access token. If this parameter is not given then the token doesn't expire by time. [block:code] { "codes": [ { "code": "{\n \"access_token\": \"ACCESS_TOKEN\",\n \"token_type\": \"bearer\",\n \"scope\": \"userprofile.email mindmeister\",\n \"expires_in\": 7200\n}", "language": "json", "name": "JSON Result Format" } ] } [/block] [block:callout] { "type": "warning", "title": "Access token validity", "body": "Access tokens without an **expires_in** parameter don't expire at a certain time and can be revoked only manually from the client or the resource owner." } [/block] ## Implicit Flow The implicit flow is designed for clients that are publicly exposed and can't keep a client secret, e.g. JavaScript applications running in a browser. In this case the client authentication step is left out and the access token is obtained directly by the client. This flow relies on the presence of the resource owner and a valid redirect URI. Because the access token is encoded into the fragment of the redirection URI, it may be exposed to the resource owner. ### 1) Redirect user to authorization endpoint The resource owner's user-agent has to be directed to the authorization endpoint **https://www.mindmeister.com/oauth2/authorize** with the following parameters * **client_id**, this is obtained after [registration of your application](doc:register-application). * **scope**, they define the permission level for your app. See [scopes](doc:scopes) for details. * **redirect_uri**, is the HTTP endpoint of the client application that will receive the access token. * **response_type**, must be set to *token* to trigger the implicit flow. [block:code] { "codes": [ { "code": "GET /oauth2/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI\n\t&scope=userprofile.email%20mindmeister HTTP/1.1\nHost: www.mindmeister.com", "language": "http", "name": "HTTPS" } ] } [/block] ### 2) User authentication and consent The user is asked for granting access to your client application. See [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-2-user-authentication-and-consent) for details. ### 3) Redirect with access token If the resource owner granted permission in the previous step, then the MindMeister authorization server redirects the user back to the given redirect URI. The access token is provided in the fragment of the redirect URI. The following parameters are included in the URI fragment * **access_token**, the actual access token. * **token_type**, the type of the access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750). * **expires_in** (optional), the lifetime in seconds of the access token. If this parameter is not given then the token doesn't expire by time. [block:code] { "codes": [ { "code": "HTTP/1.1 302 Found\nLocation: REDIRECT_URI#access_token=ACCESS_TOKEN&token_type=example&expires_in=7200", "language": "http", "name": "HTTPS" } ] } [/block] ### 4) Obtain access token from fragment The access token is sent in the fragement of the redirect URI, though it is only exposed to the user-agent and not to the server of the client application. Usually an embedded script within an HTML document is capable of accessing the full redirect URI including the fragment and finally extracts the access token. ## Client Credentials Flow The client application can obtain an access token without user interaction and using only its client credentials as well. This token is not authorized to access any protected user resources, but can be used to request resources under its control. ### 1) Client authentication with access token request To obtain an access token the client application requests the MindMeister token endpoint **https://www.mindmeister.com/oauth2/token** with the following parameters: * **grant_type**, must be set to *client_credentials*. * **client_id**, this is obtained after [registration of your application](doc:register-application). * **client_secret**, this is created together with the client_id. * **scopes**, they define the permission level for your app. See [scopes](doc:scopes) for details. [block:code] { "codes": [ { "code": "POST /oauth2/token HTTP/1.1\nHost: www.mindmeister.com\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=client_credentials&\nclient_id=CLIENT_ID&\nclient_secret=CLIENT_SECRET&\nscope=userinfo.profilef%20userinfo.email&20mindmeister", "language": "http", "name": "HTTPS" } ] } [/block] ### 2) Access token response The MindMeister authorization server authenticates the client and if valid, responds with an access token. The response contains the following data: * **access_token**, the actual access token. * **token_type**, the type of access token. In most cases it's *Bearer* defined in [[RFC6750]](https://tools.ietf.org/html/rfc6750). * **expires_in**, the lifetime in seconds of the access token. [block:code] { "codes": [ { "code": "{\n \"access_token\": \"ACCESS_TOKEN\",\n \"token_type\": \"bearer\",\n \"scope\": \"userprofile.profile userprofile.email mindmeister\",\n \"expires_in\": 7200\n}", "language": "json", "name": "JSON Result Format" } ] } [/block]
{"_id":"577d2b7a5b4f7b0e009f555c","category":"565358949cf4b42b00529a75","project":"5652e65ff8206a350049b491","updates":[],"api":{"params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required"},"createdAt":"2016-07-06T16:02:02.169Z","githubsync":"","hidden":false,"title":"Endpoints","version":"565358949cf4b42b00529a74","__v":25,"slug":"oauth-20-endpoints","sync_unique":"","type":"basic","user":"5652e5c6a3de712b00d176f8","order":1,"parentDoc":null,"body":"The base url is always https://www.mindmeister.com. Make sure that you always use SSL.\n\n## Authorization endpoint\nPath: **/oauth2/authorize** \n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"respsonse_type\",\n    \"h-0\": \"Parameter\",\n    \"h-1\": \"Description\",\n    \"1-0\": \"client_id\",\n    \"1-1\": \"The client identifier, which is received during the registration of the application.\",\n    \"3-0\": \"scope\",\n    \"3-1\": \"The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'.\",\n    \"4-0\": \"redirect_uri\",\n    \"4-1\": \"The redirect URI of the client application which is set during the [client registration](doc:register-application).\",\n    \"0-1\": \"The value must be either *code* for the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow) or *token* for the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow).\",\n    \"2-0\": \"client_secret\",\n    \"2-1\": \"The client secret which is obtained together with the client ID. It is only required in the case of the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow).\"\n  },\n  \"cols\": 2,\n  \"rows\": 5\n}\n[/block]\n## Token endpoint\nPath: **/oauth2/token** \n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parameter\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"grant_type\",\n    \"1-0\": \"code\",\n    \"2-0\": \"client_id\",\n    \"3-0\": \"client_secret\",\n    \"4-0\": \"scopes\",\n    \"5-0\": \"redirect_uri\",\n    \"3-1\": \"The client secret which is obtained together with the client ID. It is not required in case of the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow).\",\n    \"0-1\": \"The value must be either *authorization_code* for the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow) or *client_credentials* for the [client credentials flow](https://mindmeister.readme.io/docs/oauth-2#section-client-credentials-flow)\",\n    \"1-1\": \"The code obtained from the authorization request. Only required with the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow).\",\n    \"2-1\": \"The client identifier, what is received during the registration of the application.\",\n    \"4-1\": \"The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'.\",\n    \"5-1\": \"The redirect URI of the client application what is set during the [client registration](doc:register-application).\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n## Token info endpoint\nPath: **/oauth2/token/info**\n\nShows details about the token used for authorization.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"GET /oauth2/token/info HTTP/1.1\\nHost: www.mindmeister.com\\nAuthorization: Bearer ACCESS_TOKEN\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS\"\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n\\t\\\"resource_owner_id\\\" : 1,\\n\\t\\\"scopes\\\" : [\\\"userinfo.email\\\", \\\"userinfo.profile\\\", \\\"mindmeister\\\"],\\n\\t\\\"expires_in_seconds\\\" : 863,\\n\\t\\\"application\\\" : {\\n\\t\\t\\\"uid\\\" : 19\\n\\t}\\n}\\n\",\n      \"language\": \"json\",\n      \"name\": \"JSON Response\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"The token info endpoint works only with access tokens which are neither expired nor revoked.\"\n}\n[/block]\n## Revoke token endpoint\nPath: **/oauth2/revoke**\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /oauth2/revoke HTTP/1.1\\nHost: www.mindmeister.com\\nAuthorization: Bearer ACCESS_TOKEN\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS\"\n    }\n  ]\n}\n[/block]\nThe response is always a HTTP 200 OK, even if the token doesn't exist or is revoked already.","excerpt":"","isReference":false,"link_external":false,"link_url":"","childrenPages":[]}

Endpoints


The base url is always https://www.mindmeister.com. Make sure that you always use SSL. ## Authorization endpoint Path: **/oauth2/authorize** [block:parameters] { "data": { "0-0": "respsonse_type", "h-0": "Parameter", "h-1": "Description", "1-0": "client_id", "1-1": "The client identifier, which is received during the registration of the application.", "3-0": "scope", "3-1": "The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'.", "4-0": "redirect_uri", "4-1": "The redirect URI of the client application which is set during the [client registration](doc:register-application).", "0-1": "The value must be either *code* for the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow) or *token* for the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow).", "2-0": "client_secret", "2-1": "The client secret which is obtained together with the client ID. It is only required in the case of the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow)." }, "cols": 2, "rows": 5 } [/block] ## Token endpoint Path: **/oauth2/token** [block:parameters] { "data": { "h-0": "Parameter", "h-1": "Description", "0-0": "grant_type", "1-0": "code", "2-0": "client_id", "3-0": "client_secret", "4-0": "scopes", "5-0": "redirect_uri", "3-1": "The client secret which is obtained together with the client ID. It is not required in case of the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow).", "0-1": "The value must be either *authorization_code* for the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow) or *client_credentials* for the [client credentials flow](https://mindmeister.readme.io/docs/oauth-2#section-client-credentials-flow)", "1-1": "The code obtained from the authorization request. Only required with the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow).", "2-1": "The client identifier, what is received during the registration of the application.", "4-1": "The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'.", "5-1": "The redirect URI of the client application what is set during the [client registration](doc:register-application)." }, "cols": 2, "rows": 6 } [/block] ## Token info endpoint Path: **/oauth2/token/info** Shows details about the token used for authorization. [block:code] { "codes": [ { "code": "GET /oauth2/token/info HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN", "language": "http", "name": "HTTPS" } ] } [/block] [block:code] { "codes": [ { "code": "{\n\t\"resource_owner_id\" : 1,\n\t\"scopes\" : [\"userinfo.email\", \"userinfo.profile\", \"mindmeister\"],\n\t\"expires_in_seconds\" : 863,\n\t\"application\" : {\n\t\t\"uid\" : 19\n\t}\n}\n", "language": "json", "name": "JSON Response" } ] } [/block] [block:callout] { "type": "info", "body": "The token info endpoint works only with access tokens which are neither expired nor revoked." } [/block] ## Revoke token endpoint Path: **/oauth2/revoke** [block:code] { "codes": [ { "code": "POST /oauth2/revoke HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN", "language": "http", "name": "HTTPS" } ] } [/block] The response is always a HTTP 200 OK, even if the token doesn't exist or is revoked already.
The base url is always https://www.mindmeister.com. Make sure that you always use SSL. ## Authorization endpoint Path: **/oauth2/authorize** [block:parameters] { "data": { "0-0": "respsonse_type", "h-0": "Parameter", "h-1": "Description", "1-0": "client_id", "1-1": "The client identifier, which is received during the registration of the application.", "3-0": "scope", "3-1": "The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'.", "4-0": "redirect_uri", "4-1": "The redirect URI of the client application which is set during the [client registration](doc:register-application).", "0-1": "The value must be either *code* for the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow) or *token* for the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow).", "2-0": "client_secret", "2-1": "The client secret which is obtained together with the client ID. It is only required in the case of the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow)." }, "cols": 2, "rows": 5 } [/block] ## Token endpoint Path: **/oauth2/token** [block:parameters] { "data": { "h-0": "Parameter", "h-1": "Description", "0-0": "grant_type", "1-0": "code", "2-0": "client_id", "3-0": "client_secret", "4-0": "scopes", "5-0": "redirect_uri", "3-1": "The client secret which is obtained together with the client ID. It is not required in case of the [implicit flow](https://mindmeister.readme.io/docs/oauth-2#section-implicit-flow).", "0-1": "The value must be either *authorization_code* for the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow) or *client_credentials* for the [client credentials flow](https://mindmeister.readme.io/docs/oauth-2#section-client-credentials-flow)", "1-1": "The code obtained from the authorization request. Only required with the [authorization code flow](https://mindmeister.readme.io/docs/oauth-2#section-authorization-code-flow).", "2-1": "The client identifier, what is received during the registration of the application.", "4-1": "The requested [scopes](doc:scopes) separated by space, e.g. 'userinfo.email mindmeister'.", "5-1": "The redirect URI of the client application what is set during the [client registration](doc:register-application)." }, "cols": 2, "rows": 6 } [/block] ## Token info endpoint Path: **/oauth2/token/info** Shows details about the token used for authorization. [block:code] { "codes": [ { "code": "GET /oauth2/token/info HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN", "language": "http", "name": "HTTPS" } ] } [/block] [block:code] { "codes": [ { "code": "{\n\t\"resource_owner_id\" : 1,\n\t\"scopes\" : [\"userinfo.email\", \"userinfo.profile\", \"mindmeister\"],\n\t\"expires_in_seconds\" : 863,\n\t\"application\" : {\n\t\t\"uid\" : 19\n\t}\n}\n", "language": "json", "name": "JSON Response" } ] } [/block] [block:callout] { "type": "info", "body": "The token info endpoint works only with access tokens which are neither expired nor revoked." } [/block] ## Revoke token endpoint Path: **/oauth2/revoke** [block:code] { "codes": [ { "code": "POST /oauth2/revoke HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN", "language": "http", "name": "HTTPS" } ] } [/block] The response is always a HTTP 200 OK, even if the token doesn't exist or is revoked already.
{"_id":"577fc91d40bede0e00b538cc","api":{"settings":"","url":"","auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]}},"category":"565358949cf4b42b00529a75","createdAt":"2016-07-08T15:39:09.496Z","githubsync":"","hidden":false,"isReference":false,"link_url":"","__v":6,"version":"565358949cf4b42b00529a74","type":"basic","project":"5652e65ff8206a350049b491","link_external":false,"excerpt":"","title":"Scopes","order":2,"parentDoc":null,"slug":"scopes","sync_unique":"","updates":[],"user":"5652e5c6a3de712b00d176f8","body":"The scopes define the access rights of the client application. When an access token is issued and the resource owner is asked for permissions, the scopes define the permission grade. Once an access token is generated the scopes are static and cannot be changed. If access for other scopes is needed a new access token has to be requested.\n\nEach API endpoint requires different scopes. The client application has to make sure that the resource owner granted permission to the respective resource.\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Scope\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"userinfo.profile\",\n    \"1-0\": \"userinfo.email\",\n    \"2-0\": \"mindmeister\",\n    \"3-0\": \"mindmeister.readonly\",\n    \"0-1\": \"Access to general profile information.\",\n    \"1-1\": \"Access to the email address.\",\n    \"2-1\": \"Read and write access to mind maps.\",\n    \"3-1\": \"Read only access to the mind maps.\"\n  },\n  \"cols\": 2,\n  \"rows\": 4\n}\n[/block]","childrenPages":[]}

Scopes


The scopes define the access rights of the client application. When an access token is issued and the resource owner is asked for permissions, the scopes define the permission grade. Once an access token is generated the scopes are static and cannot be changed. If access for other scopes is needed a new access token has to be requested. Each API endpoint requires different scopes. The client application has to make sure that the resource owner granted permission to the respective resource. [block:parameters] { "data": { "h-0": "Scope", "h-1": "Description", "0-0": "userinfo.profile", "1-0": "userinfo.email", "2-0": "mindmeister", "3-0": "mindmeister.readonly", "0-1": "Access to general profile information.", "1-1": "Access to the email address.", "2-1": "Read and write access to mind maps.", "3-1": "Read only access to the mind maps." }, "cols": 2, "rows": 4 } [/block]
The scopes define the access rights of the client application. When an access token is issued and the resource owner is asked for permissions, the scopes define the permission grade. Once an access token is generated the scopes are static and cannot be changed. If access for other scopes is needed a new access token has to be requested. Each API endpoint requires different scopes. The client application has to make sure that the resource owner granted permission to the respective resource. [block:parameters] { "data": { "h-0": "Scope", "h-1": "Description", "0-0": "userinfo.profile", "1-0": "userinfo.email", "2-0": "mindmeister", "3-0": "mindmeister.readonly", "0-1": "Access to general profile information.", "1-1": "Access to the email address.", "2-1": "Read and write access to mind maps.", "3-1": "Read only access to the mind maps." }, "cols": 2, "rows": 4 } [/block]
{"_id":"5784c3fea795200e00f14712","body":"Personal access tokens provide quick access to the MindMeister API. They're similar to normal OAuth 2.0 access tokens with the difference of not being issued from a client application. They only provide access to resources of the token creator.\n\nTo create a personal access token follow these steps:\n\n### 1) Login or create profile\n[Login](https://www.mindmeister.com/de/account/login?product=1&return_to=https%3A%2F%2Fwww.mindmeister.com) with an existing MindMeister account or [signup](https://www.mindmeister.com/de/mm/signup/basic) for a new one.\n\n### 2) Add personal access token from API page\nGo to https://www.mindmeister.com/api and add a new personal access token.\n\n### 3) Select scopes and submit\nSelect the scopes to which the personal access token should have access. These can be changed later.\n\nThe current valid personal access tokens are listed on the [API page](https://www.mindmeister.com/api). They don't expire until they're destroyed or revoked.","category":"565358949cf4b42b00529a75","createdAt":"2016-07-12T10:18:38.055Z","project":"5652e65ff8206a350049b491","link_external":false,"user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","title":"Personal Access Token","updates":[],"__v":4,"api":{"params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required"},"githubsync":"","hidden":false,"sync_unique":"","type":"basic","excerpt":"","isReference":false,"link_url":"","order":3,"parentDoc":null,"slug":"personal-access-token","childrenPages":[]}

Personal Access Token


Personal access tokens provide quick access to the MindMeister API. They're similar to normal OAuth 2.0 access tokens with the difference of not being issued from a client application. They only provide access to resources of the token creator. To create a personal access token follow these steps: ### 1) Login or create profile [Login](https://www.mindmeister.com/de/account/login?product=1&return_to=https%3A%2F%2Fwww.mindmeister.com) with an existing MindMeister account or [signup](https://www.mindmeister.com/de/mm/signup/basic) for a new one. ### 2) Add personal access token from API page Go to https://www.mindmeister.com/api and add a new personal access token. ### 3) Select scopes and submit Select the scopes to which the personal access token should have access. These can be changed later. The current valid personal access tokens are listed on the [API page](https://www.mindmeister.com/api). They don't expire until they're destroyed or revoked.
Personal access tokens provide quick access to the MindMeister API. They're similar to normal OAuth 2.0 access tokens with the difference of not being issued from a client application. They only provide access to resources of the token creator. To create a personal access token follow these steps: ### 1) Login or create profile [Login](https://www.mindmeister.com/de/account/login?product=1&return_to=https%3A%2F%2Fwww.mindmeister.com) with an existing MindMeister account or [signup](https://www.mindmeister.com/de/mm/signup/basic) for a new one. ### 2) Add personal access token from API page Go to https://www.mindmeister.com/api and add a new personal access token. ### 3) Select scopes and submit Select the scopes to which the personal access token should have access. These can be changed later. The current valid personal access tokens are listed on the [API page](https://www.mindmeister.com/api). They don't expire until they're destroyed or revoked.
{"_id":"5784e988a795200e00f147cb","sync_unique":"","title":"API v1 Access","updates":[],"createdAt":"2016-07-12T12:58:48.742Z","link_external":false,"project":"5652e65ff8206a350049b491","category":"565358949cf4b42b00529a75","excerpt":"","slug":"api-v1-with-oauth-20","type":"basic","api":{"settings":"","url":"","auth":"required","params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]}},"hidden":false,"link_url":"","order":4,"parentDoc":null,"user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","__v":24,"body":"[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"GET /services/rest/oauth2?method=mm.maps.getList  HTTP/1.1\\nHost: www.mindmeister.com\\nAuthorization: Bearer ACCESS_TOKEN\",\n      \"language\": \"http\",\n      \"name\": \"HTTPS Example\"\n    }\n  ],\n  \"sidebar\": true\n}\n[/block]\nMost endpoints from the [MindMeister API v1](https://www.mindmeister.com/developers/explore) can be accessed using access tokens from OAuth 2.0. \n\nThe endpoint is https://www.mindmeister.com/services/rest/oauth2 and the method name is passed in the query string. Make sure to pass all required parameters for the respective APIv1 method.\n\n### Permissions and scopes\nThe old permissions level **read** is replaced by the scope **mindmeister.readonly**. The permissions **write** and **delete** are replaced by the scope **mindmeister**. \n\nFor example, if the API v1 method requires written permissions, then it can be accessed only from an access token with the granted scope **mindmeister**.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"The OAuth 2.0 access token replaces the old API key and the old auth token. Additionally the requests don't have to be signed when OAuth 2.0 access tokens are used for authorization.\"\n}\n[/block]","githubsync":"","isReference":false,"childrenPages":[]}

API v1 Access


[block:code] { "codes": [ { "code": "GET /services/rest/oauth2?method=mm.maps.getList HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN", "language": "http", "name": "HTTPS Example" } ], "sidebar": true } [/block] Most endpoints from the [MindMeister API v1](https://www.mindmeister.com/developers/explore) can be accessed using access tokens from OAuth 2.0. The endpoint is https://www.mindmeister.com/services/rest/oauth2 and the method name is passed in the query string. Make sure to pass all required parameters for the respective APIv1 method. ### Permissions and scopes The old permissions level **read** is replaced by the scope **mindmeister.readonly**. The permissions **write** and **delete** are replaced by the scope **mindmeister**. For example, if the API v1 method requires written permissions, then it can be accessed only from an access token with the granted scope **mindmeister**. [block:callout] { "type": "info", "body": "The OAuth 2.0 access token replaces the old API key and the old auth token. Additionally the requests don't have to be signed when OAuth 2.0 access tokens are used for authorization." } [/block]
[block:code] { "codes": [ { "code": "GET /services/rest/oauth2?method=mm.maps.getList HTTP/1.1\nHost: www.mindmeister.com\nAuthorization: Bearer ACCESS_TOKEN", "language": "http", "name": "HTTPS Example" } ], "sidebar": true } [/block] Most endpoints from the [MindMeister API v1](https://www.mindmeister.com/developers/explore) can be accessed using access tokens from OAuth 2.0. The endpoint is https://www.mindmeister.com/services/rest/oauth2 and the method name is passed in the query string. Make sure to pass all required parameters for the respective APIv1 method. ### Permissions and scopes The old permissions level **read** is replaced by the scope **mindmeister.readonly**. The permissions **write** and **delete** are replaced by the scope **mindmeister**. For example, if the API v1 method requires written permissions, then it can be accessed only from an access token with the granted scope **mindmeister**. [block:callout] { "type": "info", "body": "The OAuth 2.0 access token replaces the old API key and the old auth token. Additionally the requests don't have to be signed when OAuth 2.0 access tokens are used for authorization." } [/block]
{"_id":"565359aa63fe3821004b674f","body":"### Scopes\n * **userinfo.profile**, access to profile information except for the email address.\n * **userinfo.email**, access to the email address.","excerpt":"Returns profile information of the access token's resource owner.","githubsync":"","link_url":"","parentDoc":null,"api":{"url":"/users/me","auth":"required","examples":{"codes":[{"name":"","code":"curl -H \"Authorization: Bearer <ACCESS_TOKEN>\" https://www.mindmeister.com/api/v2/users/me","language":"curl"}]},"method":"get","params":[],"results":{"codes":[{"code":"{\n\t\"id\": 1,\n\t\"email\": \"jdemo@example.com\",\n\t\"firstname\": \"John\",\n\t\"lastname\": \"Demo\",\n\t\"name\": \"John Demo\",\n\t\"preferred_language\": \"en\",\n\t\"channel_url\": \"https://www.mindmeister.com/users/channel/100000001\",\n\t\"avatar\": {\n\t\t\"thumb\" : \"https://www.mindmeister.com/images/x1/default_avatar_small.png\",\n\t\t\"original\" : \"https://www.mindmeister.com/images/svg/default_avatar.svg\"\n\t}\n}\n","name":"","status":200,"language":"json"},{"status":"4XX","language":"text","code":"{\n    \"error\": {\n        \"type\": \"errorType\",\n        \"message\": \"Error message\"\n    }\n}"}]},"settings":""},"category":"5653594d1b93fd2d00e55272","project":"5652e65ff8206a350049b491","createdAt":"2015-11-23T18:23:38.417Z","order":0,"hidden":false,"isReference":true,"link_external":false,"slug":"users-me","sync_unique":"","title":"/users/me","__v":15,"user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","type":"get","updates":[],"childrenPages":[]}

get/users/me

Returns profile information of the access token's resource owner.

### Scopes * **userinfo.profile**, access to profile information except for the email address. * **userinfo.email**, access to the email address.

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **userinfo.profile**, access to profile information except for the email address. * **userinfo.email**, access to the email address.
{"_id":"577d2c8887acf617003c4266","category":"577d2bc85b4f7b0e009f555f","parentDoc":null,"sync_unique":"","updates":[],"api":{"auth":"required","examples":{"codes":[{"code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024","language":"curl","name":null}]},"method":"get","params":[{"in":"path","_id":"577e20fb2bcb6b0e00e9f776","default":"","desc":"The id of the map.","name":"id","ref":"","required":true,"type":"int"}],"results":{"codes":[{"name":"","code":"{\n\t\"id\" : 1024,\n\t\"user_id\" : 10,\n\t\"root_id\" : 12345,\n\t\"revision\" : 20,\n\t\"title\" : \"My Sample Map\",\n\t\"root_title\" : \"My Sample Map\",\n\t\"description\" : \"This is the description of my sample map.\",\n\t\"not_final\" : null,\n\t\"import_origin\" : null,\n\t\"view_counter\" : null,\n\t\"rating\" : null,\n\t\"sum_rating\" : null,\n\t\"num_rating\" : null,\n\t\"subshare\" : true,\n\t\"created_at\" : \"2015-02-11T15:40:28.000Z\",\n\t\"updated_at\" : \"2015-02-11T15:41:02.000Z\",\n\t\"category_id\" : null,\n\t\"allow_copy_export\" : true,\n\t\"is_template\" : false,\n\t\"public_license\" : null,\n\t\"featured\" : null,\n\t\"language\" : \"en\",\n\t\"theme_id\" : 48,\n\t\"share_token\" : null,\n\t\"sharing\" : 0,\n\t\"layout\" : 0,\n\t\"public_listing\" : true,\n\t\"copy_counter\" : 0,\n\t\"voting\" : false\n}\n","language":"json","status":200},{"status":"4XX","code":"{\n    \"error\": {\n        \"type\": \"errorType\",\n        \"message\": \"Error message\"\n    }\n}","language":"json","name":"Error"}]},"settings":"","url":"/maps/:id"},"editedParams":true,"editedParams2":true,"isReference":true,"project":"5652e65ff8206a350049b491","__v":3,"githubsync":"","link_external":false,"link_url":"","slug":"maps","user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**","createdAt":"2016-07-06T16:06:32.402Z","excerpt":"Get the map metadata in json.","hidden":false,"order":0,"title":"/maps/:id","type":"get","childrenPages":[]}

get/maps/:id

Get the map metadata in json.

Path Params

id:
required
integer
The id of the map.
### Scopes * **mindmeister.readonly** * **mindmeister**

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister**
{"_id":"577e4d0c47a9ab0e003e009d","updates":[],"user":"5652e5c6a3de712b00d176f8","body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Personal subscription required\",\n  \"body\": \"The resource owner must have a valid subscription of the Personal plan to get the map as an image.\"\n}\n[/block]","githubsync":"","sync_unique":"","type":"get","__v":2,"category":"577d2bc85b4f7b0e009f555f","excerpt":"Get map as an image file. The formats png and jpeg are supported.","slug":"maps-as-image","isReference":true,"link_external":false,"parentDoc":null,"title":"/maps/:id as image","api":{"auth":"required","examples":{"codes":[{"name":null,"language":"curl","code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024.png?disposition=inline&width=200"}]},"method":"get","params":[{"default":"","type":"int","name":"id","in":"path","_id":"577e20fb2bcb6b0e00e9f776","ref":"","required":true,"desc":"The id of the map."},{"in":"path","_id":"577e4db8c7b5c50e00a709fc","ref":"","required":true,"desc":"Supported formats are 'png' and 'jpeg'.","default":"","type":"string","name":"image_format"},{"name":"disposition","in":"query","_id":"577e37b4c7b5c50e00a7098b","ref":"","required":false,"desc":"Specifies whether the image will be shown inline or downloaded. Valid values are ‘inline’ and ‘attachment’.","default":"attachment","type":"string"},{"default":"false","type":"boolean","name":"centered","in":"query","_id":"577e3a762bcb6b0e00e9f7c2","ref":"","required":false,"desc":"If true the root node is in the center of the image."},{"_id":"577e3a762bcb6b0e00e9f7c1","ref":"","required":false,"desc":"If true all sub nodes are shown, otherwise not expanded nodes are hidden.","default":"false","type":"boolean","name":"expanded","in":"query"},{"_id":"577e3d36781f3e0e005fba0d","ref":"","required":false,"desc":"If true the background of the map is hidden.","default":"false","type":"boolean","name":"no_background","in":"query"},{"type":"int","_id":"577e3d36781f3e0e005fba0c","default":"","desc":"The width in pixels of the image.","in":"query","name":"width","ref":"","required":false},{"required":false,"type":"int","_id":"577e3d36781f3e0e005fba0b","default":"","desc":"The height in pixels of the image.","in":"query","name":"height","ref":""},{"default":"true","type":"boolean","name":"keep_ratio","in":"query","_id":"577e3d36781f3e0e005fba0a","ref":"","required":false,"desc":"If false the provided width and/or height is used and the original aspect ratio is ignored."}],"results":{"codes":[{"status":200,"language":"text","code":"The image file of the map in the requested format."}]},"settings":"","url":"/maps/:id.:image_format"},"editedParams2":true,"hidden":false,"version":"565358949cf4b42b00529a74","project":"5652e65ff8206a350049b491","createdAt":"2016-07-07T12:37:32.131Z","editedParams":true,"link_url":"","order":1,"childrenPages":[]}

get/maps/:id as image

Get map as an image file. The formats png and jpeg are supported.

Path Params

id:
required
integer
The id of the map.
image_format:
required
string
Supported formats are 'png' and 'jpeg'.

Query Params

disposition:
stringattachment
Specifies whether the image will be shown inline or downloaded. Valid values are ‘inline’ and ‘attachment’.
centered:
booleanfalse
If true the root node is in the center of the image.
expanded:
booleanfalse
If true all sub nodes are shown, otherwise not expanded nodes are hidden.
no_background:
booleanfalse
If true the background of the map is hidden.
width:
integer
The width in pixels of the image.
height:
integer
The height in pixels of the image.
keep_ratio:
booleantrue
If false the provided width and/or height is used and the original aspect ratio is ignored.
### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Personal subscription required", "body": "The resource owner must have a valid subscription of the Personal plan to get the map as an image." } [/block]

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Personal subscription required", "body": "The resource owner must have a valid subscription of the Personal plan to get the map as an image." } [/block]
{"_id":"577e4de947a9ab0e003e00a3","body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Personal subscription required\",\n  \"body\": \"The resource owner must have a valid subscription of the Personal plan to get the map in the file formats '.mm', '.xmind' and '.mmind'.\"\n}\n[/block]","githubsync":"","link_external":false,"user":"5652e5c6a3de712b00d176f8","api":{"url":"/maps/:id.:file_format","auth":"required","examples":{"codes":[{"code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024.mind","language":"curl"}]},"method":"get","params":[{"name":"id","in":"path","_id":"577e50952bcb6b0e00e9f822","ref":"","required":true,"desc":"The id of the map.","default":"","type":"int"},{"name":"file_format","ref":"","required":true,"type":"string","in":"path","_id":"577e50952bcb6b0e00e9f821","default":"","desc":"Supported files formats are: 'mind' (MindMeister), 'mm' (Freemind), 'xmind' (XMind) and 'mmind' (MindManager)."}],"results":{"codes":[{"status":200,"language":"text","code":"The file of the map in the requested format."}]},"settings":""},"type":"get","updates":[],"version":"565358949cf4b42b00529a74","editedParams":true,"hidden":false,"project":"5652e65ff8206a350049b491","sync_unique":"","title":"/maps/:id as file","excerpt":"Get the map in different native mind mapping formats. Supported file formats are: '.mind' (MindMeister), '.mm' (Freemind), '.xmind' (XMind) and '.mmind' (MindManager).","isReference":true,"link_url":"","__v":9,"category":"577d2bc85b4f7b0e009f555f","createdAt":"2016-07-07T12:41:13.036Z","editedParams2":true,"order":2,"parentDoc":null,"slug":"maps-as-file","childrenPages":[]}

get/maps/:id as file

Get the map in different native mind mapping formats. Supported file formats are: '.mind' (MindMeister), '.mm' (Freemind), '.xmind' (XMind) and '.mmind' (MindManager).

Path Params

id:
required
integer
The id of the map.
file_format:
required
string
Supported files formats are: 'mind' (MindMeister), 'mm' (Freemind), 'xmind' (XMind) and 'mmind' (MindManager).
### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Personal subscription required", "body": "The resource owner must have a valid subscription of the Personal plan to get the map in the file formats '.mm', '.xmind' and '.mmind'." } [/block]

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Personal subscription required", "body": "The resource owner must have a valid subscription of the Personal plan to get the map in the file formats '.mm', '.xmind' and '.mmind'." } [/block]
{"_id":"577e4c402bcb6b0e00e9f80a","excerpt":"Get the map as a Microsoft Word docx file.","slug":"maps-as-docxc","title":"/maps/:id.docx","updates":[],"api":{"auth":"required","examples":{"codes":[{"language":"curl","code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024.docx?votes=false&tasks=false"}]},"method":"get","params":[{"_id":"577e7bd064ca532400693330","default":"true","desc":"Show links on nodes in docx file.","name":"links","ref":"","required":false,"type":"boolean","in":"query"},{"in":"query","_id":"577e7bd064ca53240069332f","default":"true","desc":"Show icons on nodes in docx file.","name":"icons","ref":"","required":false,"type":"boolean"},{"type":"boolean","in":"query","_id":"577e7bd064ca53240069332e","default":"true","desc":"Show images on nodes in docx file.","name":"images","ref":"","required":false},{"name":"tasks","ref":"","required":false,"type":"boolean","in":"query","_id":"577e7bd064ca53240069332d","default":"true","desc":"Show tasks on nodes in docx file."},{"default":"true","desc":"Embed attachments on nodes to docx file.","name":"attachments","ref":"","required":false,"type":"boolean","in":"query","_id":"577e7bd064ca53240069332c"},{"desc":"Show comments on nodes in docx file.","name":"comments","ref":"","required":false,"type":"boolean","in":"query","_id":"577e7bd064ca53240069332b","default":"true"},{"ref":"","required":false,"type":"boolean","in":"query","_id":"577e7bd064ca53240069332a","default":"true","desc":"Show votes on nodes in docx file.","name":"votes"},{"_id":"577e7bd064ca532400693329","default":"true","desc":"Add numbering on headers to docx file.","name":"header_numbering","ref":"","required":false,"type":"boolean","in":"query"},{"_id":"577e7bd064ca532400693328","default":"true","desc":"Add table of content to docx file.","name":"content_table","ref":"","required":false,"type":"boolean","in":"query"},{"_id":"577e7bd064ca532400693327","default":"true","desc":"Add cover page to docx file.","name":"cover_page","ref":"","required":false,"type":"boolean","in":"query"},{"in":"query","_id":"577e7bd064ca532400693326","default":"true","desc":"Show page header in docx file.","name":"header","ref":"","required":false,"type":"boolean"},{"default":"true","desc":"Show page footer in docx file.","name":"footer","ref":"","required":false,"type":"boolean","in":"query","_id":"577e7bd064ca532400693325"},{"required":false,"type":"string","in":"query","_id":"577e7bd064ca532400693324","default":"true","desc":"If 'true' add HTML notes, if 'plain' add just plain text of notes and if 'false' notes are excluded in docx file.","name":"notes","ref":""},{"required":false,"type":"int","in":"query","_id":"577e7bd064ca532400693323","default":"","desc":"If set, only add nodes with a lower rank than max_header_level to docx file.","name":"max_header_level","ref":""}],"results":{"codes":[{"name":"","status":200,"language":"text","code":"A docx file of the requested map."}]},"settings":"","url":"/maps/:id.docx"},"body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Pro subscription required\",\n  \"body\": \"The resource owner must have a valid subscription of the Pro plan to get the map as a docx file.\"\n}\n[/block]","createdAt":"2016-07-07T12:34:08.597Z","editedParams":true,"user":"5652e5c6a3de712b00d176f8","githubsync":"","parentDoc":null,"sync_unique":"","__v":6,"hidden":false,"link_url":"","order":3,"project":"5652e65ff8206a350049b491","type":"get","version":"565358949cf4b42b00529a74","category":"577d2bc85b4f7b0e009f555f","editedParams2":true,"isReference":true,"link_external":false,"childrenPages":[]}

get/maps/:id.docx

Get the map as a Microsoft Word docx file.

Query Params

links:
booleantrue
Show links on nodes in docx file.
icons:
booleantrue
Show icons on nodes in docx file.
images:
booleantrue
Show images on nodes in docx file.
tasks:
booleantrue
Show tasks on nodes in docx file.
attachments:
booleantrue
Embed attachments on nodes to docx file.
comments:
booleantrue
Show comments on nodes in docx file.
votes:
booleantrue
Show votes on nodes in docx file.
header_numbering:
booleantrue
Add numbering on headers to docx file.
content_table:
booleantrue
Add table of content to docx file.
cover_page:
booleantrue
Add cover page to docx file.
header:
booleantrue
Show page header in docx file.
footer:
booleantrue
Show page footer in docx file.
notes:
stringtrue
If 'true' add HTML notes, if 'plain' add just plain text of notes and if 'false' notes are excluded in docx file.
max_header_level:
integer
If set, only add nodes with a lower rank than max_header_level to docx file.
### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Pro subscription required", "body": "The resource owner must have a valid subscription of the Pro plan to get the map as a docx file." } [/block]

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Pro subscription required", "body": "The resource owner must have a valid subscription of the Pro plan to get the map as a docx file." } [/block]
{"_id":"577e4c532bcb6b0e00e9f80c","type":"get","version":"565358949cf4b42b00529a74","__v":3,"editedParams2":true,"hidden":false,"isReference":true,"parentDoc":null,"project":"5652e65ff8206a350049b491","title":"/maps/:id.pptx","updates":[],"api":{"params":[{"default":"","desc":"The id of the map.","name":"id","ref":"","required":true,"type":"int","in":"path","_id":"577e79d8aed7eb19004a0aa4"}],"results":{"codes":[{"code":"A pptx file of the requested map.","name":"","status":200,"language":"text"}]},"settings":"","url":"/maps/:id.pptx","auth":"required","examples":{"codes":[{"language":"curl","code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024.pptx"}]},"method":"get"},"body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Pro subscription required\",\n  \"body\": \"The resource owner must have a valid subscription of the Pro plan to get the map as a pptx file.\"\n}\n[/block]","category":"577d2bc85b4f7b0e009f555f","createdAt":"2016-07-07T12:34:27.619Z","editedParams":true,"githubsync":"","slug":"maps-as-pptx","user":"5652e5c6a3de712b00d176f8","sync_unique":"","excerpt":"Get map as Microsoft PowerPoint pptx file.","link_external":false,"link_url":"","order":4,"childrenPages":[]}

get/maps/:id.pptx

Get map as Microsoft PowerPoint pptx file.

Path Params

id:
required
integer
The id of the map.
### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Pro subscription required", "body": "The resource owner must have a valid subscription of the Pro plan to get the map as a pptx file." } [/block]

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Pro subscription required", "body": "The resource owner must have a valid subscription of the Pro plan to get the map as a pptx file." } [/block]
{"_id":"577e4c772bcb6b0e00e9f80e","excerpt":"Get map as pdf file.","parentDoc":null,"slug":"maps-as-pdf","type":"get","order":5,"sync_unique":"","user":"5652e5c6a3de712b00d176f8","api":{"settings":"","url":"/maps/:id.pdf","auth":"required","examples":{"codes":[{"code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024.pdf","language":"curl"}]},"method":"get","params":[{"_id":"577e79dfe6c7451900808262","default":"","desc":"The id of the map.","name":"id","ref":"","required":true,"type":"int","in":"path"}],"results":{"codes":[{"language":"text","code":"A pdf file of the requested map.","name":"","status":200}]}},"createdAt":"2016-07-07T12:35:03.331Z","editedParams":true,"hidden":false,"updates":[],"version":"565358949cf4b42b00529a74","category":"577d2bc85b4f7b0e009f555f","link_external":false,"project":"5652e65ff8206a350049b491","title":"/maps/:id.pdf","githubsync":"","isReference":true,"link_url":"","__v":4,"body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Pro subscription required\",\n  \"body\": \"The resource owner must have a valid subscription of the Personal plan to get the map as a pdf file.\"\n}\n[/block]","editedParams2":true,"childrenPages":[]}

get/maps/:id.pdf

Get map as pdf file.

Path Params

id:
required
integer
The id of the map.
### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Pro subscription required", "body": "The resource owner must have a valid subscription of the Personal plan to get the map as a pdf file." } [/block]

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "info", "title": "Pro subscription required", "body": "The resource owner must have a valid subscription of the Personal plan to get the map as a pdf file." } [/block]
{"_id":"577e4c0f6172c720001285aa","api":{"method":"get","params":[{"ref":"","required":true,"type":"int","in":"path","_id":"577e79e564ca53240069331d","default":"","desc":"The id of the map.","name":"id"}],"results":{"codes":[{"status":200,"language":"text","code":"A rtf text file of the requested map.","name":""}]},"settings":"","url":"/maps/:id.rtf","auth":"required","examples":{"codes":[{"language":"curl","code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024.rtf"}]}},"order":6,"updates":[],"version":"565358949cf4b42b00529a74","__v":4,"body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**","category":"577d2bc85b4f7b0e009f555f","link_external":false,"project":"5652e65ff8206a350049b491","createdAt":"2016-07-07T12:33:19.771Z","editedParams":true,"hidden":false,"parentDoc":null,"link_url":"","slug":"maps-as-rtf","sync_unique":"","editedParams2":true,"excerpt":"Get map as rtf file.","githubsync":"","isReference":true,"title":"/maps/:id.rtf","type":"get","user":"5652e5c6a3de712b00d176f8","childrenPages":[]}

get/maps/:id.rtf

Get map as rtf file.

Path Params

id:
required
integer
The id of the map.
### Scopes * **mindmeister.readonly** * **mindmeister**

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister**
{"_id":"577e50f047a9ab0e003e00c1","__v":0,"excerpt":"Get a zip file with images of the presentation slides.","hidden":false,"link_external":false,"sync_unique":"","user":"5652e5c6a3de712b00d176f8","createdAt":"2016-07-07T12:54:08.183Z","editedParams2":true,"githubsync":"","type":"get","updates":[],"body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Presentation not found\",\n  \"body\": \"If the requested map doesn't contain a presentation then the response is 404 Not Found.\"\n}\n[/block]","category":"577d2bc85b4f7b0e009f555f","isReference":true,"order":7,"slug":"maps-presentation","title":"/maps/:id/presentation.zip","version":"565358949cf4b42b00529a74","api":{"results":{"codes":[{"status":200,"language":"text","code":"A zip file with images of the presentation slides."},{"language":"text","code":"The map is not found or the map doesn't contain a presentation.","status":404}]},"settings":"","url":"/maps/:id/presentation.zip","auth":"required","examples":{"codes":[{"code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024/presentation.zip","language":"curl","name":null}]},"method":"get","params":[{"_id":"577e20fb2bcb6b0e00e9f776","ref":"","required":true,"desc":"The id of the map.","default":"","type":"int","name":"id","in":"path"}]},"editedParams":true,"link_url":"","parentDoc":null,"project":"5652e65ff8206a350049b491","childrenPages":[]}

get/maps/:id/presentation.zip

Get a zip file with images of the presentation slides.

Path Params

id:
required
integer
The id of the map.
### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "warning", "title": "Presentation not found", "body": "If the requested map doesn't contain a presentation then the response is 404 Not Found." } [/block]

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister** [block:callout] { "type": "warning", "title": "Presentation not found", "body": "If the requested map doesn't contain a presentation then the response is 404 Not Found." } [/block]
{"_id":"58d15b143c7b842f0056e53d","project":"5652e65ff8206a350049b491","updates":[],"category":"58d15f1894c3eb37002f5a42","parentDoc":null,"slug":"mapsmap_idrightsid","sync_unique":"","title":"/maps/:map_id/rights/:id","excerpt":"Get an access right to a specific map by id.","link_external":false,"createdAt":"2017-03-21T16:55:48.599Z","githubsync":"","isReference":false,"order":1,"type":"get","api":{"auth":"required","examples":{"codes":[{"code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024/rights/64","language":"curl","name":null}]},"method":"get","params":[{"desc":"The id of the map.","default":"","type":"int","name":"map_id","_id":"577e20fb2bcb6b0e00e9f776","ref":"","in":"path","required":true},{"_id":"58d15b5dfca38f1b00f7a340","ref":"","in":"path","required":true,"desc":"The id of the right.","default":"","type":"int","name":"id"}],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"id\" : 64,\n  \"type\" : \"user\",\n  \"role\" : \"owner\",\n  \"name\" : \"Johnny Danials\",\n  \"email\" : \"me@example.com\",\n  \"avatar_thumb\" : \"https://www.mindmeister.com/images/default_avatar.svg\"\n}"},{"status":404,"language":"text","code":"The right is not found."}]},"settings":"","url":"/maps/:map_id/rights/:id"},"body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**","hidden":false,"link_url":"","next":{"pages":[],"description":""},"user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","__v":1,"childrenPages":[]}

get/maps/:map_id/rights/:id

Get an access right to a specific map by id.

Path Params

map_id:
required
integer
The id of the map.
id:
required
integer
The id of the right.
### Scopes * **mindmeister.readonly** * **mindmeister**

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister**
{"_id":"58d159ccfca38f1b00f7a319","slug":"mapsidrights","sync_unique":"","order":999,"parentDoc":null,"hidden":false,"link_url":"","next":{"pages":[],"description":""},"title":"/maps/:map_id/rights","__v":0,"excerpt":"Get access rights of a specific map.","createdAt":"2017-03-21T16:50:20.408Z","isReference":false,"link_external":false,"project":"5652e65ff8206a350049b491","type":"get","updates":[],"category":"58d15f1894c3eb37002f5a42","githubsync":"","user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","api":{"examples":{"codes":[{"name":null,"code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/maps/1024/rights","language":"curl"}]},"method":"get","params":[{"name":"map_id","ref":"","required":true,"type":"int","_id":"577e20fb2bcb6b0e00e9f776","default":"","desc":"The id of the map.","in":"path"}],"results":{"codes":[{"code":"[\n\t{\n\t\t\"id\" : 64,\n\t\t\"type\" : \"user\",\n\t\t\"role\" : \"owner\",\n\t\t\"name\" : \"Johnny Daniels\",\n\t\t\"email\" : \"me@example.com\",\n\t\t\"avatar_thumb\" : \"https://www.mindmeister.com/images/default_avatar.svg\"\n\t}, {\n\t\t\"id\" : 65,\n\t\t\"type\" : \"group\",\n\t\t\"role\" : \"writer\",\n\t\t\"name\" : \"Marketing\"\n\t}, {\n\t\t\"id\" : 66,\n\t\t\"type\" : \"user\",\n\t\t\"role\" : \"writer\",\n\t\t\"name\" : \"Max Mustermann\",\n\t\t\"email\" : \"me2@example.com\",\n\t\t\"avatar_thumb\" : \"https://www.mindmeister.com/images/default_avatar.svg\"\n\t}\n]\n","language":"json","status":200},{"code":"The map is not found.","language":"text","status":404}]},"settings":"","url":"/maps/:map_id/rights","auth":"required"},"body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**\n\n### Resource representations\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Property name\",\n    \"h-1\": \"Value\",\n    \"h-2\": \"Description\",\n    \"0-0\": \"**id** \",\n    \"0-1\": \"integer\",\n    \"0-2\": \"The ID of this right. This is a unique identifier.\",\n    \"1-0\": \"**type** \",\n    \"1-1\": \"string\",\n    \"1-2\": \"The type of the grantee. Valid values are:\\n* user\\n* group\\n* invitation\\n* anyone\",\n    \"2-0\": \"**role** \",\n    \"2-1\": \"string\",\n    \"2-2\": \"The role granted by this right. The following are currently allowed:\\n* owner\\n* writer\\n* reader\",\n    \"3-0\": \"**name** \",\n    \"4-0\": \"**email** \",\n    \"5-0\": \"**avatar_thumb** \",\n    \"3-1\": \"string\",\n    \"3-2\": \"A displayable name for users, groups or invitations. In case of invitations the email address is given.\",\n    \"4-1\": \"string\",\n    \"5-1\": \"string\",\n    \"4-2\": \"The email address of the user or invitation to which this permission refers. There is no email field for groups.\",\n    \"5-2\": \"A link to the user's avatar image. This is only provided for users, not groups and invitations.\"\n  },\n  \"cols\": 3,\n  \"rows\": 6\n}\n[/block]","childrenPages":[]}

get/maps/:map_id/rights

Get access rights of a specific map.

Path Params

map_id:
required
integer
The id of the map.
### Scopes * **mindmeister.readonly** * **mindmeister** ### Resource representations [block:parameters] { "data": { "h-0": "Property name", "h-1": "Value", "h-2": "Description", "0-0": "**id** ", "0-1": "integer", "0-2": "The ID of this right. This is a unique identifier.", "1-0": "**type** ", "1-1": "string", "1-2": "The type of the grantee. Valid values are:\n* user\n* group\n* invitation\n* anyone", "2-0": "**role** ", "2-1": "string", "2-2": "The role granted by this right. The following are currently allowed:\n* owner\n* writer\n* reader", "3-0": "**name** ", "4-0": "**email** ", "5-0": "**avatar_thumb** ", "3-1": "string", "3-2": "A displayable name for users, groups or invitations. In case of invitations the email address is given.", "4-1": "string", "5-1": "string", "4-2": "The email address of the user or invitation to which this permission refers. There is no email field for groups.", "5-2": "A link to the user's avatar image. This is only provided for users, not groups and invitations." }, "cols": 3, "rows": 6 } [/block]

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister** ### Resource representations [block:parameters] { "data": { "h-0": "Property name", "h-1": "Value", "h-2": "Description", "0-0": "**id** ", "0-1": "integer", "0-2": "The ID of this right. This is a unique identifier.", "1-0": "**type** ", "1-1": "string", "1-2": "The type of the grantee. Valid values are:\n* user\n* group\n* invitation\n* anyone", "2-0": "**role** ", "2-1": "string", "2-2": "The role granted by this right. The following are currently allowed:\n* owner\n* writer\n* reader", "3-0": "**name** ", "4-0": "**email** ", "5-0": "**avatar_thumb** ", "3-1": "string", "3-2": "A displayable name for users, groups or invitations. In case of invitations the email address is given.", "4-1": "string", "5-1": "string", "4-2": "The email address of the user or invitation to which this permission refers. There is no email field for groups.", "5-2": "A link to the user's avatar image. This is only provided for users, not groups and invitations." }, "cols": 3, "rows": 6 } [/block]
{"_id":"577e85a12bcb6b0e00e9f918","body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**","editedParams":true,"title":"/files/:id/image","type":"get","api":{"method":"get","params":[{"default":"","type":"int","name":"id","in":"path","_id":"577e84d464ca532400693353","ref":"","required":true,"desc":"The id of the image file."},{"_id":"577e84e564ca532400693354","ref":"","required":false,"desc":"Specifies whether the image will be shown inline or downloaded. Valid values are ‘inline’ and ‘attachment’.","default":"","type":"string","name":"disposition","in":"query"}],"results":{"codes":[{"status":200,"language":"text","code":"The requested image file.","name":""}]},"settings":"","url":"/files/:id/image","auth":"required","examples":{"codes":[{"language":"text","code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/files/1024/image"}]}},"category":"577d2bf17a157c0e002058ad","parentDoc":null,"project":"5652e65ff8206a350049b491","slug":"files-image","sync_unique":"","user":"5652e5c6a3de712b00d176f8","createdAt":"2016-07-07T16:38:57.941Z","isReference":true,"link_url":"","version":"565358949cf4b42b00529a74","order":0,"updates":[],"__v":0,"editedParams2":true,"excerpt":"Get uploaded images by their id.","githubsync":"","hidden":false,"link_external":false,"childrenPages":[]}

get/files/:id/image

Get uploaded images by their id.

Path Params

id:
required
integer
The id of the image file.

Query Params

disposition:
string
Specifies whether the image will be shown inline or downloaded. Valid values are ‘inline’ and ‘attachment’.
### Scopes * **mindmeister.readonly** * **mindmeister**

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister**
{"_id":"577e84d464ca532400693352","link_url":"","slug":"files-attachment","sync_unique":"","updates":[],"user":"5652e5c6a3de712b00d176f8","api":{"auth":"required","examples":{"codes":[{"code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/files/1024/attachment","language":"text"}]},"method":"get","params":[{"required":true,"type":"int","in":"path","_id":"577e84d464ca532400693353","default":"","desc":"The id of the attachment file.","name":"id","ref":""}],"results":{"codes":[{"name":"","status":200,"language":"text","code":"The requested attachment file."}]},"settings":"","url":"/files/:id/attachment"},"category":"577d2bf17a157c0e002058ad","excerpt":"Get uploaded attachments by their id.","githubsync":"","hidden":false,"link_external":false,"order":1,"project":"5652e65ff8206a350049b491","__v":2,"createdAt":"2016-07-07T16:35:32.111Z","editedParams":true,"type":"get","version":"565358949cf4b42b00529a74","body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**","title":"/files/:id/attachment","editedParams2":true,"isReference":true,"parentDoc":null,"childrenPages":[]}

get/files/:id/attachment

Get uploaded attachments by their id.

Path Params

id:
required
integer
The id of the attachment file.
### Scopes * **mindmeister.readonly** * **mindmeister**

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister**
{"_id":"577e862364ca532400693357","__v":1,"editedParams2":true,"link_external":false,"title":"/files/:id/theme_background","body":"### Scopes\n * **mindmeister.readonly**\n * **mindmeister**","category":"577d2bf17a157c0e002058ad","createdAt":"2016-07-07T16:41:07.897Z","link_url":"","type":"get","updates":[],"editedParams":true,"hidden":false,"slug":"files-theme-background","sync_unique":"","user":"5652e5c6a3de712b00d176f8","version":"565358949cf4b42b00529a74","api":{"method":"get","params":[{"default":"","type":"int","name":"id","in":"path","_id":"577e84d464ca532400693353","ref":"","required":true,"desc":"The id of the theme background."},{"in":"query","_id":"577e865c64ca532400693358","ref":"","required":false,"desc":"Specifies whether the image will be shown inline or downloaded. Valid values are ‘inline’ and ‘attachment’.","default":"","type":"string","name":"disposition"}],"results":{"codes":[{"name":"","code":"The requested theme background image file.","language":"text","status":200}]},"settings":"","url":"/files/:id/theme_background","auth":"required","examples":{"codes":[{"language":"text","code":"curl -H \"Authorization: Bearer ACCESS_TOKEN\" https://www.mindmeister.com/api/v2/files/1024/theme_background"}]}},"excerpt":"Get theme_backgorunds by their id.","githubsync":"","isReference":true,"order":2,"parentDoc":null,"project":"5652e65ff8206a350049b491","childrenPages":[]}

get/files/:id/theme_background

Get theme_backgorunds by their id.

Path Params

id:
required
integer
The id of the theme background.

Query Params

disposition:
string
Specifies whether the image will be shown inline or downloaded. Valid values are ‘inline’ and ‘attachment’.
### Scopes * **mindmeister.readonly** * **mindmeister**

User Information

Try It Out

get
{{ tryResults.results }}
Method{{ tryResults.method }}
Request Headers
{{ tryResults.requestHeaders }}
URL{{ tryResults.url }}
Request Data
{{ tryResults.data }}
Status
Response Headers
{{ tryResults.responseHeaders }}

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



### Scopes * **mindmeister.readonly** * **mindmeister**