REST API
Робіть зі своєї програми те, що робить застосунок із вашими проєктами, папками й продуктами, організацією Enterprise та лідами Open Guest; пробуйте запити зі сторінки розробника й отримуйте вебхуки, коли щось відбувається.
REST API дає змогу вашій програмі робити те, що робить застосунок: проєкти та їхні вимірювання, папки й каталог продуктів; в Enterprise це ваша організація, як її веде сторінка Enterprise; в Open Guest це ваше гостьове посилання, гостьові проєкти та запити кошторису. Він відповідає у форматі JSON. Повна довідка з усіма полями та прикладами — це документація 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 надсилає справжні запити з вашим ключем і показує, що саме приходить у відповідь.
- Виберіть Робоче або Пісочниця.
- Виберіть Кінцева точка, наприклад «Список ваших проєктів», «Отримати вимірювання» або «Отримати акаунт». Список пропонує кінцеві точки, що входять до вашого плану.
- Заповніть його параметри. Проєкт чи продукт вибирається за назвою з тих, які ключ може читати; там, де потрібна людина, ваш власний обліковий запис підставляється за вас.
- Натисніть Надіслати запит. Нижче з’являються статус і відповідь.
Пропонуються лише запити на читання, тож спроби нічого не змінюють, а ці запити не враховуються у вашому використанні. Якщо ваш ключ не має доступу, потрібного кінцевій точці, сторінка попередить, що буде відповідь 403.
Вебхуки#
Вебхук повідомляє ваш сервер, коли щось відбувається, так само як листи-сповіщення повідомляють вас. Вебхуки входять до планів Enterprise і Open Guest.
Налаштуйте вебхук#
У Розробник > Вебхуки:
- Введіть свою URL кінцевої точки: адресу
https://в інтернеті. Адреси у приватних мережах відхиляються, і це перевіряється знову перед кожною доставкою. - Позначте потрібні Події (див. події). Нова кінцева точка починається з подій, які надсилає ваш план, і має бути позначена принаймні одна.
- Натисніть Зберегти. Перший раз сторінка показує Секрет підпису повністю. Скопіюйте його тоді: потім показуються лише його останні символи.
- Натисніть Надіслати тестову подію і виберіть подію.
Тест надсилає зразок цієї події, зі вигаданими значеннями та "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, щоб упорядковувати події.
Перевірте підпис#
Будь-хто, хто знає вашу адресу, може надсилати на неї запити, тому перевіряйте кожну доставку, перш ніж їй довіряти:
- Розділіть заголовок
X-MMO-Signatureза комою наtіv1. - Обчисліть HMAC-SHA256 від
t, крапки й необробленого тіла запиту, з вашим секретом підпису як ключем, записаний шістнадцятковим числом. - Порівняйте результат із
v1за допомогою порівняння сталого часу. - Відхиліть доставку, якщо
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) |
До вашої організації додається ліцензія, зокрема через єдиний вхід. |
Досі потрібна допомога?
Напишіть нашій службі підтримки й розкажіть, що ви намагалися зробити. Знімки екрана допомагають.