Face Check (Beta) is only available by request at present. Please reach out if you are a developer interested in testing this feature.
Prerequisites
You will need to register your application in the World Developer Portal (Staging).
- Log in to the Developer Portal.
- Create a Team and an Application.
- Create an “Incognito Action” and set “Number of verifications per user” to Unlimited.
- Save your credentials: You will need your App ID (e.g., app_e448…) and Action ID (e.g., face-verify).
Client-Side Implementation
You need to use a special standalone version of IDKit to integrate Face Check (Beta).
Add the IDKit library to your application’s <head>.
<script
src="https://unpkg.com/@worldcoin/[email protected]/build/index.global.js" strategy="beforeInteractive"
></script>
Next, configure IDKitWidget.
The key difference from regular IDKit integrations is in setting the verification_level to Face.
import { IDKitWidget, VerificationLevel } from '@worldcoin/idkit'
// ... inside your component
<IDKitWidget
app_id="app_e448f820180e3399c66fb90a68f36150" // Your app ID from Developer Portal
action="your-action-id" // Your action ID from Developer Portal
onSuccess={onSuccess} // Callback when the modal closes
handleVerify={handleVerify} // Callback when the proof is received
verification_level={VerificationLevel.Face} // REQUIRED for Face Check
>
{({ open }) => (
<button onClick={open}>Verify with World ID</button>
)}
</IDKitWidget>
Server-Side Verification
After the user completes the Face Check (Beta) flow in the World App, your web application will receive a proof. This proof should be sent to your backend for validation. Your backend will call a special Face Check (Beta) endpoint for the verification.
Example Implementation (Node.js/Next.js)
import { NextResponse } from "next/server";
import { verifyCloudProof } from "@worldcoin/minikit-js";
export async function POST(req: Request) {
const body = await req.json();
const app_id = body.app_id;
// Verify the proof against the Staging API
const result = await verifyCloudProof(
body,
app_id as `app_${string}`,
body.action,
body.signal, // Ensure unique signal values per challenge
`https://staging-developer.worldcoin.org/api/v2/verify/${app_id}` // Staging Endpoint
);
if (result?.success) {
// Verification successful
// You can now trust the user is human and unique according to the Sybil score
return NextResponse.json({ success: true });
}
return NextResponse.json({
success: false,
error: result?.code || "verification_failed"
});
}
Next steps
See Testing Guide or go back to Overview.