GeminiGemini
SandboxGet API key
  • Crypto Trading
  • Prediction Markets
Resources
  • Changelog

© 2026 Gemini Space Station, Inc.

Gemini Crypto Exchange LogoGemini Crypto Exchange Logo
Market Data
    List SymbolsgetGet Symbol DetailsgetGet Assets for NetworkgetGet NetworkgetGet TickergetList Fee PromosgetGet Current Order BookgetList TradesgetList PricesgetGet Funding AmountgetGet Funding Amount Report FilegetGet Ticker V2getList CandlesgetList Derivative CandlesgetFX Rateget
Orders
    Create New OrderpostCancel OrderpostCancel All Active OrderspostCancel All Session OrderspostGet Order StatuspostList Active OrderspostList Past OrderspostList Past TradespostGet Trading VolumepostGet Notional Trading VolumepostWrap Orderpost
Fund Management
    Get Available BalancespostGet Notional BalancespostList Deposit AddressespostCreate New Deposit AddresspostList Past TransferspostList Custody Fee TransferspostGet Gas Fee EstimationpostWithdraw Crypto FundspostAdd BankpostAdd Bank CADpostList Payment MethodspostList Approved AddressespostCreate New Approved AddresspostRemove Approved AddresspostTransfer Between AccountspostGet Transaction Historypost
Margin Trading
    Get Margin Account SummarypostGet Margin Interest RatespostPreview Margin Order Impactpost
Session
    Heartbeatpost
Clearing
    Create New Clearing OrderpostGet Clearing OrderpostCancel Clearing OrderpostConfirm Clearing OrderpostList Clearing OrderspostList Clearing BrokerspostCreate New Broker OrderpostList Clearing Tradespost
Instant
    Get Instant QuotepostExecute Instant Orderpost
Account Administration
    Get Account DetailpostCreate New AccountpostRename AccountpostList Accounts in GrouppostRoles Endpointpost
OAuth
    Revoke OAuth Tokenpost
Staking
    List Staking BalancespostStake Crypto FundspostList Staking Event HistorypostList Staking RatesgetList Staking RewardspostUnstake Crypto Fundspost
Derivatives
    Get Account MarginpostList Funding PaymentspostGet Funding Payment Report FilegetGet Funding Payment Report JSONpostGet Open PositionspostGet Risk Statsget
Schemas
REST API
REST API

Fund Management (1.0.0)

Endpoint

Get Available Balances

POST
https://api.gemini.com
/v1/balances
Under the terms of the Gemini API Agreement, polling this endpoint may be subject to rate limiting.

This will show the available balances in the supported currencies

Please note that Gemini is currently in the process of introducing new API architecture that will impact how decimal balances are returned from this endpoint for fiat and crypto assets.

As a result of this change, requests to the balances endpoint routed via the new architecture will return fiat balances and crypto balances truncated to 15 and 19 decimal places, respectively. This change has been introduced to correct for the display of miniscule residual values that do not actually represent usable balances.

It is recommended that users floor the values returned from this endpoint to the correct precision until the migration to the new architecture has been completed.

Roles

The API key you use to access this endpoint must have the Trader, Fund Manager or Auditor role assigned. See Roles for more information.

The OAuth scope must have balances:read assigned to access this endpoint. See OAuth Scopes for more information.

Get Available Balances › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Get Available Balances › Request Body

request
string · required

The API endpoint path

Example: /v1/balances
TimestampType · required

timestamp

account
string · required

Required for Master API keys as described in Private API Invocation. The name of the account within the subaccount group. Specifies the account on which you intend to place the order. Only available for exchange accounts.

Example: primary
showPendingBalances
boolean

Whether to include pending balances such as in-flight crypto deposits or withdrawals in the balances response.

Note: Setting this field to true will result in slower response times due to additional database lookups required to retrieve pending balance information.

Example: false
Default: false

Get Available Balances › Responses

The account balances

object[]
type
string · enum
Enum values:
exchange
Example: exchange
currency
string

The currency symbol

Example: BTC
amount
number

The confirmed balance for the currency (also referred to as confirmedBalance). For crypto withdrawals, this value is not reduced until the withdrawal has been confirmed on the blockchain. This delay protects against blockchain reorganizations. Use the available field instead if you need balances that immediately reflect holds.

Example: 10.5
available
number

The amount available for trading. This value is reduced immediately when an order hold or withdrawal hold is placed, making it the recommended field for tracking real-time spendable balances.

Example: 9
availableForWithdrawal
number

The amount available for withdrawal

Example: 9
pendingWithdrawal
number

The amount pending withdrawal

Example: 1
pendingDeposit
number

The amount pending deposit

Example: 0.5
_timestamp
integer

Server-side monotonically increasing clock value in nanoseconds. Clients can use this value to detect and filter out stale responses that may occur due to load balancing or potential stale servers.

Example: 1710547200000000000
POST/v1/balances
curl --request POST \
  --url https://api.gemini.com/v1/balances \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/balances",
  "nonce": "<nonce>",
  "account": "primary",
  "showPendingBalances": false
}
'
shell
Example Request Body
{
  "request": "/v1/balances",
  "nonce": "<nonce>",
  "account": "primary",
  "showPendingBalances": false
}
json
application/json
Example Responses
[
  {
    "type": "exchange",
    "currency": "BTC",
    "amount": "5.0",
    "available": "4.5",
    "availableForWithdrawal": "4.5",
    "_timestamp": 1710547200000000000
  },
  {
    "type": "exchange",
    "currency": "USD",
    "amount": "15000.00",
    "available": "5000.00",
    "availableForWithdrawal": "5000.00",
    "_timestamp": 1710547200000000000
  },
  {
    "type": "exchange",
    "currency": "ETH",
    "amount": "10.0",
    "available": "10.0",
    "availableForWithdrawal": "10.0",
    "_timestamp": 1710547200000000000
  }
]
json
Response with multiple currency balances (showPendingBalances = false)
application/json

