post https://sandbox.kyan.sh/session
Create a session for one-click trading without requiring signatures for each order.
Once a session is created, you can use the returned sessionHash in the x-one-click header for subsequent trading requests without providing signatures for each individual order.
EIP-712 Signature Example (TypeScript)
import { parseUnits } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
// Domain parameters for EIP-712 signature
const EIP712Domain = {
chainId: 421614, // Arbitrum Sepolia (use 42161 for Arbitrum One mainnet)
name: 'Premia',
verifyingContract: '0x...' // ClearingHouseProxy address from deployment
version: '1'
};
// Type definition for one-click session
const OneClickSignature = [
{ name: 'deadline', type: 'uint256' },
{ name: 'user', type: 'address' },
{ name: 'bindToIp', type: 'bool' }
];
// Example session data
const sessionData = {
user: '0xYourWalletAddress', // Your Ethereum address
bind_to_ip: true // Optional: bind session to IP address (defaults to true)
};
// Calculate deadline (5 minutes from now)
const deadline = Math.floor(Date.now() / 1000) + 300;
// Setup wallet
const account = privateKeyToAccount('0xYourPrivateKey');
// Sign the typed data
const signature = await account.signTypedData({
domain: EIP712Domain,
types: { OneClickSignature },
primaryType: 'OneClickSignature',
message: {
deadline,
user: sessionData.user,
bindToIp: sessionData.bind_to_ip
}
});
// Final request payload
const requestPayload = {
...sessionData,
signature,
signature_deadline: deadline
};
// Create session
const response = await fetch(`${BASE_URL}/session`, {
method: 'POST',
headers: {
'x-apikey': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(requestPayload)
});
const { sessionHash } = await response.json();
// Use session for trading
const orderResponse = await fetch(`${BASE_URL}/limit`, {
method: 'POST',
headers: {
'x-apikey': API_KEY,
'x-one-click': sessionHash,
'Content-Type': 'application/json'
},
body: JSON.stringify(orders) // No signature required
});