Place a Combo Order

  • Available in Sandbox
  • Available in Production
  • Available to Advisors
  • Supported

Place a combo order. This is a specialized type of order consisting of one equity leg and one option leg. It can optionally include a second option leg, for some strategies.

POST

Headers

Header Required Values/Example Default
Accept Optional application/xml, application/json application/xml
Authorization Required Bearer {token}

Parameters

Note: the index for each leg starts at 0 and would go to 3 for 4 legs.

Parameter Type Param Type Required Values/Example Default
account_id Path String Required VA000000
Account number
class Form String Required combo
The kind of order to be placed.
symbol Form String Required SPY
Underlying security symbol of the options
type Form String Required market
The type of order to be placed. One of: market, debit, credit, even
duration Form String Required day
Time the order will remain active. One of: day, gtc, pre, post
price Form String Optional 1.00
Limit price. Required only for debit and credit orders.
side[0] Form String Required buy
The side of the equity leg. One of: buy_to_open, buy_to_close, sell_to_open, sell_to_close
quantity[0] Form String Required 1
The number of shares
option_symbol[1] Form String Required SPY140118C00195000
OCC option symbol of the option
side[1] Form String Required buy_to_open
The side of the option leg. One of: buy_to_open, buy_to_close, sell_to_open, sell_to_close
quantity[1] Form String Required 100
The number of contracts for the option leg
option_symbol[2] Form String Optional SPY140118C00196000
OCC option symbol of the option
side[2] Form String Optional buy_to_close
The side of the option leg. One of: buy_to_open, buy_to_close, sell_to_open, sell_to_close
quantity[2] Form String Optional 100
The number of contracts for the option leg

Code Example

If you're developing in the sandbox, change the hostname to https://sandbox.tradier.com
curl -X POST "https://api.tradier.com/v1/accounts/{account_id}/orders" \
     -H 'Authorization: Bearer <TOKEN>' \
     -H 'Accept: application/json' \
     -H 'Content-Type: application/x-www-form-urlencoded' \
     -d 'class=combo&symbol=SPY&type=market&duration=day&price=1.00&side[0]=buy&quantity[0]=1&option_symbol[1]=SPY140118C00195000&side[1]=buy_to_open&quantity[1]=100&option_symbol[2]=SPY140118C00196000&side[2]=buy_to_close&quantity[2]=100'
// Version 1.8.0_31    
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

public class MainClass {
  public static void main(String[] args) throws IOException {
    final HttpUriRequest request = RequestBuilder
        .post("https://api.tradier.com/v1/accounts/{account_id}/orders")
        .addHeader("Authorization", "Bearer <TOKEN>")
        .addHeader("Accept", "application/json")
        .addParameter("account_id", "VA000000")
        .addParameter("class", "combo")
        .addParameter("symbol", "SPY")
        .addParameter("type", "market")
        .addParameter("duration", "day")
        .addParameter("price", "1.00")
        .addParameter("side[0]", "buy")
        .addParameter("quantity[0]", "1")
        .addParameter("option_symbol[1]", "SPY140118C00195000")
        .addParameter("side[1]", "buy_to_open")
        .addParameter("quantity[1]", "100")
        .addParameter("option_symbol[2]", "SPY140118C00196000")
        .addParameter("side[2]", "buy_to_close")
        .addParameter("quantity[2]", "100")
        .build();

    final HttpResponse response = HttpClientBuilder.create().build().execute(request);
    final String jsonString = EntityUtils.toString(response.getEntity());
    final JsonNode json = new ObjectMapper().readTree(jsonString);
    
    System.out.println(response.getStatusLine().getStatusCode());
    System.out.println(json);
  }
}
# Version 2.5.0p0    
require 'uri'
require 'net/http'

url = URI("https://api.tradier.com/v1/accounts/{account_id}/orders")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <TOKEN>'
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/x-www-form-urlencoded'
request.body = "class=combo&symbol=SPY&type=market&duration=day&price=1.00&side[0]=buy&quantity[0]=1&option_symbol[1]=SPY140118C00195000&side[1]=buy_to_open&quantity[1]=100&option_symbol[2]=SPY140118C00196000&side[2]=buy_to_close&quantity[2]=100"

response = http.request(request)
puts response.code
puts response.read_body
// Version go1.12      
package main

import (
    "fmt"
    "net/http"
    "net/url"
    "io/ioutil"
    "log"
    "strconv"
    "strings"
)

