Portal Community

deriveAddress

Derives a Bitcoin address either from a vault-resolved signing credential (mnemonic), or from a watch-only extended public key (xpub) with no credential at all.

FieldTypeRequiredDescription
networkselect✓ YesDetermines the SLIP-44 coin_type used in the default derivation path — see Networks.
walletTypeselectNo (default readOnly)readOnly (requires xpub) or mnemonic (requires credentialID).
xpubtextConditionalExtended public key — required when walletType is readOnly.
credentialIDnumberConditionalVault reference to a mnemonic credential — required when walletType is mnemonic.
addressTypeselectNo (default p2wpkh)p2wpkh (BIP-84) or p2tr (BIP-86).
derivationPathtextNoOverrides the default SLIP-44 path.

Example response:

{
  "address": "bc1q...",
  "addressType": "p2wpkh",
  "derivationPath": "m/84'/0'/0'/0/0",
  "publicKeyHex": "03a1b2..."
}
Watch-only mode needs no credential. Supplying just xpub with walletType: readOnly derives an address without ever touching a private key or vault secret — useful for monitoring-only workflows.

signMessage

Signs an arbitrary text message with a P2WPKH-derived private key using BIP-137 — the standard "sign this message to prove address ownership" scheme most wallets support. Implemented directly against NBitcoin's low-level primitives, since NBitcoin ships no built-in message-signing helper.

FieldTypeRequiredDescription
networkselect✓ YesFund-adjacent — key derivation depends on it.
messagetext✓ YesThe message to sign.
walletTypeselect✓ Yeswif or mnemonicreadOnly cannot sign.
credentialIDnumber✓ YesVault reference to the signing key/mnemonic.
addressTypeselectNo (default p2wpkh)Must be p2wpkh — see warning below.
derivationPathtextNoOverrides the default SLIP-44 path when walletType is mnemonic.
P2WPKH only — no Taproot support. BIP-137 has no defined encoding for Taproot (P2TR) addresses. Requesting addressType: p2tr fails with WALLET_MESSAGE_SIGNING_UNSUPPORTED_FOR_ADDRESS_TYPE — resolve a P2WPKH wallet for this operation instead.

Example response:

{
  "address": "bc1q...",
  "message": "Proving ownership of this address for order #4471",
  "signature": "H6ZW...base64..."
}

verifySignature

Verifies a BIP-137 signature against a message and address — pure computation, no network call and no credential required.

FieldTypeRequiredDescription
networkselect✓ YesSelects address-decoding rules.
addresstext✓ YesThe claimed signing address.
messagetext✓ YesThe original message.
signaturetext✓ YesThe base64 BIP-137 signature to verify.

Example response:

{ "matches": true }
No credential, no network call: Verification recovers the public key from the signature itself and checks it against the claimed address — it never touches the vault or Esplora. Safe to run freely, including against untrusted/external signatures.