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

Account Administration (1.0.0)

Endpoint

Get Account Detail

POST
https://api.gemini.com
/v1/account

The account API will return detail about the specific account requested such as users, country codes, etc.

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.

Get Account Detail › 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 Account Detail › Request Body

request
string · required

The literal string "/v1/account"

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.

Get Account Detail › Responses

Successful operation

object

Contains information on the requested account

object[]

Contains an array of JSON objects with user information for the requested account

memo_reference_code
string

Returns wire memo reference code for linked bank account

virtual_account_number
string

Virtual account number for the account. Only populated if applicable for the account

POST/v1/account
curl --request POST \
  --url https://api.gemini.com/v1/account \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/account",
  "account": "primary",
  "nonce": "<nonce>"
}
'
shell
Example Request Body
{
  "request": "/v1/account",
  "account": "primary",
  "nonce": "<nonce>"
}
json
application/json
Example Responses
{
  "account": {
    "accountName": "Primary",
    "shortName": "primary",
    "type": "exchange",
    "created": "1498245007981"
  },
  "users": [
    {
      "name": "Satoshi Nakamoto",
      "lastSignIn": "2020-07-21T13:37:39.453Z",
      "status": "Active",
      "countryCode": "US",
      "isVerified": true
    },
    {
      "name": "Gemini Support",
      "lastSignIn": "2018-07-11T20:04:36.073Z",
      "status": "Suspended",
      "countryCode": "US",
      "isVerified": false
    }
  ],
  "memo_reference_code": "GEMPJBRDZ",
  "virtual_account_number": "123456"
}
json
application/json

Create New Account

POST
https://api.gemini.com
/v1/account/create

A Master API key can create a new exchange account within the group. This API will return the name of your new account for use with the account parameter in when using Master API keys to perform account level functions. Please see the example.

Roles

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

Create New Account › 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 Account › Request Body

request
string · required

The literal string "/v1/account/create"

required

The nonce, as described in Private API Invocation

name
string · required

A unique name for the new account

type
string

Either exchange or custody is accepted. Will generate an exchange account if exchange or parameter is missing. Will generate a custody account if custody.

Create New Account › Responses

Successful operation

account
string

Account reference string for use in APIs based off the provided name field

type
string

Will return the type of account generated. exchange if an exchange account was created, custody if a custody account was created

POST/v1/account/create
curl --request POST \
  --url https://api.gemini.com/v1/account/create \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/account/create",
  "nonce": "<nonce>",
  "name": "My Secondary Account",
  "type": "exchange"
}
'
shell
Example Request Body
{
  "request": "/v1/account/create",
  "nonce": "<nonce>",
  "name": "My Secondary Account",
  "type": "exchange"
}
json
JSON payload to create a new account
application/json
Example Responses
{
  "account": "my-secondary-account",
  "type": "exchange"
}
json
application/json

Rename Account

POST
https://api.gemini.com
/v1/account/rename

A Master or Account level API key can rename an account within the group.

Roles

The API key you use to access this endpoint can be either a Master or Account level API key and must have the Administrator role assigned. See Roles for more information.

Rename Account › 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

Rename Account › Request Body

request
string · required

The literal string "/v1/account/rename".

required

The nonce, as described in Private API Invocation

account
string

Only required when using a master api-key. The shortname of the account within the subaccount group. Master API keys can get all account shortnames from the account field returned by the Get Accounts endpoint.

newName
string

A unique name for the new account. If not provided, name will not change.

newAccount
string

A unique shortname for the new account. If not provided, shortname will not change.

Rename Account › Responses

An element containing the updated name of the account.

name
string

New name for the account based off the provided newName field. Only returned if newName was provided in the request.

account
string

New shortname for the account based off the provided newAccount field. Only returned if newAccount was provided in the request.

POST/v1/account/rename
curl --request POST \
  --url https://api.gemini.com/v1/account/rename \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/account/rename",
  "nonce": "<nonce>",
  "account": "my-exchange-account",
  "newName": "My Exchange Account New Name",
  "newAccount": "my-exchange-account-new-name"
}
'
shell
Example Request Body
{
  "request": "/v1/account/rename",
  "nonce": "<nonce>",
  "account": "my-exchange-account",
  "newName": "My Exchange Account New Name",
  "newAccount": "my-exchange-account-new-name"
}
json
JSON payload to rename an account
application/json
Example Responses
{
  "name": "My Exchange Account New Name",
  "account": "my-exchange-account-new-name"
}
json
application/json

