Regarding first question,
No, you don’t have to run your own node. What I know is blockstream esplora provides public API with documentation you can work with.
Regarding second question,
It depends on what kind of segwit address(p2wpkh, p2wsh, p2tr) it is, but I guess what you want to spend would be the most common segwit transaction, which is p2wpkh(single signature with public key).
For p2wpkh segwit spend, you can refer below code working for nodejs, which you can find here, too.
import * as bitcoin from 'bitcoin-sdk-js';
const privkey =
'e6c58327b4bf1314296bba7adb66f94c36ea5611ac07830c229aa7ee6f9caac3';
const toAddress="tb1qmjqyknun9umlwlle5nuy8jz9ms7v85cp7k2nfe";
const toValue = 300000; // unit is satoshi
const txHash="8bcd197873dbff5cc67cb3e0b1cbbdf097c7af94b0e9365adecb424e408294bf";
const inputValue = 310981; // fee is input value - total value
const tx = new bitcoin.Transaction();
await tx.addInput({
txHash: txHash,
index: n, // it should be vout of utxo, index of utxo in transation
value: inputValue,
});
await tx.addOutput({
address: toAddress,
value: toValue,
});
await tx.signInput(privkey, 0);
const txHex = await tx.getSignedHex();
For other type of segwit address, it really varies on unlocking script, so there’s not really one way solution for it.











