Measure MapДовідка
Відкрити Measure Map

REST API

Робіть зі своєї програми те, що робить застосунок із вашими проєктами, папками й продуктами, організацією Enterprise та лідами Open Guest; пробуйте запити зі сторінки розробника й отримуйте вебхуки, коли щось відбувається.

REST API дає змогу вашій програмі робити те, що робить застосунок: проєкти та їхні вимірювання, папки й каталог продуктів; в Enterprise це ваша організація, як її веде сторінка Enterprise; в Open Guest це ваше гостьове посилання, гостьові проєкти та запити кошторису. Він відповідає у форматі JSON. Повна довідка з усіма полями та прикладами — це документація API; ця сторінка дає огляд.

Щоб відкрити документацію із застосунку, перейдіть у Розробник > REST API і натисніть Переглянути документацію.

Розділ REST API на сторінці розробника

Базова адреса#

Кожен запит надсилається на:

https://api.measuremaponline.com/api/v2

Автентифікація#

Надсилайте свій ключ API як є в заголовку Authorization кожного запиту. Створіть ключ на сторінці розробника: див. ключі API.

curl https://api.measuremaponline.com/api/v2/projects/YOUR_PROJECT_ID \
  -H "Authorization: YOUR_API_KEY"

Кожен запит перевіряється на відповідність доступу ключа (наприклад, Projects Читання), вашій підписці та, для запиту з вебсторінки, обмеженням вебсайтів ключа. Зберігайте ключі, що можуть змінювати дані, на своєму сервері: див. бережіть свій ключ.

Live і sandbox#

Для обох середовищ є одна базова адреса. Усе визначає ключ: ключ sandbox читає й записує проєкти, папки та продукти sandbox, яких робочі ключі ніколи не бачать. Користувачі, місця та команди вашої організації в обох середовищах ті самі, тому для їх зміни потрібен робочий ключ. Гостьові проєкти, створені ключем sandbox, ніколи не тарифікуються, а проєкти sandbox не можна вбудувати на ваш вебсайт. Токени повідомляють, до якого середовища належать.

Що охоплює API#

Група Кінцеві точки Потрібний доступ ключа
Токени входу POST /auth/token, POST /auth/iframe/token Вбудовані карти (в Open Guest — Гостьові проєкти)
Обліковий запис План, місця й ключ облікового запису через GET /account; запити API за останні 30 днів і, в Open Guest, гостьові проєкти та бюджет періоду через GET /usage Обліковий запис: Читання
Проєкти й папки Ваші проєкти (GET /projects, Кошик із trashed=true) і папки (GET /folders); отримання проєкту, його вимірювань (/projects/{pid}/data), коментарів або файлу .mmp (/projects/{pid}/mmp); створення, оновлення й переміщення проєктів і папок; об'єднання проєктів (POST /projects/merge); видалення до Кошик і відновлення (POST /projects/{pid}/restore); версії проєкту (/projects/{pid}/versions); видалення й відновлення коментарів; надання доступу до проєкту чи папки електронною поштою (PUT /projects/{pid}/members) Проєкти: Читання для читання, Читання та зміна для змін
Файли проєктів і копії Експорт проєкту у форматах застосунку (POST /projects/{pid}/export) або отримання його PDF-звіту (GET /projects/{pid}/pdf), обидва — у вигляді посилань, що діють 24 години; копіювання проєкту або створення з нього шаблону (POST /projects/{pid}/copy) Проєкти: Читання; Читання та зміна для копіювання. Для цін у звіті потрібні Продукти: Читання
Кошториси Кошторис проєкту по рядках (GET /projects/{pid}/estimate) Проєкти і Продукти: Читання
Продукти GET /products, GET /products/{id}, створення, оновлення й архівування через DELETE /products/{id} Продукти: Читання або Читання та зміна
Профіль Профіль і налаштування листів (/account/profile); для клієнта партнера — хто оплачує його план, і його запрошення (/account/partner) Обліковий запис: Читання, Читання та зміна
Імпорт Імпорт файлів у проєкт (POST /projects/{pid}/imports), як «Імпорт» у застосунку: додати або замінити, а потім стежити за ходом Проєкти: Читання та зміна
Ключі та вебхук API-ключі акаунта (/keys: список, відкликання, сайти; ніколи повністю, ніколи понад доступ ключа, що викликає) і його вебхук (/webhook) Розробник: Читання, Читання та зміна
Партнер Клієнти й запрошення, план, місця, бюджет, оплата й рахунки клієнта (/partner) Клієнти: Читання, Читання та зміна
Enterprise: користувачі, запрошення, місця, команди Користувачі (/enterprise/users): список, зміна ролі чи даних, вимкнення й увімкнення, вихід на всіх пристроях, вилучення з організації, видалення, призначення команд, передача їхніх проєктів. Запрошення (/enterprise/invitations): запросити, список, надіслати повторно, відкликати. Місця (GET /enterprise/seats). Команди (/enterprise/teams). Усі проєкти організації (GET /enterprise/projects) і проєкти в командах Користувачі: Читання або Читання та зміна; для проєктів потрібен Проєкти
Enterprise: організація Її профіль і політика (/enterprise/organization), єдиний вхід (GET /enterprise/sso), журнал дій (GET /enterprise/activity), а також купівля й повернення місць (PUT /enterprise/seats) Організація: Читання або Читання та зміна
Open Guest Ваше гостьове посилання (/open-guest/link: отримати, створити або замінити, призупинити, вибрати його папку); гостьові проєкти (/open-guest/projects: список, запуск проєкту для відвідувача, отримання проєкту); запити кошторису разом із кошторисом (/open-guest/requests); використання за цей період (GET /open-guest/usage) і бюджет (PUT /open-guest/budget) Гості: Читання; Читання та зміна для змін