Get Notional Balances

POST
https://api.gemini.com
/v1/notionalbalances/{currency}
Under the terms of the Gemini API Agreement, polling this endpoint may be subject to rate limiting.

This will show the available balances in the supported currencies as well as the notional value in the currency specified.

Please note that Gemini is currently in the process of introducing new API architecture that will impact how decimal balances are returned from this endpoint for fiat and crypto assets.

As a result of this change, requests to the notional balances endpoint routed via the new architecture will return fiat balances and crypto balances truncated to 15 and 19 decimal places, respectively. This change has been introduced to correct for the display of miniscule residual values that do not actually represent usable balances.

It is recommended that users floor the values returned from this endpoint to the correct precision until the migration to the new architecture has been completed.

Roles

The API key you use to access this endpoint must have the Trader, Fund Manager or Auditor role assigned. See Roles for more information.

The OAuth scope must have balances:read assigned to access this endpoint. See OAuth Scopes for more information.

Get Notional Balances › path Parameters

currency
string · required

Either a fiat currency, e.g. usd or gbp, or a supported crypto-currency, e.g. gusd, btc, eth, aave, etc.

Get Notional Balances › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Get Notional Balances › Request Body

request
string · required

The literal string "/v1/notionalbalances/currency"

required

The nonce, as described in Private API Invocation

account
string

Required for Master API keys. The name of the account within the subaccount group.

Get Notional Balances › Responses

Successful operation

object[]
currency
string

Currency code, see symbols and minimums

amount
string

The current balance

amountNotional
string

Amount, in notional

available
string

The amount that is available to trade

availableNotional
string

Available, in notional

availableForWithdrawal
string

The amount that is available to withdraw

availableForWithdrawalNotional
string

AvailableForWithdrawal, in notional

POST/v1/notionalbalances/{currency}
curl --request POST \
  --url https://api.gemini.com/v1/notionalbalances/:currency \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/notionalbalances/usd",
  "nonce": "<nonce>"
}
'
shell
Example Request Body
{
  "request": "/v1/notionalbalances/usd",
  "nonce": "<nonce>"
}
json
Basic request to get notional balances in USD
application/json
Example Responses
[
  {
    "currency": "BTC",
    "amount": "1154.62034001",
    "amountNotional": "10386000.59",
    "available": "1129.10517279",
    "availableNotional": "10161000.71",
    "availableForWithdrawal": "1129.10517279",
    "availableForWithdrawalNotional": "10161000.71"
  },
  {
    "currency": "USD",
    "amount": "18722.79",
    "amountNotional": "18722.79",
    "available": "14481.62",
    "availableNotional": "14481.62",
    "availableForWithdrawal": "14481.62",
    "availableForWithdrawalNotional": "14481.62"
  },
  {
    "currency": "ETH",
    "amount": "20124.50369697",
    "amountNotional": "100621.31",
    "available": "20124.50369697",
    "availableNotional": "100621.31",
    "availableForWithdrawal": "20124.50369697",
    "availableForWithdrawalNotional": "100621.31"
  }
]
json
application/json

List Deposit Addresses

POST
https://api.gemini.com
/v1/addresses/{network}
Under the terms of the Gemini API Agreement, polling this endpoint may be subject to rate limiting. This endpoint is currently restricted further than our standard rate limiting to a rate of 1 request per 2 seconds per subaccount. This rate is subject to change and will be updated here accordingly.

Roles

The API key you use to access this endpoint must have the Trader, Fund Manager or Auditor role assigned. See Roles for more information.

The OAuth scope must have addresses:read or addresses:create assigned to access this endpoint. See OAuth Scopes for more information.

List Deposit Addresses › path Parameters

network
string · required

Can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

List Deposit Addresses › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

List Deposit Addresses › Request Body

request
string · required

The literal string "/v1/addresses/network"

required

The nonce, as described in Private API Invocation

Only returns addresses created on or after this timestamp

account
string

Required for Master API keys. The name of the account within the subaccount group.

List Deposit Addresses › Responses

Successful operation

object[]
address
string

String representation of the cryptocurrency address

timestamp

label
string

If you provided a label when creating the address, it will be echoed back here

memo
string

It would be present if applicable, it will be present for cosmos address

network
string

The blockchain network for the address

POST/v1/addresses/{network}
curl --request POST \
  --url https://api.gemini.com/v1/addresses/:network \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/addresses/bitcoin",
  "nonce": "<nonce>"
}
'
shell
Example Request Body
{
  "request": "/v1/addresses/bitcoin",
  "nonce": "<nonce>"
}
json
Basic request to get Bitcoin deposit addresses
application/json
Example Responses
[
  {
    "address": "n2saq73aDTu42bRgEHd8gd4to1gCzHxrdj",
    "timestamp": 1424285102000,
    "label": "my bitcoin address"
  },
  {
    "address": "n2wpl14aJEu10bRgMNd0gdjH8dHJ3h2a3ks",
    "timestamp": 1824785101000
  }
]
json
Response with Bitcoin deposit addresses
application/json

Create New Deposit Address

POST
https://api.gemini.com
/v1/deposit/{network}/newAddress
Under the terms of the Gemini API Agreement, polling this endpoint may be subject to rate limiting. This endpoint is currently restricted further than our standard rate limiting to a rate of 1 request per 2 seconds per subaccount. This rate is subject to change and will be updated here accordingly.