func main() {
    apiUrl := "https://api.tradier.com/v1/accounts/{account_id}/orders"
    data := url.Values{} 
    data.Set("class", "combo") 
    data.Set("symbol", "SPY") 
    data.Set("type", "market") 
    data.Set("duration", "day") 
    data.Set("price", "1.00") 
    data.Set("side[0]", "buy") 
    data.Set("quantity[0]", "1") 
    data.Set("option_symbol[1]", "SPY140118C00195000") 
    data.Set("side[1]", "buy_to_open") 
    data.Set("quantity[1]", "100") 
    data.Set("option_symbol[2]", "SPY140118C00196000") 
    data.Set("side[2]", "buy_to_close") 
    data.Set("quantity[2]", "100")

    u, _ := url.ParseRequestURI(apiUrl)
    urlStr := u.String()

    client := &http.Client{}
    r, _ := http.NewRequest("POST", urlStr, strings.NewReader(data.Encode()))
    r.Header.Add("Authorization", "Bearer <TOKEN>")
    r.Header.Add("Accept", "application/json")
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
    r.Header.Add("Content-Length", strconv.Itoa(len(data.Encode())))

    resp, _ := client.Do(r)
    responseData, err := ioutil.ReadAll(resp.Body)

    if err != nil {
      log.Fatal(err)
    }

    fmt.Println(resp.Status)
    fmt.Println(string(responseData))
}
// Version 4.6.2.0    
using System;
using System.Net;  
using System.IO;
using System.Text;

public class MainClass {
  public static void Main (string[] args) {
    var request = (HttpWebRequest)WebRequest.Create("https://api.tradier.com/v1/accounts/{account_id}/orders");
    var requestData = "class=combo&symbol=SPY&type=market&duration=day&price=1.00&side[0]=buy&quantity[0]=1&option_symbol[1]=SPY140118C00195000&side[1]=buy_to_open&quantity[1]=100&option_symbol[2]=SPY140118C00196000&side[2]=buy_to_close&quantity[2]=100";
    var data = Encoding.ASCII.GetBytes(requestData);
    
    request.Method = "POST";
    request.Headers["Authorization"] = "Bearer <TOKEN>";
    request.Accept = "application/json";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;

    using (var stream = request.GetRequestStream())
     {
         stream.Write(data, 0, data.Length);
     }

    var response = (HttpWebResponse)request.GetResponse();

    Console.WriteLine (response.StatusCode);
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    Console.WriteLine (responseString);
  }
}
// Version 10.15.2    
const request = require('request');

request({
    method: 'post',
    url: 'https://api.tradier.com/v1/accounts/{account_id}/orders',
    form: {
       'account_id': 'VA000000',
       'class': 'combo',
       'symbol': 'SPY',
       'type': 'market',
       'duration': 'day',
       'price': '1.00',
       'side[0]': 'buy',
       'quantity[0]': '1',
       'option_symbol[1]': 'SPY140118C00195000',
       'side[1]': 'buy_to_open',
       'quantity[1]': '100',
       'option_symbol[2]': 'SPY140118C00196000',
       'side[2]': 'buy_to_close',
       'quantity[2]': '100'
    },
    headers: {
      'Authorization': 'Bearer <TOKEN>',
      'Accept': 'application/json'
    }
  }, (error, response, body) => {
      console.log(response.statusCode);
      console.log(body);
  });
# Version 3.6.1    
import requests

response = requests.post('https://api.tradier.com/v1/accounts/{account_id}/orders',
    data={'class': 'combo', 'symbol': 'SPY', 'type': 'market', 'duration': 'day', 'price': '1.00', 'side[0]': 'buy', 'quantity[0]': '1', 'option_symbol[1]': 'SPY140118C00195000', 'side[1]': 'buy_to_open', 'quantity[1]': '100', 'option_symbol[2]': 'SPY140118C00196000', 'side[2]': 'buy_to_close', 'quantity[2]': '100'},
    headers={'Authorization': 'Bearer <TOKEN>', 'Accept': 'application/json'}
)
json_response = response.json()
print(response.status_code)
print(json_response)
<?php
// Version 7.2.17-0ubuntu0.18.04.1
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.tradier.com/v1/accounts/{account_id}/orders');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'class=combo&symbol=SPY&type=market&duration=day&price=1.00&side[0]=buy&quantity[0]=1&option_symbol[1]=SPY140118C00195000&side[1]=buy_to_open&quantity[1]=100&option_symbol[2]=SPY140118C00196000&side[2]=buy_to_close&quantity[2]=100');
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Authorization: Bearer <TOKEN>';
$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
echo $http_code;
echo $result;

Response

{
  "order": {
    "id": 257459,
    "status": "ok",
    "partner_id": "c4998eb7-06e8-4820-a7ab-55d9760065fb"
  }
}