API Reference

Complete API reference for all Shade402 packages.

Core Package

PaymentRequest

Payment request model.

class PaymentRequest {
  maxAmountRequired: string;
  assetType: string;
  assetAddress: string;
  paymentAddress: string;
  network: string;
  expiresAt: Date;
  nonce: string;
  paymentId: string;
  resource: string;
  description?: string;

  constructor(data: PaymentRequestData): PaymentRequest;
  isExpired(): boolean;
  toDict(): Record<string, any>;
  toJSON(): string;
  static fromDict(data: unknown): PaymentRequest;
}

PaymentAuthorization

Payment authorization model.

class PaymentAuthorization {
  paymentId: string;
  actualAmount: string;
  paymentAddress: string;
  assetAddress: string;
  network: string;
  timestamp: Date;
  signature: string;
  publicKey: string;
  transactionHash?: string;

  constructor(data: PaymentAuthorizationData): PaymentAuthorization;
  toHeaderValue(): string;
  toDict(): Record<string, any>;
  toJSON(): string;
  static fromHeader(headerValue: string): PaymentAuthorization;
}

SolanaPaymentProcessor

Solana payment processor.

class SolanaPaymentProcessor {
  constructor(
    rpcUrl: string,
    keypair?: Keypair,
    options?: SolanaPaymentProcessorOptions
  );

  async createPaymentTransaction(
    request: PaymentRequest,
    amount: string,
    payerKeypair: Keypair,
    decimals?: number,
    options?: SolanaPaymentProcessorOptions
  ): Promise<Transaction>;

  async signAndSendTransaction(
    transaction: Transaction,
    keypair: Keypair
  ): Promise<string>;

  async verifyPayment(
    request: PaymentRequest,
    authorization: PaymentAuthorization
  ): Promise<boolean>;

  async getTokenBalance(
    publicKey: PublicKey | string,
    tokenMint: PublicKey | string
  ): Promise<number>;

  async close(): Promise<void>;
}

Encryption Functions

function encryptResource(plaintext: string, publicKeyPem: string): string;
function decryptResource(encryptedBase64: string, privateKeyPem: string): string;
function generateKeyPair(): { publicKey: string; privateKey: string };

Error Classes

class X402Error extends Error {
  code: string;
  details: ErrorDetails;
}

class PaymentRequiredError extends X402Error {
  paymentRequest: any;
}

class PaymentExpiredError extends X402Error {
  paymentRequest: any;
}

class InsufficientFundsError extends X402Error {
  requiredAmount: string;
  availableAmount: string;
}

class PaymentVerificationError extends X402Error {}
class TransactionBroadcastError extends X402Error {}
class InvalidPaymentRequestError extends X402Error {}

Client Package

X402Client

Explicit client with manual payment control.

class X402Client {
  constructor(
    walletKeypair: Keypair,
    rpcUrl?: string,
    httpClient?: AxiosInstance,
    allowLocal?: boolean
  );

  async get(
    url: string,
    options?: AxiosRequestConfig & {
      payment?: PaymentAuthorization;
      encryptedResource?: string;
    }
  ): Promise<AxiosResponse>;

  async post(
    url: string,
    data?: any,
    options?: AxiosRequestConfig & {
      payment?: PaymentAuthorization;
      encryptedResource?: string;
    }
  ): Promise<AxiosResponse>;

  async put(
    url: string,
    data?: any,
    options?: AxiosRequestConfig & {
      payment?: PaymentAuthorization;
      encryptedResource?: string;
    }
  ): Promise<AxiosResponse>;

  async delete(
    url: string,
    options?: AxiosRequestConfig & {
      payment?: PaymentAuthorization;
      encryptedResource?: string;
    }
  ): Promise<AxiosResponse>;

  async request(
    method: string,
    url: string,
    options?: AxiosRequestConfig & {
      payment?: PaymentAuthorization;
      encryptedResource?: string;
    }
  ): Promise<AxiosResponse>;

  paymentRequired(response: AxiosResponse): boolean;
  parsePaymentRequest(response: AxiosResponse): PaymentRequest;
  encryptResource(resource: string): string;
  getServerPublicKey(): string | null;
  async createPayment(
    request: PaymentRequest,
    amount?: string
  ): Promise<PaymentAuthorization>;
  async close(): Promise<void>;
}

X402AutoClient

Automatic client with automatic payment handling.

class X402AutoClient {
  constructor(
    walletKeypair: Keypair,
    rpcUrl?: string,
    options?: {
      maxRetries?: number;
      autoRetry?: boolean;
      maxPaymentAmount?: string;
      allowLocal?: boolean;
    }
  );