Roles

The API key you use to access this endpoint must have the Fund Manager role assigned. See Roles for more information.

The OAuth scope must have addresses:create assigned to access this endpoint. See OAuth Scopes for more information.

Create New Deposit Address › path Parameters

network
string · required

Can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

Create New Deposit Address › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Create New Deposit Address › Request Body

request
string · required

The literal string "/v1/deposit/network/newAddress"

required

The nonce, as described in Private API Invocation

label
string

A label for the address

legacy
boolean

Whether to generate a legacy P2SH-P2PKH litecoin address. False by default.

account
string

Required for Master API keys. The name of the account within the subaccount group.

Create New Deposit Address › Responses

Successful operation

address
string

String representation of the cryptocurrency address

timestamp

label
string

If you provided a label when creating the address, it will be echoed back here

memo
string

It would be present if applicable, it will be present for cosmos address

network
string

The blockchain network for the address

POST/v1/deposit/{network}/newAddress
curl --request POST \
  --url https://api.gemini.com/v1/deposit/:network/newAddress \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/deposit/bitcoin/newAddress",
  "nonce": "<nonce>",
  "label": "optional test label"
}
'
shell
Example Request Body
{
  "request": "/v1/deposit/bitcoin/newAddress",
  "nonce": "<nonce>",
  "label": "optional test label"
}
json
Basic request to create a new Bitcoin deposit address
application/json
Example Responses
{
  "network": "bitcoin",
  "address": "n2saq73aDTu42bRgEHd8gd4to1gCzHxrdj",
  "label": "optional test label"
}
json
Response with a new Bitcoin deposit address
application/json

List Past Transfers

POST
https://api.gemini.com
/v2/transfers
The v1 transfers endpoint is being retired. This v2 endpoint is the recommended replacement, offering full multichain support with accurate status for all supported networks. Please migrate to this endpoint at your earliest convenience.

This endpoint shows deposits and withdrawals in supported currencies with full multichain (multi-network) support. It returns accurate status information for transfers on all supported networks including Solana, Arbitrum, Optimism, Base, Avalanche, and Ethereum.

Each transfer in the response includes a network field identifying the blockchain network, along with network-specific feeAmount, feeCurrency, and txHash values.

This endpoint does not currently show cancelled advances, returned outgoing wires or ACH transactions, or other exceptional transaction circumstances.

Fiat transfers between non-derivative and derivatives accounts are prohibited.

Roles

The API key you use to access this endpoint must have the Trader, Fund Manager or Auditor role assigned. See Roles for more information.

The OAuth scope must have history:read assigned to access this endpoint. See OAuth Scopes for more information.

List Past Transfers › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

List Past Transfers › Request Body

request
string · required

The literal string "/v2/transfers"

required

The nonce, as described in Private API Invocation

currency
string

Currency code, see symbols and minimums

network
string

Filter transfers by blockchain network (e.g., ethereum, solana, arbitrum, optimism, base, avalanche)

Only return transfers after this timestamp

limit_transfers
integer

The maximum number of transfers to return. The default is 10 and the maximum is 50.

account
string

Required for Master API keys. The name of the account within the subaccount group.

show_completed_deposit_advances
boolean

Whether to display completed deposit advances. True by default.

List Past Transfers › Responses

Successful operation

object[]
type
string · enum

The type of the transfer

Enum values:
Deposit
Withdrawal
Reward
AdminDebit
AdminCredit
status
string · enum

The status of the transfer

Enum values:
Complete
Pending
Advanced

timestamp

eid
integer

The transfer event ID

currency
string

The currency transferred

amount
string

The amount transferred

network
string

The blockchain network the transfer was executed on (e.g., ethereum, solana, arbitrum, optimism, base, avalanche). Not present for fiat or administrative transfers.

feeAmount
string

The fee charged for the transfer

feeCurrency
string

The currency in which the fee was charged

txHash
string

The on-chain transaction hash, if applicable

method
string

The transfer method (e.g., ACH, CreditCard)

destination
string

The destination address for withdrawals

withdrawalId
string

The unique withdrawal identifier

outputIdx
integer

The output index for withdrawals

purpose
string

The purpose or reason for administrative transfers

POST/v2/transfers
curl --request POST \
  --url https://api.gemini.com/v2/transfers \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v2/transfers",
  "nonce": "<nonce>"
}
'
shell
Example Request Body
{
  "request": "/v2/transfers",
  "nonce": "<nonce>"
}
json
Basic request to get all transfers across all networks
application/json
Example Responses
[
  {
    "type": "Withdrawal",
    "status": "Complete",
    "timestampms": 1772818620354,
    "eid": 368598436530,
    "currency": "USDC",
    "amount": "0.01",
    "network": "ethereum",
    "feeAmount": "0.118856",
    "feeCurrency": "USDC",
    "txHash": "714a15c4fd2d37629d27e56a63aaec5f91e0053dde3eb357be71663c1197b391",
    "destination": "0x83cFb8C13f06716b449E5D24F5b4cc6Cc64a189A",
    "withdrawalId": "69ab0b0f-3c76-433d-84a5-c8bcc6718411"
  },
  {
    "type": "Withdrawal",
    "status": "Complete",
    "timestampms": 1772034480391,
    "eid": 368474658614,
    "currency": "USDC",
    "amount": "1799",
    "network": "solana",
    "feeAmount": "0.202536",
    "feeCurrency": "USDC",
    "txHash": "4vJ9JU1bJJE96FWSJKvHsmmFADCg4gpZQff4P3bkLKi",
    "withdrawalId": "9b7a5100-b3ee-4820-9b5b-c2dd7db6559b"
  },
  {
    "type": "Deposit",
    "status": "Advanced",
    "timestampms": 1771990797452,
    "eid": 309356152,
    "currency": "ETH",
    "amount": "100",
    "network": "ethereum",
    "feeAmount": "0",
    "feeCurrency": "ETH",
    "txHash": "605c5fa8bf99458d24d61e09941bc443ddc44839d9aaa508b14b296c0c8269b2"
  }
]
json
Response with transfers across different networks
application/json

