# Roles


Gemini uses a role-based system for private API endpoints so that you can separate privileges for your API keys.

By assigning different roles to different API keys, you can create:

1. One API key that can trade, and
2. Another API key that can withdraw digital assets, or
3. An API key to have access to read-only endpoints

You can configure which roles are assigned to your API keys by logging in to the Gemini Exchange website and going to API Settings to configure your API keys.

<div className="p-4 text-sm section-icon section-info rounded-sm font-medium flex" role="alert">
    <svg
        viewBox="0 0 24 24"
        >
        <path
            fillRule="evenodd"
            clipRule="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>
  <span>When you create an API key, the Trader role is assigned by default.</span>
</div>

If you try to access an endpoint that requires a role you did not assign to your API key, you will get back a response with:

- `403` status
- a JSON response body with:
  - `reason` set to `MissingRole`, and
  - `message` explaining what role you need to add to your API key to use this endpoint

See [Error Codes](/error-codes#error-codes) for more information about API error responses.

## Administrator

<div className="p-4 text-sm section-icon section-info rounded-sm font-medium flex" role="alert">
    <svg
        viewBox="0 0 24 24"
        >
        <path
            fillRule="evenodd"
            clipRule="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>
  <span>The Administrator role is exclusive to Master API keys.</span>
</div>

Assigning the Administrator role to an API key allows this API key to:

Create accounts within the Master Group
View accounts within the Master Group

### Trader
Assigning the Trader role to an API key allows this API key to:

- Check balances
- Place and cancel orders
- Check the status of orders
- See all deposit addresses
- See all active orders
- See your trade history and volume
- View accounts within the Master Group

### Fund Manager
Assigning the Fund Manager role to an API key allows this API key to:

- Check balances
- See all deposit addresses
- Request new cryptocurrency deposit addresses
- Withdraw cryptocurrency funds
- View accounts within the Master Group
- Execute internal transfers between two accounts within the same Master group


## Auditor

<div className="p-4 text-sm section-icon section-info rounded-sm font-medium flex" role="alert">
    <svg
        viewBox="0 0 24 24"
        >
        <path
            fillRule="evenodd"
            clipRule="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>
  <span>The Auditor role is read-only and cannot be combined with other roles.</span>
</div>


Assigning the Auditor role to an API key allows this API key to:

- Check balances
- Check the status of orders
- See transfers such as deposits and withdrawals
- See all deposit addresses
- See all active orders
- See trade volume
- See past trades
- View accounts within the Master Group

### Endpoint summary

Here's a summary of which role you need to assign to your API key to use each endpoint in the API:

#### Account Scoped Endpoints

<table>
   <thead>
      <tr>
         <th style={{minWidth: 125}}>Endpoint</th>
         <th style={{minWidth: 200}}>URI</th>
         <th style={{maxWidth: 70}}>Trader can access?</th>
         <th style={{maxWidth: 70}}>Fund Manager can access?</th>
         <th style={{maxWidth: 70}}>Auditor can access?</th>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td>[Create New Order](/rest/orders#create-new-order)</td>
         <td>`/v1/order/new`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Cancel Order](/rest/orders#cancel-order)</td>
         <td>`/v1/order/cancel`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Cancel All Session Orders](/rest/orders#cancel-all-session-orders)</td>
         <td>`/v1/order/cancel/session`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Cancel All Active Orders](/rest/orders#cancel-all-active-orders)</td>
         <td>`/v1/order/cancel/all`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Wrap Order](/rest/orders#wrap-order)</td>
         <td>`/v1/wrap/:symbol`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Order Status](/rest/orders#get-order-status)</td>
         <td>`/v1/order/status`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Get Active Orders](/rest/orders#list-active-orders)</td>
         <td>`/v1/orders`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[List Past Trades](/rest/orders#list-past-trades)</td>
         <td>`/v1/mytrades`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Get Orders History](/rest/orders#list-past-orders)</td>
         <td>`/v1/orders/history`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Get Trade Volume](/rest/orders#get-trading-volume)</td>
         <td>`/v1/tradevolume`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Get Notional Volume](/rest/orders#get-notional-trading-volume)</td>
         <td>`/v1/notionalvolume`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Heartbeat](/rest/session#heartbeat)</td>
         <td>`/v1/heartbeat`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Get Available Balances](/rest/fund-management#get-available-balances)</td>
         <td>`/v1/balances`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Get Notional Balances](/rest/fund-management#get-notional-balances)</td>
         <td>`v1/notionalbalances/:currency`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Get Deposit Addresses](/rest/fund-management#list-deposit-addresses)</td>
         <td>`/v1/addresses/:network`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[New Deposit Address](/rest/fund-management#create-new-deposit-address)</td>
         <td>`/v1/deposit/:network/newAddress`</td>
         <td>✗</td>
         <td>✓</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Transfers](/rest/fund-management#list-past-transfers)</td>
         <td>`/v1/transfers`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Custody Account Fees](/rest/fund-management#list-custody-fee-transfers)</td>
         <td>`/v1/custodyaccountfees`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Withdraw Crypto Funds](/rest/fund-management#withdraw-crypto-funds)</td>
         <td>`/v1/withdraw/:currency`</td>
         <td>✗</td>
         <td>✓</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[New Clearing Order](/rest/clearing#create-new-clearing-order)</td>
         <td>`/v1/clearing/new`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Clearing Order Status](/rest/clearing#get-clearing-order)</td>
         <td>`/v1/clearing/status`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Cancel Clearing Order](/rest/clearing#cancel-clearing-order)</td>
         <td>`/v1/clearing/cancel`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Confirm Clearing Order](/rest/clearing#confirm-clearing-order)</td>
         <td>`/v1/clearing/confirm`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Clearing Order List](/rest/clearing#list-clearing-orders)</td>
         <td>`/v1/clearing/list`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Clearing Broker List](/rest/clearing#list-clearing-brokers)</td>
         <td>`/v1/clearing/broker/list`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Clearing Trades](/rest/clearing#list-clearing-trades)</td>
         <td>`/v1/clearing/trades`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Get Instant Quote](/rest/instant#get-instant-quote)</td>
         <td>`/v1/instant/quote`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Execute Instant Order](/rest/instant#execute-instant-order)</td>
         <td>`/v1/instant/execute`</td>
         <td>✓</td>
         <td>✗</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Add A Bank](/rest/fund-management#add-bank)</td>
         <td>`/v1/payments/addbank`</td>
         <td>✗</td>
         <td>✓</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Add A Bank CAD](/rest/fund-management#add-bank-cad)</td>
         <td>`/v1/payments/addbank/cad`</td>
         <td>✗</td>
         <td>✓</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[View Payment Methods](/rest/fund-management#list-payment-methods)</td>
         <td>`/v1/payments/methods`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Account Detail](/rest/account-administration#get-account-detail)</td>
         <td>`/v1/account`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[List Approved Addresses](/rest/fund-management#list-approved-addresses)</td>
         <td>`/v1/approvedAddresses/account/:network`</td>
         <td>✓</td>
         <td>✓</td>
         <td>✓</td>
      </tr>
      <tr>
         <td>[Create Approved Address](/rest/fund-management#create-new-approved-address)</td>
         <td>`/v1/approvedAddresses/:network/request`</td>
         <td>✗</td>
         <td>✓</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[Remove Approved Address](/rest/fund-management#remove-approved-address)</td>
         <td>`/v1/approvedAddresses/:network/remove`</td>
         <td>✗</td>
         <td>✓</td>
         <td>✗</td>
      </tr>
      <tr>
         <td>[FX Rate](/rest/market-data#fx-rate)</td>
         <td>`/v2/fxrate/:symbol/:timestamp`</td>
         <td>✗</td>
         <td>✗</td>
         <td>✓</td>
      </tr>
   </tbody>
</table>


#### Master Scoped Endpoints

<table>
  <thead>
    <tr>
      <th>Endpoint</th>
      <th style={{minWidth: 250}}>URI</th>
      <th>Administrator can access?</th>
      <th>Trader can access?</th>
      <th>Fund Manager can access?</th>
      <th>Auditor can access?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>[Create Account](/rest/account-administration#create-new-account)</td>
      <td>`/v1/account/create`</td>
      <td>✓</td>
      <td>✗</td>
      <td>✗</td>
      <td>✗</td>
    </tr>
    <tr>
      <td>[Rename Account](/rest/account-administration#rename-account)</td>
      <td>`/v1/account/rename`</td>
      <td>✓</td>
      <td>✗</td>
      <td>✗</td>
      <td>✗</td>
    </tr>
    <tr>
      <td>[Get Accounts](/rest/account-administration#list-accounts-in-group)</td>
      <td>`/v1/account/list`</td>
      <td>✓</td>
      <td>✓</td>
      <td>✓</td>
      <td>✓</td>
    </tr>
    <tr>
      <td>[Transfer Between Accounts](/rest/fund-management#transfer-between-accounts)</td>
      <td>`/v1/account/transfer/:currency`</td>
      <td>✗</td>
      <td>✗</td>
      <td>✓</td>
      <td>✗</td>
    </tr>
    <tr>
      <td>[Transactions](/rest/fund-management#get-transaction-history)</td>
      <td>`/v1/transactions`</td>
      <td>✓</td>
      <td>✓</td>
      <td>✓</td>
      <td>✓</td>
    </tr>
  </tbody>
</table>


<div className="p-4 text-sm section-icon section-info rounded-sm font-medium flex" role="alert">
    <svg
        viewBox="0 0 24 24"
        >
        <path
            fillRule="evenodd"
            clipRule="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>
  <span>Master level API keys can access Account level endpoints if the proper role is assigned. The account will need to be passed in the payload of the request as detailed [Using Master API Keys](/account-admin-endpoints#using-master-api-keys).</span>
</div>