  async fetch(
    url: string,
    options?: AxiosRequestConfig & {
      method?: string;
      autoRetry?: boolean;
    }
  ): Promise<AxiosResponse>;

  async get(
    url: string,
    options?: AxiosRequestConfig & { autoRetry?: boolean }
  ): Promise<AxiosResponse>;

  async post(
    url: string,
    data?: any,
    options?: AxiosRequestConfig & { autoRetry?: boolean }
  ): Promise<AxiosResponse>;

  async put(
    url: string,
    data?: any,
    options?: AxiosRequestConfig & { autoRetry?: boolean }
  ): Promise<AxiosResponse>;

  async delete(
    url: string,
    options?: AxiosRequestConfig & { autoRetry?: boolean }
  ): Promise<AxiosResponse>;

  async close(): Promise<void>;
}

Express Package

Configuration

function initX402(config: X402ConfigOptions): void;
function getConfig(): X402ConfigOptions | undefined;
function isInitialized(): boolean;

interface X402ConfigOptions {
  paymentAddress: string;
  tokenMint: string;
  network: string;
  rpcUrl?: string;
  autoVerify?: boolean;
  defaultAmount?: string;
  paymentTimeout?: number;
  encryptionPublicKey?: string;
  encryptionPrivateKey?: string;
}

Middleware

function paymentRequired(options: PaymentRequiredOptions): RequestHandler;

interface PaymentRequiredOptions {
  amount: string;
  paymentAddress?: string;
  tokenMint?: string;
  network?: string;
  description?: string;
  expiresIn?: number;
  autoVerify?: boolean;
}

interface X402Request extends Request {
  payment?: PaymentAuthorization;
  decryptedResource?: string;
}

Error Middleware

function x402ErrorMiddleware(
  options?: X402ErrorMiddlewareOptions
): ErrorRequestHandler;

interface X402ErrorMiddlewareOptions {
  includeStack?: boolean;
  logErrors?: boolean;
  onError?: (error: Error, req: Request, res: Response) => void;
}

Response Builders

function build402Response(
  options: Build402ResponseOptions
): PaymentRequestData;

function build402ResponseWithEncryption(
  options: Build402ResponseOptions & {
    encryptionPublicKey?: string;
  }
): {
  body: PaymentRequestData;
  headers: Record<string, string>;
};

interface Build402ResponseOptions {
  amount: string;
  paymentAddress: string;
  tokenMint: string;
  network: string;
  resource: string;
  description?: string;
  expiresIn?: number;
}

Next.js Package

Configuration

function initX402(config: X402ConfigOptions): void;
function getConfig(): X402ConfigOptions | undefined;
function isInitialized(): boolean;

Middleware

function withPayment<T extends NextRequest | NextApiRequest>(
  options: PaymentRequiredOptions,
  handler: X402Handler<T>
): X402Handler<T>;

interface PaymentRequiredOptions {
  amount: string;
  paymentAddress?: string;
  tokenMint?: string;
  network?: string;
  description?: string;
  expiresIn?: number;
  autoVerify?: boolean;
}

interface X402HandlerContext {
  payment?: PaymentAuthorization;
  decryptedResource?: string;
}

type X402Handler<T> = (
  req: T,
  context: X402HandlerContext
) => Promise<NextResponse | void>;

LangChain Package

Payment Tool

function createX402PaymentTool(
  options: X402PaymentToolOptions
): DynamicStructuredTool;

class X402PaymentTool extends DynamicStructuredTool {
  constructor(options: X402PaymentToolOptions);
}

interface X402PaymentToolOptions {
  walletKeypair: Keypair;
  rpcUrl?: string;
  maxPayment?: string;
  name?: string;
  description?: string;
  allowLocal?: boolean;
}

LangGraph Package

Payment Nodes

async function paymentNode(state: PaymentState): Promise<PaymentState>;
async function fetchWithPaymentNode(state: PaymentState): Promise<PaymentState>;
function checkPaymentRequired(state: PaymentState): string;
function checkPaymentCompleted(state: PaymentState): string;

interface PaymentState {
  wallet_keypair?: Keypair;
  api_url?: string;
  api_response?: string;
  payment_completed?: boolean;
  payment_error?: string | null;
  payment_required?: boolean;
  max_payment_amount?: string;
  http_method?: string;
  allow_local?: boolean;
  rpc_url?: string;
  [key: string]: any;
}

Type Definitions

All packages export TypeScript type definitions. See Type Definitions for complete reference.

Next Steps

Last updated