List Custody Fee Transfers

POST
https://api.gemini.com
/v1/custodyaccountfees
Under the terms of the Gemini API Agreement, polling this endpoint may be subject to rate limiting. This endpoint is currently restricted further than our standard rate limiting to a rate of 1 request per 5 seconds per subaccount. This rate is subject to change and will be updated here accordingly. This is the same limit as the transfers endpoint. One call to one affects the other.

This endpoint shows Custody fee records in the supported currencies.

Roles

The API key you use to access this endpoint must have the Trader, Fund Manager or Auditor role assigned. See Roles for more information.

The OAuth scope must have history:read assigned to access this endpoint. See OAuth Scopes for more information.

List Custody Fee Transfers › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

List Custody Fee Transfers › Request Body

request
string · required

The literal string "/v1/custodyaccountfees"

required

The nonce, as described in Private API Invocation

Only return Custody fee records on or after this timestamp

limit_transfers
integer

The maximum number of Custody fee records to return. The default is 10 and the maximum is 50.

account
string

Required for Master API keys. The name of the account within the subaccount group.

List Custody Fee Transfers › Responses

Successful operation

object[]
txTime
integer

Time of Custody fee record in milliseconds

feeAmount
string

The fee amount charged

feeCurrency
string

Currency that the fee was paid in

eid
integer

Custody fee event id

eventType
string

Custody fee event type

POST/v1/custodyaccountfees
curl --request POST \
  --url https://api.gemini.com/v1/custodyaccountfees \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/custodyaccountfees",
  "nonce": "<nonce>"
}
'
shell
Example Request Body
{
  "request": "/v1/custodyaccountfees",
  "nonce": "<nonce>"
}
json
Basic request to get custody account fees
application/json
Example Responses
[
  {
    "txTime": 1657236174056,
    "feeAmount": "10",
    "feeCurrency": "BTC",
    "eid": 256627,
    "eventType": "Withdrawal"
  },
  {
    "txTime": 1652279045196,
    "feeAmount": "10000000",
    "feeCurrency": "ETH",
    "eid": 15364,
    "eventType": "CustodyFeeDebit"
  },
  {
    "txTime": 1652279025196,
    "feeAmount": "1850",
    "feeCurrency": "WFIL",
    "eid": 9016,
    "eventType": "RiaFeeDebit"
  },
  {
    "txTime": 1652279025196,
    "feeAmount": "1850",
    "feeCurrency": "WFIL",
    "eid": 9016,
    "eventType": "RiaFeeCredit"
  }
]
json
Response with multiple custody fee records
application/json

Get Gas Fee Estimation

POST
https://api.gemini.com
/v2/withdraw/{network}/{ticker}/feeEstimate
The v1 fee estimation endpoint is being retired. This v2 endpoint is the recommended replacement, offering explicit blockchain network selection for multi-network tokens. Please migrate to this endpoint at your earliest convenience.

API users will not be aware of the transfer fees before starting the withdrawal process. This endpoint allows you to find out the estimated gas fees before you start a withdrawal. It requires specifying the blockchain network and ticker, which is useful for tokens that exist on multiple networks (e.g. USDC on Ethereum vs Solana).

Roles

The API key you use to access this endpoint can have the Trader, Fund Manager, Auditor, WealthManager or Administrator role assigned. See Roles for more information.

Get Gas Fee Estimation › path Parameters

network
string · required

The blockchain network for the withdrawal (e.g. ethereum, bitcoin, solana)

ticker
string · required

The currency code for the withdrawal (e.g. eth, btc, sol, usdc)

Get Gas Fee Estimation › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Get Gas Fee Estimation › Request Body

request
string · required

The string /v2/withdraw/{network}/{ticker}/feeEstimate where {network} is the blockchain network (e.g. ethereum, bitcoin, solana) and {ticker} is the currency code (e.g. eth, btc, sol). See Symbols and minimums

Example: /v2/withdraw/ethereum/eth/feeEstimate
required

The nonce, as described in Private API Invocation

address
string · required

Standard string format of the destination cryptocurrency address

Example: 0x31c2105b8dea834167f32f7ea7d877812e059230
amount
string · required

Quoted decimal amount to withdraw

Example: 0.01
account
string

Required for Master API keys. The name of the account within the subaccount group.

Example: primary
memo
string

It would be present if applicable, it will be present for cosmos address.

Get Gas Fee Estimation › Responses

Successful fee estimation response

currency
string

Currency code, see symbols.

Example: ETH
fee
number · decimal

The estimated withdrawal fee as a decimal amount

Example: 0.001
isOverride
boolean

Whether an override on the customer's account for free withdrawals exists

Example: false
monthlyLimit
integer

Total number of allowable fee-free withdrawals

Example: 1
monthlyRemaining
integer

Total number of allowable fee-free withdrawals remaining

