SDK · web
<script src="https://sdk.dna-ai.online/v1/dna-id.js"></script>
<script>
DNAiD.init({ clientId: "demo_client_id", redirectUri: location.origin + "/callback" });
// Кнопка "Увійти через D.N.A."
DNAiD.login({ scopes: ["openid", "profile", "proof:is_adult"] });
// Запросити підпис документа
const res = await DNAiD.sign({
document: fileBytes,
documentTitle: "Договір №12",
requiredLevel: "advanced",
});
console.log(res.legalLevel); // "advanced" — ніколи "qualified" без Дія
</script>API — усі 81 ендпоінти
base_url: той самий origin (VITE_API_BASE_URL не задано)
Автентифікація · 23
POST
/api/v1/auth/registerКрок 1: акаунт + виклик під генерацію ключів на пристроїPOST
/api/v1/auth/register/keysКрок 2: публічні ключі — лише з доказом володіння приватнимPOST
/api/v1/auth/loginВхід паролем. При 2FA повертає pending-токен, не сесіюPOST
/api/v1/auth/challengeВиклик для входу підписом або біометрієюPOST
/api/v1/auth/biometricВхід підписом ключа з пристрою — без пароляPOST
/api/v1/auth/refreshRefresh одноразовий: старий помирає після обмінуPOST
/api/v1/auth/logoutВийти з поточної сесіїPOST
/api/v1/auth/logout-allВихід з усіх пристроїв. Діє негайноGET
/api/v1/auth/meПрофіль: рівень, 2FA, спосіб відновленняGET
/api/v1/auth/csrfCSRF-токен для наших сторінокGET
/api/v1/auth/access-logЖурнал доступу — його бачить сам користувачPOST
/api/v1/auth/2fa/setupСекрет і QR-URI. Вмикається лише після verifyPOST
/api/v1/auth/2fa/verifyЗавершення входу або увімкнення захистуPOST
/api/v1/auth/device/keyПрив'язати ключ із Secure Enclave / KeystoreGET
/api/v1/auth/device/keysМої пристроїPOST
/api/v1/auth/device/keys/{id}/revokeВідкликати ключ загубленого пристроюGET
/api/v1/auth/recovery/optionsЩо доступно саме цьому користувачуPOST
/api/v1/auth/recovery/verify-keyЧи справді ключ належить акаунтуPOST
/api/v1/auth/recovery/rotate-keysОстання інстанція: новий ключ замість втраченогоGET
/api/v1/auth/recovery/backupЧи є копія і що саме вона покриваєPUT
/api/v1/auth/recovery/backupПокласти конверт. Створити його міг лише пристрійDELETE
/api/v1/auth/recovery/backupПрибрати копіюGET
/api/v1/auth/recovery/backup/envelopeКонверт для розшифрування на пристроїПідпис · 15
POST
/api/v1/signСкорочений виклик підпису (псевдонім /sign/request)POST
/api/v1/sign/requestКрок 1: сервіс просить підписPOST
/api/v1/sign/executeКрок 2: підпис створено на пристрої, ми перевіряємоPOST
/api/v1/sign/declineВідмова — теж дія, і вона в журналіGET
/api/v1/sign/requestsСписок запитів на підписGET
/api/v1/sign/{id}/statementЗаява, яку треба підписатиGET
/api/v1/sign/{id}/resultЧим завершився запитGET
/api/v1/sign/{id}Один підпис. Чужий дає 404, а не 403GET
/api/v1/sign/{id}/proofДоказ для суду або аудитуGET
/api/v1/signaturesАрхів власних підписівPOST
/api/v1/sign/verifyВідкрита перевірка підпису будь-якою стороноюGET
/api/v1/sign/levels/availableЩо система реально може видати заразGET
/api/v1/sign/document-kindsЯкий документ яким підписом можна підписатиGET
/api/v1/sign/document-kinds/{kind}Чи годиться підпис такого рівня для документаPOST
/api/v1/sign/diiaЄдиний шлях до КЕП. 501 до партнерстваСховище · 11
GET
/api/v1/vault/itemsСписок записів — конвертами, як єPOST
/api/v1/vault/itemsЗберегти. Приходить уже зашифрованимGET
/api/v1/vault/items/{id}Один записPATCH
/api/v1/vault/items/{id}Замінити вміст. Старий блоб не відновлюєтьсяDELETE
/api/v1/vault/items/{id}Видалити назавждиGET
/api/v1/vault/summaryЗдоров'я: слабкі, повторені, скомпрометованіPOST
/api/v1/vault/generate-passwordГенерація на сервері. Ніде не зберігаєтьсяPOST
/api/v1/vault/health-checkK-анонімність: 5 символів хеша → суфіксиPOST
/api/v1/vault/health-reportКлієнт повідомляє результат власної перевіркиGET
/api/v1/vault/recipient-key/{id}Публічний ключ отримувача для перешифруванняPOST
/api/v1/vault/shareКопія запису в отримувачаПартнери · 10
GET
/api/v1/partners/plansПублічний довідник тарифівPOST
/api/v1/partners/registerЗаявка інтегратора. Створює pendingGET
/api/v1/partners/{id}Кабінет: план, адреси, scopeGET
/api/v1/partners/{id}/usageВходи за 30 днів і стан квотиPUT
/api/v1/partners/{id}/redirect-urisЗмінити список адрес поверненняPOST
/api/v1/partners/{id}/keysНовий секрет. Старий помирає негайноGET
/api/v1/partners/admin/pendingЧерга заявокPOST
/api/v1/partners/admin/{id}/decideСхвалити або відхилитиPOST
/api/v1/partners/admin/{id}/suspendПризупинення діє негайноPOST
/api/v1/partners/admin/{id}/planЗмінити тарифВерифікація · 6
POST
/api/v1/verify/documentДокумент і selfie на перевіркуGET
/api/v1/verify/statusСтан заявки на підтвердження особиGET
/api/v1/verify/proofsДоступні докази атрибутівPOST
/api/v1/verify/presentQR із доказом атрибута, таймер 5 хвилинGET
/api/v1/verify/admin/queueЧерга модератора верифікаціїPOST
/api/v1/verify/admin/{id}/decideРішення людини: підтвердити або відхилитиOAuth 2.0 / OIDC · 10
GET
/.well-known/openid-configurationDiscovery: адреси і те, чого ми не вміємоGET
/oauth/authorizeПочаток входу партнера: згода, рівень, PKCEPOST
/oauth/authorize/decisionРішення людини на екрані згодиPOST
/oauth/tokenОбмін коду на токениGET
/oauth/userinfoClaims у межах scope, без персональних данихGET
/oauth/jwksПублічні ключі для перевірки id_tokenPOST
/oauth/introspectПеревірка токена для ресурс-серверівGET
/oauth/logoutЄдиний вихідGET
/api/v1/consentsКому дано доступ від мого іменіDELETE
/api/v1/consents/{id}Забрати доступ. Діє тієї ж митіSDK і службові · 6
GET
/sdk/v1/{filename}Роздача SDK. Білий списокGET
/sdk/v1/callbackМіст popup → сторінка партнераGET
/sdk/v1/openapi.jsonСхема для генерації backend-SDKGET
/healthЖивий процес. Нічого зовнішнього не чіпаєGET
/health/deepПлюс база і DCPGET
/statusЩо система вміє насправді