ibkr-api-sdk
Version:
A Node.js SDK for Interactive Brokers API
101 lines (90 loc) • 2.45 kB
JavaScript
const axios = require("axios");
const pino = require("pino");
const logger = pino({ level: "info" });
const IBKR_BASE_URL = process.env.IBKR_BASE_URL;
const API_KEY = process.env.IBKR_API_KEY;
const ACCOUNT_ID = process.env.IBKR_ACCOUNT_ID;
const axiosInstance = axios.create({
baseURL: IBKR_BASE_URL,
headers: { "Authorization": `Bearer ${API_KEY}` },
});
/**
* Create an IBKR account.
*/
const createAccount = async (accountData) => {
try {
const response = await axiosInstance.post("/accounts", accountData);
return response.data;
} catch (error) {
logger.error(error.response?.data || error.message);
throw new Error("Error creating account");
}
};
/**
* Submit KYC verification.
*/
const submitKYC = async (kycData) => {
try {
const response = await axiosInstance.post("/kyc/submit", kycData);
return response.data;
} catch (error) {
logger.error(error.response?.data || error.message);
throw new Error("Error submitting KYC");
}
};
/**
* Get account status.
*/
const getAccountStatus = async () => {
try {
const response = await axiosInstance.get(`/accounts/${ACCOUNT_ID}/status`);
return response.data;
} catch (error) {
logger.error(error.response?.data || error.message);
throw new Error("Error fetching account status");
}
};
/**
* Add a bank account.
*/
const addBank = async (bankData) => {
try {
const response = await axiosInstance.post(`/accounts/${ACCOUNT_ID}/banks`, bankData);
return response.data;
} catch (error) {
logger.error(error.response?.data || error.message);
throw new Error("Error adding bank account");
}
};
/**
* Delete a bank account.
*/
const deleteBank = async (bankId) => {
try {
const response = await axiosInstance.delete(`/accounts/${ACCOUNT_ID}/banks/${bankId}`);
return response.data;
} catch (error) {
logger.error(error.response?.data || error.message);
throw new Error("Error deleting bank account");
}
};
/**
* Perform an ACH transfer.
*/
const achTransfer = async (transferData) => {
try {
const response = await axiosInstance.post(`/accounts/${ACCOUNT_ID}/funds/ach`, transferData);
return response.data;
} catch (error) {
logger.error(error.response?.data || error.message);
throw new Error("Error processing ACH transfer");
}
};
module.exports = {
createAccount,
submitKYC,
getAccountStatus,
addBank,
deleteBank,
achTransfer,
};