Accepting Bitcoin payments without the full blockchain or third party APIs? I want to make a basic program/script that utilizes Bitcoin payments, but I don't have the storage space to sync with the entire blockchain, and I don't want to be dependent on a third-party API like those offered by blockchain.info or block.io.

Basically, I need a wallet with these three properies:


Lightweight (i.e. doesn't require the full blockchain)
Has a CLI to generate and return a receiving address on command
Has a CLI to get the total wallet balance


I'm vaguely familiar with thin clients such as Electrum, MultiBit, and MultiBit HD, and I know Electrum even has a CLI, but there doesn't seem to be anything in their documentation about generating new addresses: 

https://docs.electrum.org/en/latest/cmdline.html

I've read that Electrum wallets work with a queue of addresses and generate new ones automatically after they have been used, so even if I could just get a list of addresses associated with the wallet I could get something like the functionality I want. But again, the CLI seems really limited.

All in all, I'm frustrated. Surely there is a way to do what I am trying to do, and if there isn't an obvious solution, why not? It seems counterintuitive that I should have to use centralized services and APIs for basic wallet functionality just because I can't afford to rent a server with 90+GB of space to store the blockchain.
If you don't want to run a node or use any 3rd party APIs you can use a library since you only want to accept payments.  

Use an extended public key from one of your wallets, and generate new addresses from the HD xpub using a library. When a user pays it will show up in your Phone/PC wallet. 

For example with Bitcore library it would be:

var bitcore = require("bitcore-lib");

var pub = new bitcore.HDPublicKey('xpubMyHDPublicKey');
var derivedHdPublicKey = pub.derive('m/0/1'); 
//increment up the keychain m/0/2, m/0/3, etc each order
var derivedPublicKey = derivedHdPublicKey.publicKey;
var address = new bitcore.Address(derivedPublicKey);
console.log(address);


Then just keep track of orders and addresses on your server database.