Skip to main content

Make Your First Trade with the REST SDK

This quickstart guide explains how to make a trade, from setup to execution, using the Advanced API Python REST Client.

This REST Client is a Python package that makes it easy to interact with the REST API.

Introduction

See the SDK README for detailed instructions, plus the full suite of SDK functions.

Full Code for this Quickstart
# This is a summary of all the code for this tutorial
from coinbase.rest import RESTClient
from json import dumps
import math

api_key = "organizations/{org_id}/apiKeys/{key_id}"
api_secret = "-----BEGIN EC PRIVATE KEY-----\nYOUR PRIVATE KEY\n-----END EC PRIVATE KEY-----\n"

client = RESTClient(api_key=api_key, api_secret=api_secret)

product = client.get_product("BTC-USD")
btc_usd_price = float(product["price"])
adjusted_btc_usd_price = str(math.floor(btc_usd_price - (btc_usd_price * 0.05)))

limit_order = client.limit_order_gtc_buy(
client_order_id="00000002",
product_id="BTC-USD",
base_size="0.0002",
limit_price=adjusted_btc_usd_price
)

limit_order_id = limit_order["order_id"]

client.cancel_orders(order_ids=[limit_order_id])

Prerequisites

Creating API Keys

To you use the SDK, you must first create your own API key on the Coinbase Developer Platform (CDP).

Installing the SDK

To install the Coinbase Advanced API Python SDK, run the following command in a terminal:

pip3 install coinbase-advanced-py

Setting up your Client

Create a Python project with the following code we have set up for you. Replace the api_key and api_secret with your own API key and Secret.

from coinbase.rest import RESTClient
from json import dumps

api_key = "organizations/{org_id}/apiKeys/{key_id}"
api_secret = "-----BEGIN EC PRIVATE KEY-----\nYOUR PRIVATE KEY\n-----END EC PRIVATE KEY-----\n"

client = RESTClient(api_key=api_key, api_secret=api_secret)

You are now ready to start sending out requests!

Sending your First Request

Let's start by calling List Accounts to retrieve a list of authenticated accounts for the current user.

Optional parameters:

  • limit = A pagination limit with default of 49 and maximum of 250
  • cursor = Cursor used for pagination.

Add get_accounts to your code, using the same client you just created. This retrieves the accounts associated with the user account and immediately prints them in formatted JSON.

accounts = client.get_accounts()
print(dumps(accounts, indent=2))

Placing a Market Order

You are ready to place your first order!

The Create Order endpoint creates an order with a specified product_id (i.e., "BTC-USD"), side (i.e. "BUY"/"SELL"), and other parameters listed in the API docs.

In this example, we use the same client to place a $10 market-buy order on BTC-USD. Then we retrieve our fills for this order_id to see if our order was executed.

Required parameters:

  • client_order_id: UUID for the order, generated by the client. Must be unique for each order.
  • product_id: The product this order was created for.
  • quote_size: Amount of quote currency to spend on order.
info

Don’t forget to add your own custom client_order_id. For learning purposes, we’ve pre-filled it to an arbitrary string.

order = client.market_order_buy(
client_order_id="00000001",
product_id="BTC-USD",
quote_size="10"
)

order_id = order["order_id"]

fills = client.get_fills(order_id=order_id)
print(dumps(fills, indent=2))

Placing a Limit-buy Order

Now let’s get a bit more... advanced!

In this final section, we combine various calls to:

  1. Retrieve the current price of BTC-USD.
  2. Place a limit-buy order 5% below said price.
  3. Cancel the order using the order_id.

Let's dive in!

Retrieving the Current Price

First, retrieve the current price of BTC-USD using the Get Product endpoint. The product_id is required as a parameter. In this case, it’s "BTC-USD".

Later, we'll calculate and obtain the price 5% below the current price. This will be stored in adjusted_btc_usd_price to later indicate our limit price.

import math

product = client.get_product("BTC-USD")
btc_usd_price = float(product["price"])
adjusted_btc_usd_price = str(math.floor(btc_usd_price - (btc_usd_price * 0.05)))

Placing an Order 5% Below Price

Now, we place a limit-buy order using the Create Order endpoint. It’s similar to placing a market-buy order, but with some new parameters:

  • base_size: Amount of base currency to spend on order.
  • limit_price: Ceiling price for which the order should get filled.

Here we place a limit-buy order for 0.0002 BTC at a price of 5% below the current price of BTC-USD. We also set the client_order_id to "00000002" to differentiate it from the previous order we placed.

limit_order = client.limit_order_gtc_buy(
client_order_id="00000002",
product_id="BTC-USD",
base_size="0.0002",
limit_price=adjusted_btc_usd_price
)

limit_order_id = limit_order["order_id"]

Cancelling the Order

Finally, cancel the order you just placed with the Cancel Orders endpoint:

client.cancel_orders(order_ids=[limit_order_id])

And we are done!

You successfully placed Market and Limit orders using the Advanced API Python REST SDK.

Was this helpful?