APIs

Developer Docs

signMessage API method

May 22, 2025

Disclaimer: Leather does not verify message intent or validate downstream use. Developers are responsible for safe implementation and signature verification.

Request the signature of an arbitrary message with the first Bitcoin address (Native SegWit or Taproot) of an account.

Method name

signMessage

Parameters

  • message (string, required): Arbitrary message to sign

  • paymentType (string, optional): Address type to use; "p2wpkh" (default) or "p2tr"

  • network (string, optional): Signing network; supports "mainnet" (default), "testnet", "signet", "sbtcDevenv", or "devnet"

  • account (number, optional): Account index to sign from; defaults to active account

Example request

import { Verifier } from "bip322-js";

try {
  // Request signature
  const response = await window.LeatherProvider.request("signMessage", {
    message: "Hello world",
    paymentType: "p2tr",
    network: "testnet",
    account: 0
  });

  console.log("Response:", response);

  // Verify signature
  const isValid = Verifier.verifySignature(
    response.result.address,
    response.result.message,
    response.result.signature
  );

  console.log("Signature is valid: ", isValid);
} catch (error) {
  console.log("Request error:", error?.error?.code, error?.error?.message);
}

Example response

{
  "jsonrpc": "2.0",
  "id": "adc296e9-beb7-4685-a443-24c30d0d04dd",
  "result": {
    "signature": "AUDl4ZQJo585ldL0I9S+CjDpT7+5WB2Sspgh47Dsx0WX0iZSCLV+K6smOKJ1u4IUaN6grvNspaZ9GpqPOOHsTTVE",
    "address": "tb1pwfstsmedjfr84rzjsnsjly7x0utzlcfed0uqv26vmwsrvvzuf82qsad4uz",
    "message": "Hello world"
  }
}

Sandbox

To try this live in a prebuilt example, open the signMessage sandbox on CodeSandbox.

Make sure the Leather extension is installed and running.