Example: 1
POST/v2/withdraw/{network}/{ticker}/feeEstimate
curl --request POST \
  --url https://api.gemini.com/v2/withdraw/:network/:ticker/feeEstimate \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v2/withdraw/ethereum/eth/feeEstimate",
  "nonce": "<nonce>",
  "address": "0x31c2105b8dea834167f32f7ea7d877812e059230",
  "amount": "0.01"
}
'
shell
Example Request Body
{
  "request": "/v2/withdraw/ethereum/eth/feeEstimate",
  "nonce": "<nonce>",
  "address": "0x31c2105b8dea834167f32f7ea7d877812e059230",
  "amount": "0.01"
}
json
Estimate withdrawal fee for ETH on Ethereum network
application/json
Example Responses
{
  "currency": "ETH",
  "fee": 0.001,
  "isOverride": false,
  "monthlyLimit": 1,
  "monthlyRemaining": 1
}
json
JSON response for ETH withdrawal fee estimate
application/json

Withdraw Crypto Funds

POST
https://api.gemini.com
/v2/withdraw/{network}/{ticker}
The v1 withdraw endpoint is being retired. This v2 endpoint is the recommended replacement, offering explicit blockchain network selection for multi-network tokens. Please migrate to this endpoint at your earliest convenience.

Withdraw cryptocurrency funds to an approved address, with explicit network selection.

The key improvement over v1 is the explicit network path parameter, which allows you to specify exactly which blockchain network to use for the withdrawal. This is especially important for tokens available on multiple networks (e.g., USDC on Ethereum, Solana, Base, Arbitrum, etc.).

Before you can withdraw cryptocurrency funds to an approved address, you need three things:

  1. You must have an approved address list for your account
  2. The address you want to withdraw funds to needs to already be on that approved address list
  3. An API key with the Fund Manager role added

If you would like to withdraw via API to addresses that are not on your approved address list, please reach out to trading@gemini.com. We can enable this feature for you provided a set of approved IP addresses. This functionality is only available for exchange accounts. Pre-approved IP addresses and addresses added to your approved address list are required to enable withdrawal APIs for custody accounts.

Use the Get Network endpoint to discover which networks support withdrawals for a given token.

See Roles for more information on how to add the Fund Manager role to the API key you want to use.

Roles

The API key you use to access this endpoint must have the Fund Manager role assigned. See Roles for more information.

The OAuth scope must have crypto:send assigned to access this endpoint. See OAuth Scopes for more information.

Withdraw Crypto Funds › path Parameters

network
string · required

Can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

ticker
string · required

The cryptocurrency ticker code (e.g., btc, eth, usdc). See Symbols and minimums.

Withdraw Crypto Funds › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Withdraw Crypto Funds › Request Body

address
string · required

The destination address for the withdrawal

amount
string · required

The amount to withdraw

memo
string

Required for certain networks that use memos (e.g., Solana, XRP, Cosmos). The destination tag or memo for the withdrawal.

clientTransferId
string · uuid

A unique UUID for idempotent withdrawals. If provided, duplicate requests with the same clientTransferId will not create additional withdrawals.

Withdraw Crypto Funds › Responses

Successful operation

withdrawalId
string

A unique ID for the withdrawal

address
string

Standard string format of the withdrawal destination address

amount
string

The withdrawal amount

currency
string

The currency code of the withdrawn asset

fee
string

The fee charged for the withdrawal

POST/v2/withdraw/{network}/{ticker}
curl --request POST \
  --url https://api.gemini.com/v2/withdraw/:network/:ticker \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "address": "mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR",
  "amount": "1"
}
'
shell
Example Request Body
{
  "address": "mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR",
  "amount": "1"
}
json
JSON payload for BTC withdrawal on the Bitcoin network
application/json
Example Responses
{
  "withdrawalId": "02176a83-a6b1-4202-9b85-1c1c92dd25c4",
  "address": "mi98Z9brJ3TgaKsmvXatuRahbFRUFKRUdR",
  "amount": "1",
  "currency": "BTC",
  "fee": "0"
}
json
JSON response for BTC withdrawal on Bitcoin network
application/json

Add Bank

POST
https://api.gemini.com
/v1/payments/addbank

The add bank API allows for banking information to be sent in via API. However, for the bank to be verified, you must still send in a wire for any amount from the bank account.

Roles

This API requires the FundManager role. See Roles for more information.

The OAuth scope must have banks:create assigned to access this endpoint. See OAuth Scopes for more information.

Add Bank › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Add Bank › Request Body

request
string · required

The literal string "/v1/payments/addbank"

required

The nonce, as described in Private API Invocation

accountnumber
string · required

Account number of bank account to be added

routing
string · required

Routing number of bank account to be added

type
string · enum · required

Type of bank account to be added. Accepts checking or savings

Enum values:
checking
savings
name
string · required

The name of the bank account as shown on your account statements

account
string

Required for Master API keys as described in Private API Invocation. The name of the account within the subaccount group. Master API keys can get all account names using the Get Accounts endpoint.

Add Bank › Responses

Successful operation

referenceId
string

Reference ID for the new bank addition request. Once received, send in a wire from the requested bank account to verify it and enable withdrawals to that account.

POST/v1/payments/addbank
curl --request POST \
  --url https://api.gemini.com/v1/payments/addbank \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/payments/addbank",
  "nonce": "<nonce>",
  "accountnumber": "account-number-string",
  "routing": "routing-number-string",
  "type": "checking",
  "name": "Satoshi Nakamoto Checking"
}
'
shell
Example Request Body
{
  "request": "/v1/payments/addbank",
  "nonce": "<nonce>",
  "accountnumber": "account-number-string",
  "routing": "routing-number-string",
  "type": "checking",
  "name": "Satoshi Nakamoto Checking"
}
json
application/json
Example Responses
{
  "referenceId": "BankAccountRefId(18428)"
}
json
application/json

Add Bank CAD

POST
https://api.gemini.com
/v1/payments/addbank/cad

