JSON API · v1

Підключення без платних ШІ‑сервісів

HTTP + JSON. Відповіді можна використовувати у внутрішніх інструментах власника після окремого налаштування; автоматичного підключення зараз немає.

GET/api/v1/search

Пошук

q, category, unit, catalog_kind, page, per_page.

curl 'https://kdb.arm20.com/api/v1/search?q=цегла%20М100&per_page=5'
GET/api/v1/resources/{code}

Точний код

Картка, характеристики, версія та джерело.

curl 'https://kdb.arm20.com/api/v1/resources/17.01.01.000000310'
POST/api/v1/match

Підбір кандидатів

Назва обов’язкова; одиниця, розміри, марка й параметри допомагають відсіяти несумісні варіанти.

curl -X POST 'https://kdb.arm20.com/api/v1/match' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Цегла керамічна повнотіла","unit":"шт","dimensions":"250x120x65 мм","brand":"М100"}'
POST/api/v1/batch-match

Пакет до 25 позицій

{
  "items": [
    {"name": "Лист гіпсокартонний вологостійкий", "dimensions": "12,5 мм"},
    {"name": "Ґрунтовка бетонконтакт", "brand": "CT 19"}
  ]
}

Помилки API: 400 invalid_json, 404 resource_not_found, 405 method_not_allowed, 413 payload_too_large, 422 invalid_items / batch_limit, 429 rate_limit. Кожна JSON-відповідь містить ідентифікатор запиту.

Скорочений приклад відповіді

Бал — це порядок пошуку, не ймовірність

Статуси: exact_match, possible_analogue, ambiguous, not_found. Конфлікти й відсутні дані повертаються окремими масивами.

{
  "data": {
    "status": "possible_analogue",
    "score_note": "Бал використовується лише для сортування кандидатів і не є ймовірністю.",
    "candidates": [{
      "code": "17.01.01.000000310",
      "score": 86,
      "explanation": ["Збіг назви та розміру."],
      "conflicts": [],
      "missing_data": ["Одиниця не підтверджена для окремого коду."],
      "source": {"name": "ЄДЕССБ", "version": "edesb-2026-08-20"}
    }]
  }
}
60пошукових запитів / хвилину / IP
25позицій у пакетному запиті
100результатів на сторінку
5 000рядків у одному експорті