Skip to main content

Constructor

new X402Server({
  client,          // Viem PublicClient
  facilitator,     // Facilitator instance
  network?,        // optional, default inferred from client
});

createRequirements(config)

{
  asset: string;
  maxAmountRequired: string;
  network?: string;
  scheme?: "exact";
  outputSchema?: Record<string, unknown>;
  paymentType?: "permit" | "eip3009" | "permit2" | "auto";
  resource?: string;
  description?: string;
  mimeType?: string;
  maxTimeoutSeconds?: number;
  extra?: Record<string, unknown>;
  autoDetect?: boolean; // default true
}

Other method signatures

// Full payment handling: parse → verify → settle
process(
  paymentHeader: string | undefined,
  expectedRequirements: PaymentRequirements
): Promise<ProcessResult>;

// Parse only
parse(
  paymentHeader: string | undefined,
  expectedRequirements: PaymentRequirements
): ParseResult;

// Verify only (after parse)
verify(parsed: ParsedPayment): Promise<VerifyResult>;

// Settle only (on-chain)
settle(parsed: ParsedPayment): Promise<SettleResult>;

// Warm up token capability cache
initialize(tokens: string[]): Promise<InitResult>;

// Build 402 response
get402Response(
  requirements: PaymentRequirements,
  error?: string,
  errorStage?: "parse" | "verify" | "settle"
): Response402;

// Clear cache
clearCache(tokenAddress?: string): Promise<void>;

Key inputs and validation

  • paymentHeader: from req.headers["x-payment"], may be undefined
  • expectedRequirements: must match the protected resource (network/asset/payTo/timeout, etc.)
  • After creation, consider validating with PaymentRequirementsSchema.parse(requirements) (Zod)