The add bank API allows for CAD banking information to be sent in via API. However, for the bank to be verified, you must still send in a wire for any amount from the bank account.

Roles

This API requires the FundManager role. See Roles for more information.

The OAuth scope must have banks:create assigned to access this endpoint. See OAuth Scopes for more information.

Add Bank CAD › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Add Bank CAD › Request Body

request
string · required

The literal string "/v1/payments/addbank/cad"

required

The nonce, as described in Private API Invocation

swiftcode
string · required

The account SWIFT code

accountNumber
string · required

Account number of bank account to be added

type
string · enum · required

Type of bank account to be added. Accepts checking or savings

Enum values:
checking
savings
name
string · required

The name of the bank account as shown on your account statements

institutionNumber
string

The institution number of the account - optional but recommended.

branchnnumber
string

The branch number - optional but recommended.

account
string

Required for Master API keys as described in Private API Invocation. The name of the account within the subaccount group. Master API keys can get all account names using the Get Accounts endpoint.

Add Bank CAD › Responses

Successful operation

result
string

Status of the request. "OK" indicates the account has been created successfully.

POST/v1/payments/addbank/cad
curl --request POST \
  --url https://api.gemini.com/v1/payments/addbank/cad \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/payments/addbank/cad",
  "nonce": "<nonce>",
  "swiftcode": "swift-code-string",
  "accountnumber": "account-number-string",
  "institutionnumber": "institution-number-string",
  "branchnumber": "branch-number-string",
  "type": "checking",
  "name": "Satoshi Nakamoto Checking",
  "account": "account-string"
}
'
shell
Example Request Body
{
  "request": "/v1/payments/addbank/cad",
  "nonce": "<nonce>",
  "swiftcode": "swift-code-string",
  "accountnumber": "account-number-string",
  "institutionnumber": "institution-number-string",
  "branchnumber": "branch-number-string",
  "type": "checking",
  "name": "Satoshi Nakamoto Checking",
  "account": "account-string"
}
json
application/json
Example Responses
{
  "result": "OK"
}
json
application/json

List Payment Methods

POST
https://api.gemini.com
/v1/payments/methods

The payments methods API will return data on balances in the account and linked banks.

Roles

The API key you use to access this endpoint can be either a Master or Account level key with any role assigned. See Roles for more information.

The OAuth scope must have banks:read assigned to access this endpoint. See OAuth Scopes for more information.

List Payment Methods › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

List Payment Methods › Request Body

request
string · required

The literal string "/v1/payments/methods"

required

The nonce, as described in Private API Invocation

account
string

Required for Master API keys as described in Private API Invocation. The name of the account within the subaccount group. Master API keys can get all account names using the Get Accounts endpoint.

List Payment Methods › Responses

Successful operation

object[]

Array of JSON objects with available fiat currencies and their balances.

object[]

Array of JSON objects with banking information

POST/v1/payments/methods
curl --request POST \
  --url https://api.gemini.com/v1/payments/methods \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/payments/methods",
  "account": "primary",
  "nonce": "<nonce>"
}
'
shell
Example Request Body
{
  "request": "/v1/payments/methods",
  "account": "primary",
  "nonce": "<nonce>"
}
json
application/json
Example Responses
{
  "balances": [
    {
      "type": "exchange",
      "currency": "USD",
      "amount": "50893484.26",
      "available": "50889972.01",
      "availableForWithdrawal": "50889972.01"
    }
  ],
  "banks": [
    {
      "bank": "Jpmorgan Chase Bank Checking  - 1111",
      "bankId": "97631a24-ca40-4277-b3d5-38c37673d029"
    }
  ]
}
json
application/json

List Approved Addresses

POST
https://api.gemini.com
/v1/approvedAddresses/account/{network}

Allows viewing of Approved Address list.

Roles

This API can accept any role. See Roles for more information.

List Approved Addresses › path Parameters

network
string · required

Can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

List Approved Addresses › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

List Approved Addresses › Request Body

request
string · required

The literal string "/v1/approvedAddresses/account/:network" where :network can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

required

The nonce, as described in Private API Invocation

account
string

Required for Master API keys as described in Private API Invocation. The name of the account within the subaccount group. Specifies the account on which you intend to view the approved address list.

List Approved Addresses › Responses

Successful operation

object[]

Array of approved addresses on both the account and group level.

POST/v1/approvedAddresses/account/{network}
curl --request POST \
  --url https://api.gemini.com/v1/approvedAddresses/account/:network \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/approvedAddresses/account/ethereum",
  "nonce": "<nonce>",
  "account": "primary"
}
'
shell
Example Request Body
{
  "request": "/v1/approvedAddresses/account/ethereum",
  "nonce": "<nonce>",
  "account": "primary"
}
json
application/json
Example Responses
{
  "approvedAddresses": [
    {
      "network": "ethereum",
      "scope": "account",
      "label": "api_added_ETH_address",
      "status": "pending-time",
      "createdAt": "1602692572349",
      "address": "0x0000000000000000000000000000000000000000"
    },
    {
      "network": "ethereum",
      "scope": "group",
      "label": "api_added_ETH_address",
      "status": "pending-time",
      "createdAt": "1602692542296",
      "address": "0x0000000000000000000000000000000000000000"
    },
    {
      "network": "ethereum",
      "scope": "group",
      "label": "hardware_wallet",
      "status": "active",
      "createdAt": "1602087433270",
      "address": "0xA63123350Acc8F5ee1b1fBd1A6717135e82dBd28"
    },
    {
      "network": "ethereum",
      "scope": "account",
      "label": "hardware_wallet",
      "status": "active",
      "createdAt": "1602086832986",
      "address": "0xA63123350Acc8F5ee1b1fBd1A6717135e82dBd28"
    }
  ]
}
json
application/json

