Développeurs
Une API. Tous vos produits.
La vérification d’identité vient d’abord, puis un compte sponsorisé, puis le lien et le déverrouillage. Votre clé d'API reste sur votre propre serveur : le navigateur ou l'application mobile parle à votre backend, et votre backend nous parle. Compatible avec les sessions WharfKit et avec les passkeys.
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 }),
});Aucun document d’identité ne passe par votre code et aucun secret n’atteint le navigateur. Par défaut, les organisations refusent la création gratuite de comptes tant que le KYC n’est pas approuvé. Intégrez contre le sandbox sur sandbox.identityinc.io — vérifications de test gratuites, chaîne simulée — puis dirigez le trafic de production vers Builder ou Growth.
Guides et référence
Démarrage rapide, authentification, webhooks et tous les codes d’erreur renvoyés par l’API. Publié en anglais.
API
Spécification OpenAPI : https://identityinc.io/openapi.yaml. Production : https://api.identityinc.io. Sandbox : https://sandbox.identityinc.io (clés bi_test_, vérifications de test gratuites, chaîne simulée). Le développement local utilise par défaut http://127.0.0.1:4100.
Une clé par produit
Émettez une clé d'API distincte pour chaque produit que vous exploitez : votre portefeuille, votre place de marché, votre intégration bancaire. Chaque clé ne voit que ses propres données ; l'isolation est imposée par l'API, pas par convention. Les clés sandbox sont bi_test_… via le checkout sur sandbox.identityinc.io ; les clés production sont bi_… via l'inscription sur identityinc.io — ne mélangez jamais les hôtes.