# gemini-node-api

> Gemini Node.js API

Latest version **4.3.0** (published 2022-06-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install gemini-node-api
pnpm add gemini-node-api
yarn add gemini-node-api
bun add gemini-node-api
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.3.0 |
| Published | 2022-06-26 |
| First published | 2019-07-03 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=16.13.0 |
| Dependencies | 2 |
| Unpacked size | 68.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 17 |
| Author | Sergey Bakulin |
| Maintainers | vansergen |
| Keywords | Gemini, crypto, exchange, API |

## Links

- npm: https://www.npmjs.com/package/gemini-node-api
- Repository: https://github.com/vansergen/gemini-node-api
- Homepage: https://github.com/vansergen/gemini-node-api#readme
- Issues: https://github.com/vansergen/gemini-node-api/issues
- Funding: https://commerce.coinbase.com/checkout/04a40393-21f0-44aa-b11b-726b67f08c5a
- npm.io page: https://npm.io/package/gemini-node-api

## Dependencies (2)

- [ws](https://npm.io/package/ws.md) ^8.8.0
- [rpc-request](https://npm.io/package/rpc-request.md) ^6.0.2

## Alternatives

- [@gemini-wallet/core](https://npm.io/package/@gemini-wallet/core.md) — 515.6K weekly downloads
- [utility](https://npm.io/package/utility.md) — 416.6K weekly downloads
- [@primno/dpapi](https://npm.io/package/@primno/dpapi.md) — 7.2K weekly downloads
- [pi-readseek](https://npm.io/package/pi-readseek.md) — 3.7K weekly downloads
- [@emilia-protocol/verify](https://npm.io/package/@emilia-protocol/verify.md) — 1.1K weekly downloads

## Recent versions

- 4.3.0 (latest) — 2022-06-26
- 4.2.1 — 2022-05-15
- 4.2.0 — 2022-05-15
- 4.1.0 — 2022-05-15
- 4.0.2 — 2022-05-13
- 4.0.1 — 2022-05-13
- 4.0.0 — 2021-10-30
- 3.1.2 — 2021-03-07
- 3.1.1 — 2021-02-14
- 3.1.0 — 2021-02-05
- 3.0.1 — 2020-12-21
- 3.0.0 — 2020-12-20
- 2.1.0 — 2020-03-21
- 2.0.0 — 2020-01-28
- 1.0.1 — 2019-12-18
- … 13 more at https://npm.io/package/gemini-node-api/versions

## README

# Gemini Node.js API ![CI Status](https://github.com/vansergen/gemini-node-api/workflows/CI/badge.svg) ![npm](https://img.shields.io/npm/v/gemini-node-api) [![Coverage Status](https://coveralls.io/repos/github/vansergen/gemini-node-api/badge.svg?branch=main)](https://coveralls.io/github/vansergen/gemini-node-api?branch=main) [![Known Vulnerabilities](https://snyk.io/test/github/vansergen/gemini-node-api/badge.svg)](https://snyk.io/test/github/vansergen/gemini-node-api) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) ![NPM license](https://img.shields.io/npm/l/gemini-node-api) ![node version](https://img.shields.io/node/v/gemini-node-api) ![npm downloads](https://img.shields.io/npm/dt/gemini-node-api) ![GitHub top language](https://img.shields.io/github/languages/top/vansergen/gemini-node-api)

Node.js library for [Gemini](https://docs.gemini.com/).

## Installation

```bash
npm install gemini-node-api
```

## Usage

### PublicClient

```typescript
import { PublicClient } from "gemini-node-api";
const client = new PublicClient();
```

- [`getSymbols`](https://docs.gemini.com/rest-api/#symbols)

```typescript
const symbols = await client.getSymbols();
```

- [`getSymbol`](https://docs.gemini.com/rest-api/#symbol-details)

```typescript
const symbol = "ZECLTC";
const info = await client.getSymbol({ symbol });
```

- [`getTicker`](https://docs.gemini.com/rest-api/#ticker)

```typescript
const symbol = "zecltc";
const ticker = await client.getTicker({ symbol });
/**
 * for V2
 * @see https://docs.gemini.com/rest-api/#ticker-v2
 */
const v = "v2";
const tickerV2 = await client.getTicker({ symbol, v });
```

- [`getCandles`](https://docs.gemini.com/rest-api/#candles)

```typescript
const symbol = "zecltc";
const time_frame = "30m";
const candles = await client.getCandles({ symbol, time_frame });
```

- [`getOrderBook`](https://docs.gemini.com/rest-api/#current-order-book)

```typescript
const symbol = "zecltc";
const limit_bids = 25;
const limit_asks = 20;
const book = await client.getOrderBook({
  symbol,
  limit_bids,
  limit_asks,
});
```

- [`getTradeHistory`](https://docs.gemini.com/rest-api/#trade-history)

```typescript
const symbol = "zecltc";
const timestamp = 1547146811;
const limit_trades = 100;
const include_breaks = true;
const trades = await client.getTradeHistory({
  symbol,
  timestamp,
  limit_trades,
  include_breaks,
});
```

- [`getCurrentAuction`](https://docs.gemini.com/rest-api/#current-auction)

```typescript
const symbol = "zecltc";
const auction = await client.getCurrentAuction({ symbol });
```

- [`getAuctionHistory`](https://docs.gemini.com/rest-api/#auction-history)

```typescript
const symbol = "zecltc";
const timestamp = 1547146811;
const limit_auction_results = 100;
const include_indicative = true;
const history = await client.getAuctionHistory({
  symbol,
  timestamp,
  limit_auction_results,
  include_indicative,
});
```

- [`getPriceFeed`](https://docs.gemini.com/rest-api/#price-feed)

```typescript
const priceFeed = await client.getPriceFeed();
```

### AuthenticatedClient

```typescript
import { AuthenticatedClient } from "gemini-node-api";
const key = "gemini-api-key";
const secret = "gemini-api-secret";
const client = new AuthenticatedClient({ key, secret });
```

- [`newOrder`](https://docs.gemini.com/rest-api/#new-order)

```typescript
const symbol = "zecltc";
const client_order_id = "d0c5340b-6d6c-49d9-b567-48c4bfca13d2";
const amount = 1;
const price = 0.9;
const side = "buy";
const options = ["maker-or-cancel"];
const order = await client.newOrder({
  symbol,
  client_order_id,
  amount,
  price,
  side,
  options,
});
```

- [`buy`](https://docs.gemini.com/rest-api/#new-order)

```typescript
const symbol = "zecltc";
const amount = 1;
const price = 0.9;
const account = "primary";
const type = "exchange limit";
const order = await client.buy({ symbol, amount, price, account, type });
```

- [`sell`](https://docs.gemini.com/rest-api/#new-order)

```typescript
const symbol = "zecltc";
const amount = 0.99;
const price = 0.99;
const stop_price = 1;
const type = "exchange stop limit";
const order = await client.sell({ symbol, amount, price, stop_price, type });
```

- [`cancelOrder`](https://docs.gemini.com/rest-api/#cancel-order)

```typescript
const order_id = 106817811;
const account = "primary";
const order = await client.cancelOrder({ order_id, account });
```

- [`cancelSession`](https://docs.gemini.com/rest-api/#cancel-all-session-orders)

```typescript
const account = "primary";
const response = await client.cancelSession({ account });
```

- [`cancelAll`](https://docs.gemini.com/rest-api/#cancel-all-active-orders)

```typescript
const account = "primary";
const response = await client.cancelAll({ account });
```

- [`getOrderStatus`](https://docs.gemini.com/rest-api/#order-status)

```typescript
const order_id = 44375901;
const account = "primary";
const include_trades = true;
const order = await client.getOrderStatus({
  order_id,
  account,
  include_trades,
});
```

- [`getActiveOrders`](https://docs.gemini.com/rest-api/#get-active-orders)

```typescript
const account = "primary";
const orders = await client.getActiveOrders({ account });
```

- [`getPastTrades`](https://docs.gemini.com/rest-api/#get-past-trades)

```typescript
const symbol = "bcheth";
const limit_trades = 10;
const timestamp = 1547232911;
const account = "primary";
const trades = await client.getPastTrades({
  symbol,
  limit_trades,
  timestamp,
  account,
});
```

- [`getNotionalVolume`](https://docs.gemini.com/rest-api/#get-notional-volume)

```typescript
const account = "primary";
const volume = await client.getNotionalVolume({ account });
```

- [`getTradeVolume`](https://docs.gemini.com/rest-api/#get-trade-volume)

```typescript
const volume = await client.getTradeVolume();
```

- [`newClearingOrder`](https://docs.gemini.com/rest-api/#new-clearing-order)

```typescript
const counterparty_id = "OM9VNL1G";
const expires_in_hrs = 24;
const symbol = "btcusd";
const amount = 100;
const price = 9500;
const side = "buy";
const order = await client.newClearingOrder({
  counterparty_id,
  expires_in_hrs,
  symbol,
  amount,
  price,
  side,
});
```

- [`newBrokerOrder`](https://docs.gemini.com/rest-api/#new-broker-order)

```typescript
const source_counterparty_id = "R485E04Q";
const target_counterparty_id = "Z4929ZDY";
const expires_in_hrs = 1;
const symbol = "ethusd";
const amount = 175;
const price = 200;
const side = "sell";
const order = await client.newBrokerOrder({
  source_counterparty_id,
  target_counterparty_id,
  expires_in_hrs,
  symbol,
  amount,
  price,
  side,
});
```

- [`getClearingOrderStatus`](https://docs.gemini.com/rest-api/#clearing-order-status)

```typescript
const clearing_id = "OM9VNL1G";
const order = await client.getClearingOrderStatus({ clearing_id });
```

- [`cancelClearingOrder`](https://docs.gemini.com/rest-api/#cancel-clearing-order)

```typescript
const clearing_id = "OM9VNL1G";
const order = await client.cancelClearingOrder({ clearing_id });
```

- [`confirmClearingOrder`](https://docs.gemini.com/rest-api/#confirm-clearing-order)

```typescript
const clearing_id = "OM9VNL1G";
const symbol = "btcusd";
const amount = 100;
const price = 9500;
const side = "sell";
const order = await client.confirmClearingOrder({
  clearing_id,
  symbol,
  amount,
  price,
  side,
});
```

- [`getAvailableBalances`](https://docs.gemini.com/rest-api/#get-available-balances)

```typescript
const account = "primary";
const balances = await client.getAvailableBalances({ account });
```

- [`getNotionalBalances`](https://docs.gemini.com/rest-api/#get-notional-balances)

```typescript
const account = "primary";
const currency = "gbp";
const balances = await client.getNotionalBalances({ account, currency });
```

- [`getTransfers`](https://docs.gemini.com/rest-api/#transfers)

```typescript
const timestamp = 1495127793;
const limit_transfers = 12;
const account = "primary";
const transfers = await client.getTransfers({
  timestamp,
  limit_transfers,
  account,
});
```

- [`getDepositAddresses`](https://docs.gemini.com/rest-api/#get-deposit-addresses)

```typescript
const network = "bitcoincash";
const account = "primary";
const addresses = await client.getDepositAddresses({ network, account });
```

- [`getNewAddress`](https://docs.gemini.com/rest-api/#new-deposit-address)

```typescript
const currency = "ltc";
const label = "New LTC deposit address";
const legacy = true;
const account = "primary";
const address = await client.getNewAddress({
  currency,
  label,
  legacy,
  account,
});
```

- [`withdrawCrypto`](https://docs.gemini.com/rest-api/#withdraw-crypto-funds-to-whitelisted-address)

```typescript
const currency = "btc";
const address = "mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR";
const amount = 10;
const account = "primary";
const withdrawal = await client.withdrawCrypto({
  currency,
  address,
  account,
  amount,
});
```

- [`internalTransfer`](https://docs.gemini.com/rest-api/#internal-transfers)

```typescript
const currency = "btc";
const sourceAccount = "primary";
const targetAccount = "secondary";
const amount = "100";
const transfer = await client.internalTransfer({
  currency,
  sourceAccount,
  targetAccount,
  amount,
});
```

- [`addBank`](https://docs.gemini.com/rest-api/#add-bank)

```typescript
const accountnumber = "account-number-string";
const routing = "routing-number-string";
const type = "checking";
const name = "Satoshi Nakamoto Checking";
const result = await client.addBank({
  accountnumber,
  routing,
  type,
  name,
});
```

- [`getPaymentMethods`](https://docs.gemini.com/rest-api/#payment-methods)

```typescript
const account = "primary";
const methods = await client.getPaymentMethods({ account });
```

- [`withdrawSEN`](https://docs.gemini.com/rest-api/#sen-withdrawals)

```typescript
const account = "primary";
const amount = "893484.26";
const bankId = "97631a24-ca40-4277-b3d5-38c37673d029";
const response = await client.withdrawSEN({ account, amount, bankId });
```

- [`getAccountDetails`](https://docs.gemini.com/rest-api/#account-detail)

```typescript
const account = "primary";
const details = await client.getAccountDetails({ account });
```

- [`createAccount`](https://docs.gemini.com/rest-api/#create-account)

```typescript
const name = "My Secondary Account";
const type = "custody";
const result = await client.createAccount({ name, type });
```

- [`getAccounts`](https://docs.gemini.com/rest-api/#get-accounts-in-master-group)

```typescript
const accounts = await client.getAccounts();
```

- [`withdrawGUSD`](https://docs.gemini.com/rest-api/#withdraw-usd-as-gusd)

```typescript
const address = "0x0F2B20Acb2fD7EEbC0ABc3AEe0b00d57533b6bD1";
const amount = "500";
const account = "primary";
const withdrawal = await client.withdrawGUSD({ address, amount, account });
```

- [`heartbeat`](https://docs.gemini.com/rest-api/#heartbeat)

```typescript
const heartbeat = await client.heartbeat();
```

### [WebsocketClient](https://docs.gemini.com/websocket-api/)

```typescript
import { WebsocketClient } from "gemini-node-api";
const key = "gemini-api-key";
const secret = "gemini-api-secret";
const websocket = new WebsocketClient({ key, secret });
websocket.on("error", (error, market) => {
  console.error(error);
});
websocket.on("open", (market) => {
  console.log("The connection is open", market);
});
websocket.on("close", (market) => {
  console.log("The connection is closed", market);
});
websocket.on("message", (message, market) => {
  console.info("New message from", market);
  console.info(message);
});
```

- [`connectMarket`](https://docs.gemini.com/websocket-api/#market-data)

```typescript
const heartbeat = true;
const top_of_book = false;
const bids = true;
const offers = true;
const trades = true;
const auctions = false;
const symbol = "zecltc";
websocket.on("open", (market) => console.log("Open:", market));
await websocket.connectMarket({
  symbol,
  heartbeat,
  top_of_book,
  bids,
  offers,
  trades,
  auctions,
});
await websocket.connectMarket({ symbol: "btcusd" });
```

- [`disconnectMarket`](https://docs.gemini.com/websocket-api/#market-data)

```typescript
const symbol = "zecltc";
websocket.once("close", (market) => console.log("Closed:", market));
await websocket.disconnectMarket({ symbol });
```

- [`connect`](https://docs.gemini.com/websocket-api/#market-data-version-2)

```typescript
websocket.on("open", (market) => console.log("Open:", market));
await websocket.connect();
```

- [`disconnect`](https://docs.gemini.com/websocket-api/#market-data-version-2)

```typescript
websocket.once("close", (market) => console.log("Closed:", market));
await websocket.disconnect();
```

- [`subscribe`](https://docs.gemini.com/websocket-api/#level-2-data)

```typescript
const subscriptions = [
  { name: "l2", symbols: ["BTCUSD", "ETHUSD"] },
  { name: "candles_1m", symbols: ["BTCUSD"] },
];
await websocket.connect();
await websocket.subscribe(subscriptions);
```

- [`unsubscribe`](https://docs.gemini.com/websocket-api/#unsubscribe)

```typescript
const subscriptions = [{ name: "l2", symbols: ["BTCUSD", "ETHUSD"] }];
await websocket.unsubscribe(subscriptions);
```

- [`connectOrders`](https://docs.gemini.com/websocket-api/#order-events)

```typescript
const symbolFilter = "zecltc";
const apiSessionFilter = "UI";
const eventTypeFilter = ["accepted", "rejected"];
const account = "primary";
websocket.on("message", (message, market) => {
  if (market === "orders") {
    console.log("New message:", message);
  }
});
await websocket.connectOrders({
  account,
  symbolFilter,
  apiSessionFilter,
  eventTypeFilter,
});
```

- [`disconnectOrders`](https://docs.gemini.com/websocket-api/#order-events)

```typescript
websocket.once("close", (market) => {
  if (market === "orders") {
    console.log("Closed");
  }
});
await websocket.disconnectOrders();
```

### Test

```bash
npm test
```

---
_Source: https://npm.io/package/gemini-node-api · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
