Skip to main content
Use MiniKit.signTypedData() to request an EIP-712 signature from the user’s wallet.

Availability

  • Works natively in World App
  • Can execute outside World App through Wagmi or a custom fallback when configured

Basic Usage

import { MiniKit } from "@worldcoin/minikit-js";
import type {
  CommandResultByVia,
  MiniAppSignTypedDataSuccessPayload,
  MiniKitSignTypedDataOptions,
} from "@worldcoin/minikit-js/commands";

export async function signTypedData() {
  const input = {
    primaryType: "Mail",
    domain: {
      name: "Example",
      version: "1",
      chainId: 480,
    },
    types: {
      EIP712Domain: [
        { name: "name", type: "string" },
        { name: "version", type: "string" },
        { name: "chainId", type: "uint256" },
      ],
      Mail: [
        { name: "contents", type: "string" },
      ],
    },
    message: {
      contents: "Hello world",
    },
  } satisfies MiniKitSignTypedDataOptions;

  const result: CommandResultByVia<MiniAppSignTypedDataSuccessPayload> =
    await MiniKit.signTypedData(input);

  console.log(result.data.signature);
}

Result

type SignTypedDataResponse =
  | {
      executedWith: "minikit" | "wagmi";
      data: {
        status: "success";
        version: number;
        signature: string;
        address: string;
      };
    }
  | {
      executedWith: "fallback";
      data: unknown;
    };

Fallback Behavior

  • executedWith: "wagmi" means the web signer handled the request
  • executedWith: "fallback" means your custom fallback handled the request

Error Codes

CodeMeaning
invalid_operationThe request contains an invalid operation
user_rejectedThe user rejected the request
input_errorThe payload is invalid
simulation_failedSimulation failed before signing
generic_errorUnexpected failure
disallowed_operationThe operation is not allowed
invalid_contractThe contract or domain is invalid
malicious_operationThe request was flagged as malicious