Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.0.3
info:
title: REST API
description: |
The Gemini Crypto Exchange REST API allows programmatic access to trade cryptocurrencies
and manage your account on the Gemini Exchange platform. The API provides both public and
private endpoints for market data, order management, and account operations.
version: "1.0.0"
contact:
name: Gemini Trading Support
email: trading@gemini.com
servers:
- url: https://api.gemini.com
description: Production server
- url: https://api.sandbox.gemini.com
description: Sandbox server for testing
paths:
/v1/symbols:
get:
tags:
- Market Data
summary: List Symbols
operationId: listSymbols
description: This endpoint retrieves all available symbols for trading.
responses:
'200':
description: The full list of supported symbols.
content:
application/json:
schema:
type: array
items:
type: string
description: An array of supported [symbols](/market-data/symbols-and-minimums#all-supported-symbols).
example: ["aavegusd","aaveusd","aligusd","aliusd","ampgusd","ampusd","ankrgusd","ankrusd","apegusd","apeusd","api3gusd","api3usd","arbgusd","arbusd","atomgusd","atomusd","avaxgusd","avaxgusdperp","avaxusd","axsgusd","axsusd","batgusd","batusd","bchgusd","bchgusdperp","bchusd","bnbgusdperp","bomegusd","bomegusdperp","bomeusd","bonkgusd","bonkgusdperp","bonkusd","btceur","btcgbp","btcgusd","btcgusdperp","btcsgd","btcusd","btcusdt","chillguygusd","chillguyusd","chzgusd","chzusd","compgusd","compusd","crvgusd","crvusd","ctxgusd","ctxusd","cubegusd","cubeusd","daigusd","daiusd","dogebtc","dogeeth","dogegusd","dogegusdperp","dogeusd","dotgusd","dotgusdperp","dotusd","efilfil","elongusd","elonusd","ensgusd","ensusd","ethbtc","etheur","ethgbp","ethgusd","ethgusdperp","ethsgd","ethusd","ethusdt","fetgusd","fetusd","filgusd","filusd","flokigusd","flokigusdperp","flokiusd","ftmgusd","ftmusd","galagusd","galausd","gmtgusd","gmtusd","goatgusd","goatgusdperp","goatusd","grtgusd","grtusd","gusdgbp","gusdsgd","gusdusd","hntgusd","hntusd","hypegusdperp","imxgusd","imxusd","injgusd","injgusdperp","injusd","iotxgusd","iotxusd","ksl2gusdperp","kt5gusdperp","ldogusd","ldousd","linkbtc","linketh","linkgusd","linkgusdperp","linkusd","lptgusd","lptusd","lrcgusd","lrcusd","ltcbtc","ltceth","ltcgusd","ltcgusdperp","ltcusd","managusd","manausd","maskgusd","maskusd","maticgusd","maticusd","mewgusd","mewgusdperp","mewusd","mkrgusd","mkrusd","moodenggusd","moodenggusdperp","moodengusd","opgusd","opgusdperp","opusd","oxtgusd","oxtusd","paxggusd","paxgusd","pepegusd","pepegusdperp","pepeusd","pnutgusd","pnutgusdperp","pnutusd","polgusdperp","popcatgusd","popcatgusdperp","popcatusd","pythgusd","pythgusdperp","pythusd","qntgusd","qntusd","raregusd","rareusd","rengusd","renusd","rlusdusd","rndrgusd","rndrusd","samogusd","samousd","sandgusd","sandusd","shibgusd","shibgusdperp","shibusd","sklgusd","sklusd","solbtc","soleth","solgusd","solgusdperp","solusd","storjgusd","storjusd","sushigusd","sushiusd","trumpgusdperp","umagusd","umausd","unigusd","unigusdperp","uniusd","usdcusd","usdtgusd","usdtusd","wifgusd","wifgusdperp","wifusd","xrpgusd","xrpgusdperp","xrpusd","xtzgusd","xtzusd","yfigusd","yfiusd","zecgusd","zecusd","zrxgusd","zrxusd"]
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/symbols/details/{symbol}:
get:
tags:
- Market Data
summary: Get Symbol Details
operationId: getSymbolDetails
description: This endpoint retrieves extra detail on supported symbols, such as minimum order size, tick size, quote increment and more.
parameters:
- $ref: '#/components/parameters/symbolParam'
responses:
'200':
description: Instrument responses examples
content:
application/json:
schema:
$ref: '#/components/schemas/SymbolDetails'
examples:
spot:
summary: Spot instrument
description: Spot instrument response
value:
symbol: BTCUSD
base_currency: BTC
quote_currency: USD
tick_size: 0.00000001
quote_increment: 0.01
min_order_size: "0.00001"
status: open
wrap_enabled: false
product_type: spot
contract_type: vanilla
contract_price_currency: USD
perpetual:
summary: Perpetual Swap instrument
description: Perpetual Swap instrument response
value:
symbol: BTCETHPERP
base_currency: BTC
quote_currency: ETH
tick_size: 0.0001
quote_increment: 0.5
min_order_size: "0.0001"
status: open
wrap_enabled: false
product_type: swap
contract_type: linear
contract_price_currency: GUSD
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v2/networks/{network}/assets:
get:
tags:
- Market Data
summary: Get Assets for Network
operationId: getAssetsForNetwork
description: |
This endpoint retrieves the enabled assets (tokens) available on a specified blockchain network, filtered by your account's access permissions.
This authenticated endpoint returns only the assets where your account has deposit and withdraw access enabled on the specified network.
Use this endpoint to discover all tokens that support deposits and withdrawals on a particular blockchain network.
The `assets` field in the response is always an array, sorted alphabetically, containing one or more enabled asset codes.
### Roles
The API key you use to access this endpoint must have the Fund Manager or Auditor role assigned. See [Roles](/roles#roles) for more information.
parameters:
- $ref: '#/components/parameters/apiKeyAuth'
- $ref: '#/components/parameters/signatureAuth'
- $ref: '#/components/parameters/payloadAuth'
- $ref: '#/components/parameters/contentType'
- $ref: '#/components/parameters/contentLength'
- $ref: '#/components/parameters/cacheControl'
- name: network
in: path
required: true
schema:
type: string
description: |
Blockchain network identifier (lowercase). Supported networks include: `ethereum`, `solana`, `bitcoin`, `optimism`, `arbitrum`, `base`, `monad`, `avalanche`, `litecoin`, `bitcoincash`, `dogecoin`, `zcash`, `filecoin`, `tezos`, `polkadot`, `cosmos`, `xrpl`, `linea`, and more.
example: ethereum
security:
- apiKeyAuth: []
signatureAuth: []
payloadAuth: []
responses:
'200':
description: The response will be a JSON object containing the network name and its supported assets.
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkAssets'
examples:
multi-asset-network:
summary: Network with many assets (Ethereum)
value:
network: "ethereum"
assets: ["AAVE", "BAT", "DAI", "ETH", "LINK", "MATIC", "UNI", "USDC", "USDT", "WBTC"]
single-asset-network:
summary: Network with single asset (Bitcoin)
value:
network: "bitcoin"
assets: ["BTC"]
stablecoin-network:
summary: Network popular for stablecoins (Solana)
value:
network: "solana"
assets: ["BONK", "JTO", "JUP", "PYTH", "RAY", "RENDER", "SOL", "USDC"]
'400':
description: The supplied network is not supported or has no enabled assets.
content:
application/json:
schema:
type: object
properties:
errorMessage:
type: string
examples:
unsupported-network:
summary: Unsupported network
value:
errorMessage: "Supplied value 'foochain' is not a supported network. Please refer to the Supported Networks section at docs.gemini.com and correct your API request."
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v2/network/{token}:
get:
tags:
- Market Data
summary: Get Network
operationId: getTokenNetworkV2
description: |
<div class="p-4 text-sm section-icon section-info rounded-sm" role="alert">
<div class="flex">
<svg
view-box="0 0 24 24"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM11 17V11H13V17H11ZM11 9V7H13V9H11Z"
/>
</svg>
The v1 network endpoint is being retired. This v2 endpoint is the recommended replacement, offering account-level filtering for deposit and withdraw access. Please migrate to this endpoint at your earliest convenience.
</div>
</div>
This endpoint retrieves the associated network(s) for a requested token, filtered by your account's access permissions.
This authenticated endpoint returns only the networks where your account has both deposit and withdraw access enabled. This supports the multinetwork deposit and withdrawal flow.
Many tokens are available on multiple blockchain networks. For example, USDC is available on Optimism, Solana, Base, Arbitrum, Avalanche, and Ethereum. Use this endpoint to discover which networks your account can deposit to and withdraw from for a given token.
The `network` field in the response is always an array, which may contain one or more supported networks.
### Roles
The API key you use to access this endpoint must have the Fund Manager or Auditor role assigned. See [Roles](/roles#roles) for more information.
parameters:
- $ref: '#/components/parameters/apiKeyAuth'
- $ref: '#/components/parameters/signatureAuth'
- $ref: '#/components/parameters/payloadAuth'
- $ref: '#/components/parameters/contentType'
- $ref: '#/components/parameters/contentLength'
- $ref: '#/components/parameters/cacheControl'
- name: token
in: path
required: true
schema:
type: string
description: Token identifier. `BTC`, `ETH`, `USDC`, `SOL` etc. See [<u>**symbols and minimums**</u>](/market-data/symbols-and-minimums)
example: USDC
security:
- apiKeyAuth: []
signatureAuth: []
payloadAuth: []
responses:
'200':
description: The response will be a JSON object containing the token and its available networks for the authenticated account.
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkToken'
examples:
single-network:
summary: Single network token (BTC)
value:
token: BTC
network: ["bitcoin"]
multi-network:
summary: Multi-network token (USDC)
value:
token: USDC
network: ["optimism", "solana", "base", "arbitrum", "avalanche", "ethereum"]
'400':
$ref: '#/components/responses/BadRequest'
'404':
description: Returned when the token is not supported or the account has no available networks for the requested token.
content:
application/json:
schema:
type: object
properties:
result:
type: string
example: error
reason:
type: string
example: UnsupportedNetwork
message:
type: string
example: "UnsupportedNetwork: INVALIDTOKEN"
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/pubticker/{symbol}:
get:
tags:
- Market Data
summary: Get Ticker
operationId: getTicker
description: |
This endpoint retrieves information about recent trading activity for the symbol.
<p class="p-4 text-sm section-icon section-info rounded-sm flex" role="alert">
<svg
view-box="0 0 24 24"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M11.1258 5.63252C11.5068 4.94671 12.4932 4.94671 12.8742 5.63252L19.4751 17.5143C19.8454 18.1808 19.3635 18.9999 18.601 18.9999H5.39903C4.63655 18.9999 4.15458 18.1808 4.52487 17.5143L11.1258 5.63252ZM14.6225 4.66123C13.4795 2.6038 10.5205 2.60381 9.37753 4.66124L2.77656 16.543C1.66567 18.5426 3.11158 20.9999 5.39903 20.9999H18.601C20.8884 20.9999 22.3343 18.5426 21.2234 16.543L14.6225 4.66123ZM11 7.99991V13.9999H13V7.99991H11ZM11 15.9999V17.9999H13V15.9999H11Z"
/>
</svg>
<span>
We recommend using <a href="/rest/market-data#get-ticker-v2">Version 2</a> to retrieve recent ticker activty.
</span>
</p>
parameters:
- $ref: '#/components/parameters/symbolParam'
responses:
'200':
description: The current ticker for the symbol
content:
application/json:
schema:
$ref: '#/components/schemas/Ticker'
example:
bid: "977.59"
ask: "977.35"
last: "977.65"
volume:
BTC: "2210.505328803"
USD: "2135477.463379586263"
timestamp: 1483018200000
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/book/{symbol}:
get:
tags:
- Market Data
summary: Get Current Order Book
operationId: getCurrentOrderBook
x-zudoku-playground-enabled: false # Disable playground for this endpoint due to CORS configuration on server
description: |
This will return the current order book as two arrays (bids / asks).
<p class="p-4 text-sm section-icon section-info rounded-sm flex" role="alert">
<svg
view-box="0 0 24 24"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M11.1258 5.63252C11.5068 4.94671 12.4932 4.94671 12.8742 5.63252L19.4751 17.5143C19.8454 18.1808 19.3635 18.9999 18.601 18.9999H5.39903C4.63655 18.9999 4.15458 18.1808 4.52487 17.5143L11.1258 5.63252ZM14.6225 4.66123C13.4795 2.6038 10.5205 2.60381 9.37753 4.66124L2.77656 16.543C1.66567 18.5426 3.11158 20.9999 5.39903 20.9999H18.601C20.8884 20.9999 22.3343 18.5426 21.2234 16.543L14.6225 4.66123ZM11 7.99991V13.9999H13V7.99991H11ZM11 15.9999V17.9999H13V15.9999H11Z"
/>
</svg>
The quantities and prices returned are returned as strings rather than numbers. The numbers returned are exact, not rounded, and it can be dangerous to treat them as floating point numbers.
</p>
parameters:
- $ref: '#/components/parameters/symbolParam'
- name: limit_bids
in: query
description: Limit the number of bid (offers to buy) price levels returned. Default is 50. May be 0 to return the full order book on this side.
required: false
schema:
type: number
minimum: 1
- name: limit_asks
in: query
description: Limit the number of ask (offers to sell) price levels returned. Default is 50. May be 0 to return the full order book on this side.
required: false
schema:
type: number
minimum: 1
responses:
'200':
description: The response will be two arrays. The bids and the asks are grouped by price, so each entry may represent multiple orders at that price. Each element of the array will be a JSON object.
content:
application/json:
schema:
$ref: '#/components/schemas/OrderBook'
example:
bids: [
{
price: "3607.85",
amount: "6.643373",
timestamp: "1547147541"
}
]
asks: [
{
price: "3607.86",
amount: "14.68205084",
timestamp: "1547147541"
}
]
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/trades/{symbol}:
get:
tags:
- Market Data
summary: List Trades
operationId: listTrades
x-zudoku-playground-enabled: false # Disable playground for this endpoint due to CORS configuration on server
description: |
<div class="p-4 text-sm section-icon section-info rounded-sm" role="alert">
<div class="flex">
<svg
view-box="0 0 24 24"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM11 17V11H13V17H11ZM11 9V7H13V9H11Z"
/>
</svg>
This public API endpoint is limited to retrieving seven calendar days of data.
</div>
<span>
Please contact us <a href="https://gemini24.zendesk.com/hc/en-us/requests/new" target="_blank">through this form</a> for information about Gemini market data.
</span>
</div>
This will return the trades that have executed since the specified timestamp. Timestamps are either seconds or milliseconds since the epoch (1970-01-01). See the [Data Types](/data-types) section about `timestamp` for information on this.
Each request will show at most 500 records.
If no `since` or `timestamp` is specified, then it will show the most recent trades; otherwise, it will show the most recent trades that occurred after that timestamp.
parameters:
- $ref: '#/components/parameters/symbolParam'
- name: timestamp
in: query
description: |
Only return trades after this timestamp. See [<u>**Timestamps**</u>](/rest/~schemas#timestamp-type) for more information. If not present, will show the most recent trades. For backwards compatibility, you may also use the alias `since`. With timestamp, there is a 90-day hard limit.
required: false
schema:
$ref: '#/components/schemas/TimestampType'
description: Timestamp in milliseconds
- name: since_tid
in: query
description: |
Only retuns trades that executed after this tid. since_tid trumps timestamp parameter which has no effect if provided too. You may set since_tid to zero to get the earliest available trade history data.
required: false
schema:
type: number
- name: limit_trades
in: query
description: |
The maximum number of trades to return. The default is 50.
required: false
schema:
type: number
minimum: 0
default: 50
- name: include_breaks
in: query
description: |
Whether to display broken trades. False by default. Can be `1` or `true` to activate
required: false
schema:
type: boolean
default: false
responses:
'200':
description: The response will be an array of JSON objects, sorted by timestamp, with the newest trade shown first.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Trade'
example:
timestamp: 1547146811
timestampms: 1547146811357
tid: 5335307668
price: "3610.85"
amount: "0.27413495"
exchange: "gemini"
type: "buy"
broken: true
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/pricefeed:
get:
tags:
- Market Data
summary: List Prices
operationId: listPrices
responses:
'200':
description: Response is a list of objects, one for each pair.
content:
application/json:
schema:
$ref: '#/components/schemas/PriceFeedResponse'
example: [
{
"pair":"BTCUSD",
"price":"9500.00",
"percentChange24h": "5.23"
},
{
"pair":"ETHUSD",
"price":"257.54",
"percentChange24h": "4.85"
},
{
"pair":"BCHUSD",
"price":"450.10",
"percentChange24h": "-2.91"
},
{
"pair":"LTCUSD",
"price":"79.50",
"percentChange24h": "7.63"
}
]
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/fundingamount/{symbol}:
get:
tags:
- Market Data
summary: Get Funding Amount
operationId: getFundingAmount
parameters:
- name: symbol
in: path
required: true
schema:
type: string
description: |
Trading pair symbol <br /> <br />
`BTCGUSDPERP`, etc. See [<u>**symbols and minimums**</u>](/market-data/symbols-and-minimums#all-supported-symbols).
example: BTCGUSDPERP
responses:
'200':
description: The response will be an object
content:
application/json:
schema:
$ref: '#/components/schemas/FundingAmountResponse'
example: {
symbol: BTCGUSDPERP,
fundingDateTime: "2025-04-22T18:00:00.000Z",
fundingTimestampMilliSecs: 1745344800000,
nextFundingTimestamp: 1745348400000,
fundingAmount: -1.50991,
estimatedFundingAmount: -2.10595
}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/nextfundingtimestamp/{symbol}:
get:
tags:
- Market Data
summary: Get Next Funding Timestamp
operationId: getNextFundingTimestamp
parameters:
- name: symbol
in: path
required: true
schema:
type: string
description: |
Trading pair symbol <br /> <br />
`BTCGUSDPERP`, etc. See [<u>**symbols and minimums**</u>](/market-data/symbols-and-minimums#all-supported-symbols).
example: BTCGUSDPERP
responses:
'200':
description: The response will be an integer timestamp in milliseconds.
content:
application/json:
schema:
type: integer
format: int64
example: 1745348400000
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/fundingamountreport/records.xlsx:
get:
tags:
- Market Data
summary: Get Funding Amount Report File
operationId: getFundingAmountReportFile
description: |
### Examples
- `symbol=BTCGUSDPERP&fromDate=2024-04-10&toDate=2024-04-25&numRows=1000` </br>
Compare and obtain the minimum records between (2024-04-10 to 2024-04-25) and 1000. If (2024-04-10 to 2024-04-25) contains 360 records. Then fetch the minimum between 360 and 1000 records only.
- `symbol=BTCGUSDPERP&numRows=2024-04-10&toDate=2024-04-25` </br>
If (2024-04-10 to 2024-04-25) contains 360 records. Then fetch 360 records only.
- `symbol=BTCGUSDPERP&numRows=1000` </br>
Fetch maximum 1000 records starting from Now to a historical date
- `symbol=BTCGUSDPERP` </br>
Fetch maximum 8760 records starting from Now to a historical date
parameters:
- name: symbol
in: query
description: |
Trading pair symbol <br /> <br />
`BTCGUSDPERP`, etc. See [<u>**symbols and minimums**</u>](/market-data/symbols-and-minimums#all-supported-symbols).
required: true
schema:
type: string
- name: fromDate
in: query
description: Mandatory if `toDate` is specified, else optional. If empty, will only fetch records by numRows value.
required: false
schema:
type: string
format: date
- name: toDate
in: query
description: Mandatory if `fromDate` is specified, else optional. If empty, will only fetch records by numRows value.
required: false
schema:
type: string
format: date
- name: numRows
in: query
description: If empty, default value '8760'
required: false
schema:
type: integer
responses:
'200':
description: The response will be an excel / csv file. filename=FundingAmount_{SYMBOL}.{xlsx,csv}
headers:
Content-Disposition:
schema:
type: string
example: attachment; filename=FundingAmount_{SYMBOL}.{xlsx,csv}
content:
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
schema:
type: string
format: binary
text/csv:
schema:
type: string
format: binary
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
/v1/order/new:
post:
x-zudoku-playground-enabled: false
tags:
- Orders
summary: Create New Order
operationId: createNewOrder
description: |
If you wish orders to be automatically cancelled when your session ends, see the [require heartbeat](/authentication/api-key#require-heartbeat) section, or manually send the [cancel all session orders](/rest/orders#cancel-all-session-orders) message.
<div class="p-4 text-sm section-icon section-info rounded-sm" role="alert">
<div class="flex">
<svg
view-box="0 0 24 24"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM11 17V11H13V17H11ZM11 9V7H13V9H11Z"
/>
</svg>
Master API keys do not support cancelation on disconnect via heartbeat.
</div>
Enabled for perpetuals accounts from July 10th, 0100hrs ET onwards.
</div>
### Roles
The API key you use to access this endpoint must have the Trader role assigned. See <a href="/roles#roles">Roles</a> for more information.
The OAuth scope must have `orders:create` assigned to access this endpoint. See [OAuth Scopes](/authentication/oauth#oauth-scopes) for more information.
### Margin Orders
Set `margin_order: true` to place an order using borrowed funds on a margin-enabled account. This allows you to trade with leverage beyond your available balance.
**Important**: Margin trading amplifies both gains and losses. Monitor your account using the [Margin Account Summary](/rest/margin-trading#get-margin-account-summary) endpoint and preview order impacts with [Order Preview](/rest/margin-trading#preview-margin-order-impact) before placing margin orders.
### Stop-Limit Orders
A Stop-Limit order is an order type that allows for order placement when a price reaches a specified level. Stop-Limit orders take in both a `price` and and a `stop_price` as parameters. The `stop_price` is the price that triggers the order to be placed on the continous live order book at the `price`. For buy orders, the `stop_price` must be below the `price` while sell orders require the `stop_price` to be greater than the `price`.
### What about market orders?
The API doesn't directly support market orders because they provide you with no price protection.
Instead, use the “immediate-or-cancel” order execution option, coupled with an aggressive limit price (i.e. very high for a buy order or very low for a sell order), to achieve the same result.
### Order execution options
Note that `options` is an array. If you omit `options` or provide an empty array, your order will be a standard limit order - it will immediately fill against any open orders at an equal or better price, then the remainder of the order will be posted to the order book.
If you specify more than one option (or an unsupported option) in the `options` array, the exchange will reject your order.
No `options` can be applied to stop-limit orders at this time.
The available limit order options are:
| Option | Description |
# --- truncated at 32 KB (407 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gemini-trust/refs/heads/main/openapi/gemini-trust-rest-openapi.yml