Solana APIs Semi Custodial Wallet A simple in-app crypto wallet to securely and quickly onboard non-native crypto users to web3 dApps.
postman API collection: https://documenter.getpostman.com/view/18419720/UzQvt5Kf#e58b4757-05ad-45aa-b8fc-82a0f3a66f88
Create Semi Custodial Wallet (Deprecated)
A type of wallet where Shyft holds half of your private keys while the other half is with the client or the end user.
POST /sol/v1/wallet/create_semi_wallet
We create a standard Solana wallet using keypair.generate(). The private key is then encrypted with the provided password and random encryption parameters. In order to decrypt the key, we need the same password and the same encryption parameters.
So, password and encryption parameters act as 2 keys to unlock your wallet .
Shyft never ever stores or logs your password at any time. This can be confirmed with our open source code.
JS Response
Copy const myHeaders = new Headers();
myHeaders.append("x-api-key", "QEbMrBRQEP92ToRo");
myHeaders.append("Content-Type", "application/json");
const raw = JSON.stringify({
"password": "Ishkaran"
});
const requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://api.shyft.to/sol/v1/wallet/create_semi_wallet/", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Copy {
"success": true,
"message": "Semi custodial wallet created successfully",
"result": {
"wallet_address": "VtkQHQt6GFggoNiWT7Tvafce6cJvCZbzEU8gBTez5rz"
}
}
Decrypt Semi Custodial Wallet (Deprecated)
Decrypt a semi-custodial wallet and get an encrypted private key and decryption key.
You can only get decryption data for semi-custodial wallets created by you.
GET /sol/v1/wallet/decrypt_semi_wallet
JS Untitled
Copy const myHeaders = new Headers();
myHeaders.append("x-api-key", "QEbMrBRQEP92ToRo");
myHeaders.append("Content-Type", "application/json");
const raw = JSON.stringify({
"wallet": "VtkQHQt6GFggoNiWT7Tvafce6cJvCZbzEU8gBTez5rz",
"password": "Ishkaran"
});
const requestOptions = {
method: 'GET',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://api.shyft.to/sol/v1/wallet/decrypt_semi_wallet", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Copy {
"success": true,
"message": "Decryption Data",
"result": {
"encryptedPrivateKey": "A9tP2aDsBNwSUojMc2eFF8qakkRRrfrYeUkGvFmZBHtrLPU7s9BNYupRazdMcbGuXtHpAbfW32MZgmGxdM5Z5U8wZrEZ5cNUcnjCSptRE2Hv3jB1zUP8JHKg8U44LM238ZUtHGUvZJcS1",
"decryptionKey": "{\"salt\":\"8YBdmxT3aoSCAAMBKwYw6V\",\"kdf\":\"pbkdf2\",\"digest\":\"sha256\",\"iterations\":100000,\"nonce\":\"GevsymPUrngEKXxBPWQvTyufrY9XKnsM9\"}"
}
}
Create Semi Custodial Wallet
A type of wallet where Shyft holds half of your private keys while the other half is with the client or the end user.
POST /sol/v1/semi_wallet/create
We create a standard Solana wallet using keypair.generate(). The private key is then encrypted with the provided password and random encryption parameters. In order to decrypt the key, we need the same password and the same encryption parameters.
So, password and encryption parameters act as 2 keys to unlock your wallet .
Shyft never ever stores or logs your password at any time. This can be confirmed with our open source code.
JS Response
Copy var myHeaders = new Headers();
myHeaders.append("x-api-key", "20CcwuFeQOIcfuHx");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
"password": "Qwerrty@z2"
});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://api.shyft.to/sol/v1/semi_wallet/create", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Copy {
"success": true,
"message": "Semi custodial wallet created successfully",
"result": {
"wallet_address": "7pu5mcx2N9bQwqfEe8aQkTzG6zrd9rsFArcvbeY93RkN"
}
}
Decrypt Semi Custodial Wallet
Decrypt a semi-custodial wallet and get an encrypted private key and decryption key.
You can only get decryption data for semi-custodial wallets created by you.
Query Params
password: Current password of your wallet
GET /sol/v1/semi_wallet/decrypt
JS Response
Copy var myHeaders = new Headers();
myHeaders.append("x-api-key", "20CcwuFeQOIcfuHx");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://api.shyft.to/sol/v1/semi_wallet/decrypt?password=Qwerrty@z2&wallet=7pu5mcx2N9bQwqfEe8aQkTzG6zrd9rsFArcvbeY93RkN", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Copy {
"success": true,
"message": "Decryption Data",
"result": {
"encryptedPrivateKey": "pYFpkcU9P4wcSo3xrTzH4cvAZFAPBjEQuc181P5t9UAtym7NgxHpfCYgR6f7ikhZYRJ3x4citPCTA4KKjZFnCtWMUjh5d67gzKbiS2BEmiph4E4raJfnSvR1adzPCn9VGTJZafb3CnMKmD",
"decryptionKey": "{\"salt\":\"HhXEQgWV8scfSFaKyroKg2\",\"kdf\":\"pbkdf2\",\"digest\":\"sha256\",\"iterations\":100000,\"nonce\":\"ELWuGTCFDCK13jYx9d7pHnJrnthMnxpLo\"}"
}
}
Get Keypair of Semi Custodial Wallet
Query Params
password: Current password of your wallet
GET /sol/v1/semi_wallet/get_keypair
JS Response
Copy var myHeaders = new Headers();
myHeaders.append("x-api-key", "20CcwuFeQOIcfuHx");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://api.shyft.to/sol/v1/semi_wallet/get_keypair?wallet=7pu5mcx2N9bQwqfEe8aQkTzG6zrd9rsFArcvbeY93RkN&password=Qwerrty@z2", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Copy {
"success": true,
"message": "Keypair of the wallet",
"result": {
"publicKey": "7pu5mcx2N9bQwqfEe8aQkTzG6zrd9rsFArcvbeY93RkN",
"secretKey": "4Zko3JAtroEL8sKg9HHMBWpiRpGoetAqG4mofRU83tn5XwgC97EiMbxQ8VYXTGrih5bcwmDXRHgUnKgAqM32QN8r"
}
}
Change password of Semi Custodial Wallet
BODY (raw)
current_password: Current password of your wallet
new_password: New password of your wallet
POST /sol/v1/semi_wallet/change_password
JS Response
Copy var myHeaders = new Headers();
myHeaders.append("x-api-key", "20CcwuFeQOIcfuHx");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
"current_password": "Qwerrty@z2",
"new_password": "nothingto",
"wallet": "7pu5mcx2N9bQwqfEe8aQkTzG6zrd9rsFArcvbeY93RkN"
});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://api.shyft.to/sol/v1/semi_wallet/change_password", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Copy {
"success": true,
"message": "Password changed successfully"
}