Create New Approved Address

POST
https://api.gemini.com
/v1/approvedAddresses/{network}/request

Allows for creation of an approved withdrawal address. Once the request is made, the 7 day waiting period will begin. Please note that all approved address requests are subject to the 7 day waiting period.

If you add an address using an account-scoped API key, then the address will be added to your account specific approved address list. If you use a master-scoped API key, the address will be added to your group-level approved address list unless you specify an account.

This endpoint is subject to additional security constraints and is only accessible via API keys which have configured Trusted IP controls.

Please reach out to trading@gemini.com if you have any questions about approved addresses.

Roles

This API requires the FundManager role. See Roles for more information.

Create New Approved Address › path Parameters

network
string · required

Can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

Create New Approved Address › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Create New Approved Address › Request Body

request
string · required

The literal string "/v1/approvedAddresses/:network/request" where :network can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

required

The nonce, as described in Private API Invocation

address
string · required

A string of the address to be added to the approved address list.

label
string · required

The label of the approved address.

account
string

Required for Master API keys as described in Private API Invocation. The name of the account within the subaccount group. Specifies the account on which you intend to add the approved address.

memo
string

it would be present if applicable, it will be present for cosmos address.

Create New Approved Address › Responses

Successful operation

message
string

Upon successful request, the endpoint will return a string indicating the 7-day approval hold period has begun.

POST/v1/approvedAddresses/{network}/request
curl --request POST \
  --url https://api.gemini.com/v1/approvedAddresses/:network/request \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/approvedAddresses/ethereum/request",
  "nonce": "<nonce>",
  "address": "0x0000000000000000000000000000000000000000",
  "label": "api_added_ETH_address",
  "account": "primary"
}
'
shell
Example Request Body
{
  "request": "/v1/approvedAddresses/ethereum/request",
  "nonce": "<nonce>",
  "address": "0x0000000000000000000000000000000000000000",
  "label": "api_added_ETH_address",
  "account": "primary"
}
json
application/json
Example Responses
{
  "message": "Approved address addition is now waiting a 7-day approval hold before activation."
}
json
application/json

Remove Approved Address

POST
https://api.gemini.com
/v1/approvedAddresses/{network}/remove

Allows for removal of active or time-pending addresses from the Approved Address list. Addresses that are pending approval from another user on the account cannot be removed via API.

Roles

This API requires the FundManager role. See Roles for more information.

Remove Approved Address › path Parameters

network
string · required

Can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

Remove Approved Address › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Remove Approved Address › Request Body

request
string · required

The literal string "/v1/approvedAddresses/:network/remove" where :network can be bitcoin, ethereum, bitcoincash, litecoin, zcash, filecoin, dogecoin, tezos, solana, polkadot, avalanche, cosmos, or xrpl

required

The nonce, as described in Private API Invocation

address
string · required

A string of the address to be removed from the approved address list.

account
string

Required for Master API keys as described in Private API Invocation. The name of the account within the subaccount group. Specifies the account on which you intend to remove the approved address.

Remove Approved Address › Responses

Successful operation

message
string

Upon successful request, the endpoint will return a string indicating the address and whether it was removed from the group-level or account-level approved address list.

POST/v1/approvedAddresses/{network}/remove
curl --request POST \
  --url https://api.gemini.com/v1/approvedAddresses/:network/remove \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/approvedAddresses/ethereum/remove",
  "nonce": "<nonce>",
  "address": "0x0000000000000000000000000000000000000000"
}
'
shell
Example Request Body
{
  "request": "/v1/approvedAddresses/ethereum/remove",
  "nonce": "<nonce>",
  "address": "0x0000000000000000000000000000000000000000"
}
json
application/json
Example Responses
{
  "message": "0x0000000000000000000000000000000000000000 removed from group pending-time approved addresses."
}
json
application/json

Transfer Between Accounts

POST
https://api.gemini.com
/v1/account/transfer/{currency}

This API allows you to execute an internal transfer between any two accounts within your Master Group. In the scenario of exchange account to exchange account there will be no activity on a blockchain network. All other combinations will result in a movement of funds on a blockchain network.

Gemini Custody account withdrawals will not occur until the daily custody run occurs. In the case of funds moving from a Gemini Custody account to a Gemini Exchange account, the exchange account will get a precredit for the amount to be received. The exchange account will be able to trade these funds but will be unable to withdraw until the funds are processed on the blockchain and received.

Gemini Custody accounts request withdrawals to approved addresses in all cases and require the request to come from an approved IP address. Please reach out to trading@gemini.com to enable API withdrawals for custody accounts.

Gemini Custody accounts do not support fiat currency transfers.

Fiat transfers between non-derivative and derivatives accounts are prohibited.

Roles

The API key you use to access this endpoint must be a Master level key and have the Fund Manager role assigned. See Roles for more information.

Transfer Between Accounts › path Parameters

currency
string · required

Either a fiat currency, e.g. usd or gbp, or a supported crypto-currency, e.g. gusd, btc, eth, aave, etc.

Transfer Between Accounts › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Transfer Between Accounts › Request Body

request
string · required

The string /v1/account/transfer/:currency where :currency is replaced with either usd or a supported crypto-currency, e.g. gusd, btc, eth, aave, etc. See Symbols and minimums.

required

The nonce, as described in Private API Invocation

sourceAccount
string · required

Nickname of the account you are transferring from. Use the Get Accounts endpoint to get all account names in the group.

targetAccount
string · required

Nickname of the account you are transferring to. Use the Get Accounts endpoint to get all account names in the group.

amount
string · required

