Is there any way to generate bitcoin addresses other than the Blockchain API? (given the fact that it is not public)
In short, scroll all the way down to the summary to see this short version:
var randArr = new Uint8Array(32) //create a typed array of 32 bytes (256 bits) window.crypto.getRandomValues(randArr) //populate array with cryptographically secure random numbers //some Bitcoin and Crypto methods don't like Uint8Array for input. They expect regular JS arrays. var privateKeyBytes =  for (var i = 0; i < randArr.length; ++i) privateKeyBytes[i] = randArr[i] var eckey = new Bitcoin.ECKey(privateKeyBytes) eckey.compressed = true var address = eckey.getBitcoinAddress().toString() console.log(address)// 1FkKMsKNJqWSDvTvETqcCeHcUQQ64kSC6s var privateKeyBytesCompressed = privateKeyBytes.slice(0) //clone array privateKeyBytesCompressed.push(0x01) var privateKeyWIFCompressed = new Bitcoin.Address(privateKeyBytesCompressed) privateKeyWIFCompressed.version = 0x80 privateKeyWIFCompressed = privateKeyWIFCompressed.toString()
There are a number of sample programs here: https://bitcointalk.org/index.php?topic=1026.0
Also see the wiki for the step-by-step algorithm for generating a valid address.
Coinbase Your wallet on Coinbase is a collection of bitcoin addresses. New bitcoin addresses are automatically generated for each payment on Coinbase and stay associated with your account forever (so it is safe to reuse them).