Кілька речей, які варто знати:

  • Ключ дає доступ до проєктів власного облікового запису та, в Enterprise, до проєктів користувачів організації.
  • Видалення проєкту поміщає його до Кошик, як у застосунку, і це може зробити лише його творець; видаліть його назавжди з Кошик за допомогою forever=true. Видалення папки поміщає її проєкти до Кошик.
  • У вимірюваннях проєкту фігура перелічує свої продукти в productIds по порядку; productId — перший із них.
  • /projects/{pid}/mmp повертає той самий файл .mmp, який експортує застосунок. Його схему опубліковано на github.com/blueblinkone/mmp-validator. Нові елементи додаються лише як необов’язкові, тож засіб читання, написаний для старішого файлу, продовжує працювати.
  • В Open Guest гостьовий проєкт, запущений через API (POST /open-guest/projects), враховується у вашому використанні та бюджеті Open Guest так само, як проєкт, запущений за вашим гостьовим посиланням.
  • В Open Guest у розділі Гостьове посилання є посібник Open Guest API із кодом для вашого сервера й сторінки: ваш сервер отримує токен із POST /auth/token за допомогою робочого ключа та спрямовує відвідувача на новий власний проєкт, з уже заповненими його даними.
  • Люди потрапляють до вашої організації лише за запрошенням (POST /enterprise/invitations), як на сторінці Enterprise: хто не має облікового запису, тому він створюється, а пароль людина обирає сама. API ніколи не створює обліковий запис і не встановлює пароль.
  • Вилучення користувача (POST /enterprise/users/{uid}/remove) залишає йому обліковий запис; видалення (DELETE /enterprise/users/{uid}) видаляє його. В обох випадках зроблена ним робота лишається в організації, в новій папці з його іменем, до якої мають доступ ваші адміністратори.
  • Коли гість запитує ваш кошторис, GET /open-guest/requests/{pid} повідомляє, хто він, що написав, що виміряв і, за наявності Продукти: Читання, сам кошторис.
  • В Open Guest токени запускають гостьові проєкти для ваших відвідувачів. POST /auth/iframe/token, що виконує вхід відвідувача у вбудовану карту, призначений для ключів Enterprise.
  • Продукти через API ніколи не видаляються, лише архівуються, а собівартість продукту ніколи не повертається.
  • Кадастрові ділянки не входять до API.