Quoted decimal amount to withdraw

clientTransferId
string

A unique identifier for the internal transfer, in uuid4 format

withdrawalId
string

Unique ID of the requested withdrawal.

Transfer Between Accounts › Responses

JSON response

fromAccount
string

Source account where funds are sent from

toAccount
string

Target account to receive funds in the internal transfer

amount
string

Quantity of assets being transferred

fee
string

Fee taken for the transfer. Exchange account to exchange account transfers will always be free and will not be deducted from the free monthly transfer amount for that account.

currency
string

Display Name. Can be Bitcoin, Ether, Zcash, Litecoin, Dollar, etc.

withdrawalId
string

Excludes exchange to exchange. Unique ID of the requested withdrawal

uuid
string

Only for exchange to exchange. Unique ID of the completed transfer

message
string

Message describing result of withdrawal. Will inform of success, failure, or pending blockchain transaction.

txHash
string

Only for Ethereum network transfers. Excludes exchange to exchange transfers. Transaction hash for ethereum network transfer.

POST/v1/account/transfer/{currency}
curl --request POST \
  --url https://api.gemini.com/v1/account/transfer/:currency \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/account/transfer/btc",
  "nonce": "<nonce>",
  "sourceAccount": "primary",
  "targetAccount": "my-secondary-account",
  "amount": "1.0"
}
'
shell
Example Request Body
{
  "request": "/v1/account/transfer/btc",
  "nonce": "<nonce>",
  "sourceAccount": "primary",
  "targetAccount": "my-secondary-account",
  "amount": "1.0"
}
json
JSON payload for a basic internal transfer
application/json
Example Responses
{
  "fromAccount": "my-account",
  "toAccount": "my-other-account",
  "amount": "1",
  "currency": "Bitcoin",
  "uuid": "9c153d64-83ba-4532-a159-ebe3f6797766",
  "message": "Success, transfer completed."
}
json
application/json

Get Transaction History

POST
https://api.gemini.com
/v1/transactions
Under the terms of the Gemini API Agreement, polling this endpoint may be subject to rate limiting. Due to current limitations with the v1/transactions endpoint, historical data can only be returned for dates _after_ August 1st, 2022. For any requests to this endpoint, please ensure that the value provided for _timestamp_nanos_ as after this date.

This endpoint shows trade detail and transactions. There is a continuation_token that is a pagination token used for subsequent requests.

Roles

The API key you use to access this endpoint must have the Trader, Fund Manager or Auditor role assigned and have the master account scope. See Roles for more information.

The OAuth scope must have history:read assigned to access this endpoint. See OAuth Scopes for more information.

Get Transaction History › Headers

X-GEMINI-APIKEY
string · required

Your API key

X-GEMINI-SIGNATURE
string · required

HEX-encoded HMAC-SHA384 of payload signed with API secret

X-GEMINI-PAYLOAD
string · required

Base64-encoded JSON payload

Content-Type
string
Default: text/plain
Content-Length
string
Default: 0
Cache-Control
string
Default: no-cache

Get Transaction History › Request Body

request
string · required

The literal string "/v1/transactions"

required

The nonce, as described in Private API Invocation

Only return transfers on or after this timestamp in nanos. If this is defined, do not define “continuation_token”.

limit
integer

The maximum number of transfers to return. The default is 100 and the maximum is 300.

Default: 100
continuation_token
string

For subsequent requests, use the returned continuation_token value for next page. If this is defined, do not define “timestamp_nanos”.

Get Transaction History › Responses

The response will be an array of JSON objects, sorted by trade and transfer as well as a continuationToken to be used in subsequent requests.

array

Results will contain either a list of Trade or Transfer responses

POST/v1/transactions
curl --request POST \
  --url https://api.gemini.com/v1/transactions \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/transactions",
  "nonce": "<nonce>",
  "timestamp_nanos": 1630382206000000000,
  "limit": 50,
  "continuation_token": "daccgrp_123421:n712621873886999872349872349:a71289723498273492374978424:m2:iForward"
}
'
shell
Example Request Body
{
  "request": "/v1/transactions",
  "nonce": "<nonce>",
  "timestamp_nanos": 1630382206000000000,
  "limit": 50,
  "continuation_token": "daccgrp_123421:n712621873886999872349872349:a71289723498273492374978424:m2:iForward"
}
json
application/json
Example Responses
{
  "results": [
    {
      "account": "primary",
      "amount": "0.001",
      "clientOrderId": "",
      "price": "1730.95",
      "timestampms": 1659201465069,
      "side": "SIDE_TYPE_BUY",
      "isAggressor": true,
      "feeAssetCode": "ETH",
      "feeAmount": "0.000000000000000605",
      "orderId": 73716687406755680,
      "exchange": "gemini",
      "isAuctionFill": false,
      "isClearingFill": false,
      "symbol": "ETHUSD",
      "tid": 144115199446910530,
      "type": "trade"
    },
    {
      "account": "primary",
      "amount": "0.001",
      "clientOrderId": "",
      "price": "1679.02",
      "timestampms": 1659201465222,
      "side": "SIDE_TYPE_SELL",
      "isAggressor": true,
      "feeAssetCode": "ETH",
      "feeAmount": "0.00000000000000000587",
      "orderId": 73716687406755680,
      "exchange": "gemini",
      "isAuctionFill": false,
      "isClearingFill": false,
      "symbol": "ETHUSD",
      "tid": 144115199446910500,
      "type": "trade"
    }
  ],
  "continuationToken": "daccgrp_1500611:n7126218738869976937315434496:a7126216029949884380085223424:m2:iForward"
}
json
Trade Response
application/json

OrdersMargin Trading