List Accounts in Group

POST
https://api.gemini.com
/v1/account/list

A Master API key can be used to get the accounts within the group. A maximum of 500 accounts can be listed in a single API call.

Roles

The API key you use to access this endpoint must be a Master level key. See Roles for more information.

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

List Accounts in Group › 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 Accounts in Group › Request Body

request
string · required

The literal string "/v1/account/list"

required

The nonce, as described in Private API Invocation

limit_accounts
integer

The maximum number of accounts to return. Maximum and default values are both 500.

Only return accounts created on or before the supplied timestamp. If not provided, the 500 most recently created accounts are returned.

List Accounts in Group › Responses

The response will be a JSON object containing all accounts within the master group

object[]
name
string

The name of the account provided upon creation

account
string

Nickname of the specific account (will take the name given, remove all symbols, replace all " " with "-" and make letters lowercase)

type
string

Either "exchange" or "custody" depending on type of account

counterparty_id
string

The Gemini clearing counterparty ID associated with the API key making the request. Will return None for custody accounts

The timestamp of account creation, displayed as number of milliseconds since 1970-01-01 UTC. This will be transmitted as a JSON number

status
string

Either "open" or "closed"

POST/v1/account/list
curl --request POST \
  --url https://api.gemini.com/v1/account/list \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/account/list",
  "nonce": "<nonce>",
  "limit_accounts": 100,
  "timestamp": 1632485834721
}
'
shell
Example Request Body
{
  "request": "/v1/account/list",
  "nonce": "<nonce>",
  "limit_accounts": 100,
  "timestamp": 1632485834721
}
json
application/json
Example Responses
[
  {
    "name": "Primary",
    "account": "primary",
    "type": "exchange",
    "counterparty_id": "EMONNYXH",
    "created": 1495127793000,
    "status": "open"
  },
  {
    "name": "My Custody Account",
    "account": "my-custody-account",
    "type": "custody",
    "counterparty_id": null,
    "created": 1565970772000,
    "status": "open"
  },
  {
    "name": "Other exchange account!",
    "account": "other-exchange-account",
    "type": "exchange",
    "counterparty_id": "EMONNYXK",
    "created": 1565970772000,
    "status": "closed"
  }
]
json
application/json

Roles Endpoint

POST
https://api.gemini.com
/v1/roles

The v1/roles endpoint will return a string of the role of the current API key. The response fields will be different for account-level and master-level API keys.

Roles Endpoint › 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

Roles Endpoint › Request Body

request
string · required

The literal string "/v1/roles"

Example: /v1/roles
TimestampType · required

timestamp

Roles Endpoint › Responses

200

The response will be a JSON object indicating the assigned roles to the set of API keys used to call /v1/roles. The Auditor role cannot be combined with other roles. Fund Manager and Trader can be combined.

isAuditor
boolean · required

True if the Auditor role is assigned to the API keys. False otherwise.

isFundManager
boolean · required

True if the Fund Manager role is assigned to the API keys. False otherwise.

isTrader
boolean · required

True if the Trader role is assigned to the API keys. False otherwise.

counterparty_id
string

Only returned for master-level API keys. The Gemini clearing counterparty ID associated with the API key making the request.

isAccountAdmin
boolean

Only returned for master-level API keys.True if the Administrator role is assigned to the API keys. False otherwise.

POST/v1/roles
curl --request POST \
  --url https://api.gemini.com/v1/roles \
  --header 'Content-Type: application/json' \
  --header 'X-GEMINI-APIKEY: <string>' \
  --header 'X-GEMINI-PAYLOAD: <string>' \
  --header 'X-GEMINI-SIGNATURE: <string>' \
  --data '
{
  "request": "/v1/roles",
  "nonce": "<nonce>"
}
'
shell
Example Request Body
{
  "request": "/v1/roles",
  "nonce": "<nonce>"
}
json
application/json
Example Responses
{
  "isAuditor": false,
  "isFundManager": true,
  "isTrader": true
}
json
Successful response for account-scoped key
application/json

InstantOAuth