Відповіді та помилки#

Успішний запит відповідає статусом 200 і JSON (експорт .mmp відповідає XML). Невдалий відповідає статусом помилки й тілом на кшталт:

{"errorCode": "insufficient_scope", "errorMessage": "This API key does not have the scope required for this endpoint"}
Статус errorCode Що перевірити
400 invalid_body, invalid_uid, invalid_project_id, pagination_invalid_page_number, pagination_invalid_page_limit Значення в запиті відсутнє або не прийняте, як-от page і limit посторінкового списку.
401 unauthorized_action Запит надіслано з вебсторінки на вебсайті, який ключ не дозволяє, або елемент не належить вашому обліковому запису чи вашим учасникам.
402 budget_limit_reached Open Guest: ліміт бюджету досягнуто, тож більше гостьових проєктів у цьому періоді немає.
403 invalid_api_key У заголовку Authorization не надіслано ключа, або ключ невідомий, відкликаний чи минули його 24 години після заміни.
403 api_key_suspended Доступ до API у вашому обліковому записі призупинено. Зверніться до підтримки.
403 subscription_expired, invalid_subscription Підписка не активна, або її план не містить API.
403 insufficient_scope Ключ не має доступу, потрібного для цієї кінцевої точки.
403 scope_not_in_plan Ваш план не включає цей метод, наприклад розділ Enterprise в Open Guest.
403 embed_needs_enterprise Вбудовані карти входять до плану Enterprise. Ключ Open Guest відкриває лише власні гостьові проєкти.
404 not_found, project_not_found, user_not_found Елемент не існує, або людина не є користувачем вашої організації.
409 enterprise_add_users_limit Під час запрошення: усі місця зайняті, а автоматичні місця вимкнено.
409 project_not_in_trash Запитано відновлення або остаточне видалення проєкту, якого немає в Кошик.
429 too_many_requests Понад 600 токенів за годину. Зачекайте трохи й спробуйте знову.
500 server_error Запит не вдалося виконати. Перевірте надіслані ідентифікатори, спробуйте ще раз і зверніться до підтримки, якщо це триває.

Спробуйте API зі сторінки розробника#

Розробник > Спробувати API надсилає справжні запити з вашим ключем і показує, що саме приходить у відповідь.

  1. Виберіть Робоче або Пісочниця.
  2. Виберіть Кінцева точка, наприклад «Список ваших проєктів», «Отримати вимірювання» або «Отримати акаунт». Список пропонує кінцеві точки, що входять до вашого плану.
  3. Заповніть його параметри. Проєкт чи продукт вибирається за назвою з тих, які ключ може читати; там, де потрібна людина, ваш власний обліковий запис підставляється за вас.
  4. Натисніть Надіслати запит. Нижче з’являються статус і відповідь.

Пропонуються лише запити на читання, тож спроби нічого не змінюють, а ці запити не враховуються у вашому використанні. Якщо ваш ключ не має доступу, потрібного кінцевій точці, сторінка попередить, що буде відповідь 403.

Спробуйте API: надісланий запит і його відповідь у форматі JSON

Вебхуки#

Вебхук повідомляє ваш сервер, коли щось відбувається, так само як листи-сповіщення повідомляють вас. Вебхуки входять до планів Enterprise і Open Guest.

Налаштуйте вебхук#

У Розробник > Вебхуки:

  1. Введіть свою URL кінцевої точки: адресу https:// в інтернеті. Адреси у приватних мережах відхиляються, і це перевіряється знову перед кожною доставкою.
  2. Позначте потрібні Події (див. події). Нова кінцева точка починається з подій, які надсилає ваш план, і має бути позначена принаймні одна.
  3. Натисніть Зберегти. Перший раз сторінка показує Секрет підпису повністю. Скопіюйте його тоді: потім показуються лише його останні символи.
  4. Натисніть Надіслати тестову подію і виберіть подію.

