Разработчикам

Один API. Любой продукт.

Сначала проверка личности, затем спонсируемый аккаунт, затем привязка и разблокировка. Ваш API-ключ остаётся на вашем сервере: браузер или мобильное приложение общается с вашим бэкендом, а бэкенд — с нами. Работает с сессиями WharfKit и с passkey.

const baseUrl = process.env.BOUND_IDENTITY_URL!;
const apiKey = process.env.BOUND_IDENTITY_API_KEY!; // server-side only

async function identityFetch(path, init) {
  const res = await fetch(baseUrl + path, {
    ...init,
    headers: {
      Authorization: "Bearer " + apiKey,
      Accept: "application/json",
      "Content-Type": "application/json",
      ...init?.headers,
    },
  });
  const body = await res.json();
  if (!res.ok) throw new Error(body.message || "HTTP " + res.status);
  return body;
}

// 1. Verify the person first — no chain account yet (default organization policy).
const { personDid, verificationUrl } = await identityFetch("/v1/kyc/start", {
  method: "POST",
  body: JSON.stringify({}),
});
// … open verificationUrl from your KYC provider …

// 2. When approved, take the one-time create token.
const { kycCreateToken } = await identityFetch(
  "/v1/kyc/status?personDid=" + encodeURIComponent(personDid),
);

// 3. Sponsor the provisional account. Token replay is rejected.
const { accountDid } = await identityFetch("/v1/accounts/free", {
  method: "POST",
  body: JSON.stringify({
    ownerPublicKey,
    personDid,
    kycCreateToken,
    // Production also requires emailProofToken + phoneProofToken
  }),
});

// 4. Bind the approved person to this account: the user signs once.
const { payloadToSign, message } = await identityFetch("/v1/bind/challenge", {
  method: "POST",
  body: JSON.stringify({ accountDid, personDid }),
});
await identityFetch("/v1/bind/confirm", {
  method: "POST",
  body: JSON.stringify({
    accountDid,
    personDid,
    nonce: message.nonce,
    signature, // WharfKit / passkey over payloadToSign
  }),
});

// 5. Lift faucet limits. Done.
await identityFetch("/v1/accounts/unlock", {
  method: "POST",
  body: JSON.stringify({ accountDid }),
});

Ни один документ, удостоверяющий личность, не проходит через ваш код, и ни один секрет не попадает в браузер. По умолчанию организации отклоняют бесплатное создание аккаунтов до одобрения KYC. Интегрируйтесь с песочницей sandbox.identityinc.io — бесплатные тестовые проверки, симулированная цепь — затем направьте продакшен-трафик на Builder или Growth.

Руководства и справочник

Быстрый старт, аутентификация, вебхуки и все коды ошибок API. Публикуется на английском.

API

Спецификация OpenAPI: https://identityinc.io/openapi.yaml. Продакшен: https://api.identityinc.io. Песочница: https://sandbox.identityinc.io (ключи bi_test_, бесплатные тестовые проверки, симулированная цепь). Локальная разработка по умолчанию использует http://127.0.0.1:4100.

Отдельный ключ для каждого продукта

Выпустите отдельный API-ключ для каждого продукта: кошелька, маркетплейса, банковской интеграции. Каждый ключ видит только свои данные; изоляцию обеспечивает сам API, а не договорённость. Ключи песочницы — bi_test_… через checkout на sandbox.identityinc.io; продакшен — bi_… через регистрацию на identityinc.io — не смешивайте хосты.

Разработчикам · Identity Inc.