{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"5f46f56c-c559-40ad-9b94-e66bbc4f7168","name":"Meevo Public API","description":"Meevo Public APIs allow you to retrieve, post, update, and delete data in a Meevo location's environment.\n\n# What's New in the 2026 August Release\n\n## New endpoint: Get Client Settings\n\nThe new **Get Client Settings** endpoint returns the client information required for a specific location, allowing integrations to determine which fields must be provided before creating or updating a client.\n\nPreviously, integrations had to rely on validation error messages to identify missing required fields. With this endpoint, applications can retrieve those requirements in advance, dynamically build the appropriate experience, and reduce failed API requests.\n\n- **Endpoint URL**: _{{baseURL}} /v1/clientSettings_\n    \n- **Required Parameters**: TenantId, LocationId\n    \n\n## Employee \"Title\" now returned\n\nThe following endpoints now return the value of the Title field in an employee profile:\n\n- GET _Get Details About a Single Employee_\n    \n- POST _Get employee details by Employee ID or email_\n    \n- GET _Get a pageable list of employees_\n    \n\n## Cancellation Reasons now include OnlineBooking value\n\nThe _Get a List of Appointment Cancellation Reasons_ endpoint now returns an **OnlineBooking** bool which reflects the state of the **Include in Online Booking Cancellation Reasons** option in the Cancellation Reason definition. This allows integrations to know which Cancellation Reasons to expose to clients without having to obtain that information from the business directly.\n\n## Full address included in \"List of Locations\"\n\nThe _Get a Pageable List of Locations_ endpoint now returns the full location address, including ZIP.\n\n## Improved FOV messaging\n\nWhen the _Update an Appointment Book Service_ endpoint encounters an FOV conflict, the validation error message now includes details about the conflicting appointment. The _Create an Appointment Book Service_ endpoint already returns a descriptive message.\n\n## Bug Fixes\n\n- Bug 106279: The Online Booking API was not always returning the latest access status.\n    \n- Bug 119022: The Gift Card endpoint was not honoring pagination rules.\n    \n- Bug 136092: The Public API Channel property in Booking endpoints had an unnecessarily limited character count. The character count has been updated to 50 characters.\n    \n\n# Getting Started\n\n## Collection Details\n\nTo download the complete Meevo API Collection, click the **Run in Postman** button in the top-right corner of the page.\n\n# The Meevo Public API Test Bed\n\nThe Meevo Public API test bed is a working Meevo environment, complete with staged data, that you can use to become familiar with our endpoints. If you are developing an app, you should develop and test the app against this environment and its data. All credentials are provided in your \"Welcome Kit.\"\n\nYour Test Bed credentials will expire after 90 days if your app is not live in Production by then. Once your app is live in Production, you will be granted continued access to the Test Bed to allow for additional testing going forward.\n\n**Please note:** This environment is shared with other integrators and is not suitable for the entering of real data that may contain personally identifiable information.\n\nThe **Test Bed URL** is the base URL for API calls. See the Authentication section for details on authenticating to the test bed.\n\n> **Test Bed URL**: [https://d18devpub.meevodev.com](https://d18devpub.meevodev.com) \n  \n\n# Authentication\n\nAll API calls must be authenticated using a JSON Web Token (JWT). The JWT is a randomly-generated OAuth 2.0 token that should be passed as a Bearer Token in the header of all API calls.\n\nYou can obtain a JWT by passing in your unique **appId** and **appSecret**, which was provided to you in your \"Welcome\" package, to the access token endpoint. Make sure to include in the header **Accept: application/json**. Your JWT will appear in the response. Note these credentials are specific to an environment; your appId and appSecret for the test bed will not work in Production.\n\nBe sure to keep your app ID, app secret, and JWTs secure, as these are used to identify you and your actions in Meevo. The JWT is specific to your integration or app.\n\n## Requesting an Access Token\n\nTo request a JWT, **POST** to the Marketplace endpoint. Make sure to pass your **appId** and **appSecret** (as **client_id** and **client_secret**, respectively) in the body of the call and not as query parameters. Each time you make this call, you'll receive a new, updated token, and the validity counter will be reset.\n\nBelow is the Test Bed Marketplace URL for authenticating to the test bed. The Meevo Production Marketplace URL and updated credentials will be provided prior to going live with your integration or application.\n\n**Test Bed Authentication**\n\n> **POST** [https://d18devmarketplace.meevodev.com/oauth2/token](https://d18devmarketplace.meevodev.com/oauth2/token) \n  \n\n**Authentication Body**\n\n``` json\n\"client_id\":\"AppId\"\n\"client_secret\":\"AppSecret\"\n\n ```\n\n## Access Token Response\n\n``` json\n\"access_token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n       \"scope\": \"meevo:scope\"\n\n ```\n\n## JWT Validity Period\n\nThe JWT is valid for an hour from when the response is sent. When a token expires, you will need to make another call for another JWT. Calls sent with expired tokens will receive responses with a 401 Status (Token Exception).\n\nYou will not be notified by the system when a token expires, so take note of the time that you received the response, as well as the value of the **expires_in** field in the response, and prepare your code accordingly to renew expired JWTs.\n\n# Maintenance Windows\n\nMeevo maintenance runs every night from 12 midnight to 6 am. During this time there may be an interruption of service, but in most cases the system will just be slower than usual. Additional details can be found in the **Maintenance of Services** section of our [Terms of Service](https://www.millenniumsi.com/terms-of-service#maintenance).\n\nThe maintenance window start time is based on the time zone of your cluster (NA0, NA1, etc.):\n\nNA0: EST (Eastern Standard Time)  \nNA1: PST (Pacific Standard Time)  \nNA2: EST  \nCA0: EST  \nUK1: United Kingdom time\n\n# Overages and Rate Limiting\n\n**Overages**: Each location is allotted 1000 calls per day. Charges are incurred for each call beyond the initial 1000 per day. There is a maximum of 5000 calls permitted in a given day. Additional calls beyond the 5000 are rejected until the next day when the counter resets.\n\n**Rate Limiting**: The Meevo Public API rate limit is 60 calls per minute. For a higher call rate limit, contact your MSI representative for options and pricing. All Meevo API calls are subject to rate limits. MSI reserves the right to adjust the rate limit for a given endpoint to ensure a high quality service for all Meevo Public API users.\n\n## Best Practices to Avoid Rate Limiting\n\nIf you reach your rate limit, stop making calls for awhile. Continuing to make calls even after you've reached the rate limit will increase your call count and increase the time before calls will be successful again. Here are some tips on keeping your number of calls down:\n\n**Cache data that changes infrequently**: It's important to only make calls when data is needed. Relatively static data can be cached and referenced locally. If your system encounters a non-matching GUID for an item, _then_ you should make the appropriate call to retrieve the data in question. Make sure to cache that response as well.\n\nWe recommend caching Products, Product Categories, Services, Service Categories, Package and Membership definitions, Gift Card Types, Business Information, and location details. Employee profiles are usually cached as well, but this can vary by location.\n\n**Remove unnecessary API calls**: Optimize your code. Make sure each call is for relevant data you need immediately. Consider whether the data changes often enough to require a call as opposed to being cached.\n\n**Regulate your request rate**: Ideally your app would not have you regularly approaching or reaching your rate limit. If this is occurring, consider including a process in your code that regulates the rate of requests so that they are distributed more evenly over time (i.e. throttling/throttle controller).\n\n# Meevo Public API Endpoints\n\nThe collections below detail all Public API endpoints available in Meevo. Endpoints are grouped by Read (GET) and Write (PUT, UPDATE, DELETE).\n\nFor Pagination, each page displays the number of results (**ItemsPerPage**) starting on the defined **PageNumber**.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"12120297","team":738812,"collectionId":"5f46f56c-c559-40ad-9b94-e66bbc4f7168","publishedId":"2sBXcKBdPV","public":true,"publicUrl":"https://docs.meevoapi.com","privateUrl":"https://go.postman.co/documentation/12120297-5f46f56c-c559-40ad-9b94-e66bbc4f7168","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.12.3","publishDate":"2026-03-03T19:14:11.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[{"name":"D18","id":"78c0b275-ccb6-425b-ab38-acf7a01b6e91","owner":"12120297","values":[{"key":"baseUrl","value":"https://d18devpub.meevodev.com/publicapi","enabled":true,"type":"default"},{"key":"MarketplaceUrl","value":"","enabled":true,"type":"any"},{"key":"access_token","value":"","enabled":true,"type":"any"},{"key":"clientId","value":"","enabled":true,"type":"any"},{"key":"startDate","value":"","enabled":true,"type":"any"},{"key":"endDate","value":"","enabled":true,"type":"any"},{"key":"marketplaceUrl","value":"","enabled":true,"type":"any"},{"key":"employeeId","value":"","enabled":true,"type":"any"},{"key":"serviceId","value":"","enabled":true,"type":"any"},{"key":"productCategoryId","value":"","enabled":true,"type":"any"},{"key":"productSubCategoryId","value":"","enabled":true,"type":"any"},{"key":"productId","value":"","enabled":true,"type":"any"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/706067c1e5ec14d10542d0661fbc946278061096ecfe16fef11982d362d03b3c","favicon":"https://meevoapi.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"D18","value":"12120297-78c0b275-ccb6-425b-ab38-acf7a01b6e91"}],"canonicalUrl":"https://docs.meevoapi.com/view/metadata/2sBXcKBdPV"}