IDKit is our solution for integrating World ID. You can use the React SDK for a pre-built widget or the JS and mobile SDKs for a custom integration.To familiarize yourself with the core concepts of World ID, check out this page.
Create your app in the Developer Portal. If you’re migrating from an old app you have to go through RP registration by clicking the Enable World ID 4.0 banner. Keep these values:
For RP signature generation, use @worldcoin/idkit-server in JavaScript/TypeScript backends. This is currently only available in JS. If you need support in another language, please reach out on Telegram.
Never generate RP signatures on the client and never expose your RP signing
key. If the key leaks, attackers can forge requests from your app.
Step 4: Generate the connect URL and collect proof
You can test during development using the simulator.
Copy
Ask AI
import { IDKit, orbLegacy } from "@worldcoin/idkit-core";const rpSig = await fetch("/api/rp-signature", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ action: "my-action" }),}).then((r) => r.json());const request = await IDKit.request({ // App ID: `app_id` from the Developer Portal app_id: "app_xxxxx", // Action: Context that scopes what the user is proving uniqueness for // e.g., "verify-account-2026" or "claim-airdrop-2026". action: "my-action", rp_context: { rp_id: "rp_xxxxx", // Your app's `rp_id` from the Developer Portal nonce: rpSig.nonce, created_at: rpSig.created_at, expires_at: rpSig.expires_at, signature: rpSig.sig, }, allow_legacy_proofs: true, environment: "production", // Only set this to staging for testing with the simulator // Signal (optional): Bind specific context into the requested proof. // Examples: user ID, wallet address. Your backend should enforce the same value.}).preset(orbLegacy({ signal: "local-election-1" }));const connectUrl = request.connectorURI;const response = await request.pollUntilCompletion();
After successful completion, send the returned payload to your backend and
forward it directly to: POST https://developer.world.org/api/v4/verify/{rp_id}
Forward the IDKit result payload as-is. No field remapping is required.