Тест надсилає зразок цієї події, зі вигаданими значеннями та "test": true у її data, на вашу збережену кінцеву точку, навіть якщо подію не позначено або кінцеву точку вимкнено. Щоб зупинити всі доставки, натисніть Прибрати: кінцеву точку та її секрет буде видалено.

Під налаштуваннями Довідник вебхуків містить усе, що потрібно для написання приймальної частини: заголовки й тіло, код перевірки підпису на Node.js, Python та PHP і приклади даних для кожної події.

Вебхуки з кінцевою точкою та подіями, які вона отримує

Що отримує ваш сервер#

Кожна подія — це один POST на вашу кінцеву точку з тілом JSON:

{"id": "evt_3f9a1c2b7d4e5f60718293a4", "type": "project.created", "created": 1790000000000, "data": { ... }}

id унікальний для кожної події, created — це момент події в мілісекундах від 1 січня 1970 року (UTC), а вміст data залежить від події. Запит також має такі заголовки:

Заголовок Значення
X-MMO-Event Назва події, як type у тілі.
X-MMO-Delivery id події.
X-MMO-Signature t=<milliseconds>,v1=<hex>: коли доставку підписано, і її підпис.
User-Agent MeasureMapOnline-Webhooks/1
  • Відповідайте статусом 2xx протягом 8 секунд, перш ніж виконувати будь-яку повільну роботу. Будь-який інший статус, переадресація чи тайм-аут вважається невдачею.
  • Кожну подію надсилають один раз і ніколи не повторюють. Розділ показує Остання доставка і Послідовні збої.
  • Після 10 невдач поспіль кінцеву точку вимикають, а власник отримує лист. Виправте свій сервер і натисніть Зберегти, щоб увімкнути її знову.
  • Іноді подія надходить двічі або не по порядку. Використовуйте id, щоб ігнорувати повтори, і created, щоб упорядковувати події.

Перевірте підпис#

Будь-хто, хто знає вашу адресу, може надсилати на неї запити, тому перевіряйте кожну доставку, перш ніж їй довіряти:

  1. Розділіть заголовок X-MMO-Signature за комою на t і v1.
  2. Обчисліть HMAC-SHA256 від t, крапки й необробленого тіла запиту, з вашим секретом підпису як ключем, записаний шістнадцятковим числом.
  3. Порівняйте результат із v1 за допомогою порівняння сталого часу.
  4. Відхиліть доставку, якщо t відрізняється від поточного часу більш ніж на 5 хвилин. t вказано в мілісекундах.

Використовуйте тіло в точності так, як воно надійшло: якщо розібрати JSON і записати його знову, він зміниться, і підпис не збігатиметься.

Змінити секрет негайно замінює секрет і один раз показує новий повністю. Оновіть свій сервер одразу після заміни.

Події#

Подія Надсилається, коли
project.created У вашому акаунті створено проєкт. У застосунку, через API або з вбудованої карти.
project.deleted Проєкт видалено назавжди (переміщення до кошика не враховується).
project.comment.added Хтось коментує проєкт — зазвичай відповідає ваш клієнт.
guest.project.created (Open Guest) Гість починає проєкт за вашим посиланням або через API. Лише коли адресу електронної пошти гостя відомо.
guest.measurement.completed (Open Guest) Гість завершує вимірювання та залишає свої контактні дані.
budget.warning_reached (Open Guest) Витрати за лічильником перевищують поріг попередження.
budget.limit_reached (Open Guest) Витрати за лічильником досягають вашого ліміту — подальші гостьові проєкти відхиляються.
enterprise.user.created (Enterprise) До вашої організації додається ліцензія, зокрема через єдиний вхід.

Досі потрібна допомога?

Напишіть нашій службі підтримки й розкажіть, що ви намагалися зробити. Знімки екрана допомагають.

Написати в підтримку