Skip to main content

Documentation Index

Fetch the complete documentation index at: https://tfh-ertugrulaypek-pop-3807-update-poh-credential-documentat.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

This page focuses on IDKit SDK and bridge error codes returned during request flows.

Canonical codes

CodeMeaningTypical action
user_rejectedUser cancelled in World App.Treat as user cancellation, allow retry.
verification_rejectedLegacy rejection code (older bridge/app behavior).Handle same as user_rejected.
credential_unavailableRequested credential type is not available for that user.Offer fallback credential policy or explain requirement.
world_id_4_not_availableWorld ID 4.0 credential is not available for that user.Use a compatible fallback request or explain the World ID 4.0 requirement.
world_id_3_not_availableWorld ID 3.0 credential is not available for that user.Use a compatible fallback request or explain the World ID 3.0 requirement.
malformed_requestPayload or configuration is invalid.Check app_id, rp_context, and request shape.
invalid_networkEnvironment mismatch between app config and World App context.Align staging/production settings.
inclusion_proof_pendingCredential inclusion data is not ready yet.Retry later.
inclusion_proof_failedInclusion proof retrieval failed.Retry; if repeated, treat as operational incident.
unexpected_responseMalformed or unsupported bridge/app response.Log diagnostics and retry once.
connection_failedCould not establish/maintain bridge communication.Check connectivity and bridge reachability.
max_verifications_reachedAction already verified the maximum allowed number of times.Treat as terminal business-rule outcome.
failed_by_host_appHost app callback failed while processing a successful proof.Fix host callback/backend logic and retry.
invalid_rp_signatureRP signature could not be verified.Check the RP signing key, nonce, timestamps, action, and signed message.
nullifier_replayedNullifier was already used for this action.Treat as an already-verified outcome; do not retry the same action as a new verification.
duplicate_nonceRP reused a signature nonce.Generate a fresh nonce and signed RP context for each request.
unknown_rpRP is not known to the registry.Check the registered RP ID and app configuration.
inactive_rpRP is registered but inactive.Reactivate or reconfigure the RP before retrying.
timestamp_too_oldRP request timestamp is too old.Generate a new signed RP context with a current timestamp.
timestamp_too_far_in_futureRP request timestamp is too far in the future.Fix server clock skew and generate a new signed RP context.
invalid_timestampRP request timestamp is invalid.Check timestamp format and regenerate the signed RP context.
rp_signature_expiredRP signature has expired.Request a fresh RP signature before starting verification.
identity_attributes_not_matchedUser identity attributes did not match the requested constraints.Show an eligibility fallback or adjust the requested attribute constraints.
generic_errorCatch-all unknown failure.Log details and retry with backoff.
invalid_rp_id_formatRP ID is malformed.Use the registered rp_… ID from your app configuration.
timeoutClient-side polling timeout.Extend timeout or let the user retry.
cancelledClient-side cancellation (abort/task cancel/user close).Treat as neutral cancellation path.

Handling errors

Widgets expose an onError callback. Hooks expose isError and errorCode on the result object. Version availability errors such as world_id_4_not_available and world_id_3_not_available are terminal for the current user and request. Retrying the same request usually returns the same result; change the requested credential policy or show a user-facing fallback instead. In JS and React, match these with IDKitErrorCodes. Kotlin and Swift expose the same raw values through their IDKitErrorCode enums.
<IDKitRequestWidget
  // ...
  onError={(errorCode) => {
    console.error("IDKit error", errorCode);
  }}
/>
const flow = useIDKitRequest({ /* ... */ });

if (flow.isError) {
  console.error(flow.errorCode);
}