DCP ProtocolДокументація
Продукти Тарифи Humanscode

Документація DCP Protocol

Інтегруйте Zero-Knowledge шифрування у свій продукт через простий REST API або SDK. Ви працюєте з високорівневим інтерфейсом — encrypt / decrypt — а вся криптографія лишається всередині DCP.

Огляд

DCP Protocol надає шифрування як сервіс. Ваш застосунок надсилає дані, отримує envelope (зашифрований контейнер) і зберігає його. Щоб отримати дані назад — передаєте envelope у decrypt.

  • Zero-Knowledge за замовчуванням — DCP оперує зашифрованими даними; відкритий текст не зберігається.
  • AES-256-GCM — індустрійний стандарт шифрування з контролем цілісності.
  • Ізоляція за клієнтом — envelope, створений під вашим ключем, може розшифрувати лише ваш ключ.
  • Простий інтерфейс — два виклики: encrypt і decrypt. Решта — деталі всередині DCP.
Модель: envelope — це непрозорий контейнер. Зберігайте його цілком (напр. у своїй БД як текст/JSON) і передавайте назад без змін для розшифрування.

Швидкий старт

Три кроки до першого зашифрованого запиту.

1. Отримайте API-ключ

Ключ має формат dcp_sk_…. Отримати його можна в панелі DCP (розділ API Keys) або замовивши доступ. Зберігайте ключ на сервері — не у клієнтському коді браузера.

2. Зашифруйте дані

cURL
# Замініть dcp_sk_... на ваш ключ
curl -X POST https://dcprotocol.link/api/v1/encrypt \
  -H "X-API-Key: dcp_sk_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"plaintext":"Привіт, DCP!"}'

У відповідь ви отримаєте payload — це і є envelope. Збережіть його.

3. Розшифруйте назад

cURL
curl -X POST https://dcprotocol.link/api/v1/decrypt \
  -H "X-API-Key: dcp_sk_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"bundle": <envelope з кроку 2> }'
Готово. Ви щойно зашифрували й розшифрували дані через DCP, не торкаючись криптографії.

Аутентифікація

Кожен запит до API вимагає заголовок X-API-Key з вашим ключем.

HTTP
X-API-Key: dcp_sk_ВАШ_КЛЮЧ
Формат ключаdcp_sk_ + випадковий рядок
ЗаголовокX-API-Key
Де зберігатиНа сервері / у секретах. Ніколи не вбудовуйте у публічний фронтенд.
РотаціяСтворюйте новий ключ і відкликайте старий у панелі API Keys.
Важливо: застарілі demo/demo та ендпоінт /token більше не діють. Використовуйте лише /api/v1/* з X-API-Key.

API Reference

POST/api/v1/encrypt

Шифрує рядок і повертає envelope.

Тіло запиту

ПолеТипОпис
plaintextstringОбов'язкове. Текст для шифрування (до 200 000 символів).
aadobjectНеобов'язкове. Додатковий контекст (напр. {"purpose":"note"}), прив'язується до envelope.

Приклад

JavaScript (fetch)
const res = await fetch("https://dcprotocol.link/api/v1/encrypt", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.DCP_API_KEY,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ plaintext: "secret data" })
});
const { payload } = await res.json();  // payload = envelope, збережіть його

Відповідь 200

JSON
{
  "ok": true,
  "payload": { /* envelope — непрозорий контейнер, зберігайте цілком */ }
}
Про envelope: це самодостатній зашифрований контейнер. Вам не потрібно розбирати його вміст — просто збережіть і передайте назад у decrypt.
POST/api/v1/decrypt

Приймає envelope і повертає відкритий текст.

Тіло запиту

ПолеТипОпис
bundleobjectОбов'язкове. Envelope, отриманий з encrypt (передайте без змін).

Приклад

JavaScript (fetch)
const res = await fetch("https://dcprotocol.link/api/v1/decrypt", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.DCP_API_KEY,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ bundle: savedEnvelope })
});
const { plaintext } = await res.json();

Відповідь 200

JSON
{ "ok": true, "plaintext": "secret data" }
Ізоляція: envelope можна розшифрувати лише тим самим API-ключем (клієнтом), яким його створено. Чужий ключ отримає 403.

Коди помилок

КодЗначенняПричина
400Bad RequestНемає/некоректний plaintext або bundle, непідтримувана версія envelope.
401UnauthorizedВідсутній або некоректний заголовок X-API-Key.
403ForbiddenСпроба розшифрувати envelope чужого клієнта (tenant mismatch).
429Too Many RequestsПеревищено ліміт запитів. Зачекайте і повторіть.
502Upstream ErrorТимчасова проблема шифрувального сервісу. Повторіть запит.

Тіло помилки: { "error": "опис" }.

Ліміти

  • Розмір plaintext — до 200 000 символів на запит.
  • Rate limit — на IP та на ключ (при перевищенні 429). Для вищих лімітів — тариф Pro/Enterprise.

SDK

Офіційний SDK інкапсулює виклики API. Доступні для Web/Node.js, а також Python, Go, Rust.

Встановлення

npm
npm install @humanscode/dcp-sdk

Використання

TypeScript / JavaScript
import { DCP } from "@humanscode/dcp-sdk";

const dcp = new DCP({
  apiUrl: "https://dcprotocol.link",
  apiKey: process.env.DCP_API_KEY
});

// Шифрування
const { payload } = await dcp.encrypt("secret data");
// ... збережіть payload у своїй БД ...

// Розшифрування
const { plaintext } = await dcp.decrypt(payload);
Порада: тримайте DCP_API_KEY у змінних середовища (server-side). SDK автоматично додає заголовок X-API-Key.

Підтримка

Потрібен доступ, вищі ліміти або допомога з інтеграцією?