Overview

Details about how to obtain access tokens using OAuth 2.0

Fetch positions, balances and other account related details.

Place equity and complex option trades including advanced orders.

Fetch quotes, chains and historical data via REST and streaming APIs.

Stream market data and account events in real-time.

Create and update custom watchlists.

Examples, response types, property details and explanations.

Get Time and Sales

  • Available in Paper Trading
  • Available in Production
  • Available to Advisors
  • Supported

Time and Sales (timesales) is typically used for charting purposes. It captures pricing across a time slice at predefined intervals.

Tick data is also available through this endpoint. This results in a very large data set for high-volume symbols, so the time slice needs to be much smaller to keep downloads time reasonable.

Interval Data Available (Open) Data Available (All)
tick 5 days N/A
1min 20 days 10 days
5min 40 days 18 days
15min 40 days 18 days
Please note that the tick interval is not available in Sandbox.
There is a known issue as it pertains to downloading data using the tick interval from this endpoint as it results in extremely large datasets. Because of this, it is not recommended to get tick data via request/response, and instead use the streaming endpoints.
GET

Headers

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

Parameters

Parameter Type Param Type Required Values/Example Default
symbol Query String Required AAPL
A single security symbol.
interval Query String Optional 1min tick
Interval of time per timesale. One of: tick, 1min, 5min, 15min
start Query String Optional 2019-05-04 09:30
Start date/time for timesales range represented as YYYY-MM-DD HH:MM
end Query String Optional 2019-05-04 16:00
End date/time for timesales range represented as YYYY-MM-DD HH:MM
session_filter Query String Optional all all
Specify to retrieve all data points, or data points during market hours. One of: all, open.

Code Example

If you're developing using a paper trading account, change the hostname to https://sandbox.tradier.com
curl -X GET "https://api.tradier.com/v1/markets/timesales?symbol=AAPL&interval=1min&start=2019-05-04 09:30&end=2019-05-04 16:00&session_filter=all" \
     -H 'Authorization: Bearer <TOKEN>' \
     -H 'Accept: application/json'
// 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
        .get("https://api.tradier.com/v1/markets/timesales")
        .addHeader("Authorization", "Bearer <TOKEN>")
        .addHeader("Accept", "application/json")
        .addParameter("symbol", "AAPL")
        .addParameter("interval", "1min")
        .addParameter("start", "2019-05-04 09:30")
        .addParameter("end", "2019-05-04 16:00")
        .addParameter("session_filter", "all")
        .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/markets/timesales?symbol=AAPL&interval=1min&start=2019-05-04 09:30&end=2019-05-04 16:00&session_filter=all")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <TOKEN>'
request["Accept"] = 'application/json'

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"
)

func main() {
    apiUrl := "https://api.tradier.com/v1/markets/timesales?symbol=AAPL&interval=1min&start=2019-05-04 09:30&end=2019-05-04 16:00&session_filter=all"

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

    client := &http.Client{}
    r, _ := http.NewRequest("GET", urlStr, nil)
    r.Header.Add("Authorization", "Bearer <TOKEN>")
    r.Header.Add("Accept", "application/json")

    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/markets/timesales?symbol=AAPL&interval=1min&start=2019-05-04 09:30&end=2019-05-04 16:00&session_filter=all");
    request.Method = "GET";
    request.Headers["Authorization"] = "Bearer <TOKEN>";
    request.Accept = "application/json";

    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: 'get',
    url: 'https://api.tradier.com/v1/markets/timesales',
    qs: {
       'symbol': 'AAPL',
       'interval': '1min',
       'start': '2019-05-04 09:30',
       'end': '2019-05-04 16:00',
       'session_filter': 'all'
    },
    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.get('https://api.tradier.com/v1/markets/timesales',
    params={'symbol': 'AAPL', 'interval': '1min', 'start': '2019-05-04 09:30', 'end': '2019-05-04 16:00', 'session_filter': 'all'},
    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/markets/timesales?symbol=AAPL&interval=1min&start=2019-05-04 09:30&end=2019-05-04 16:00&session_filter=all');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

$headers = array();
$headers[] = 'Authorization: Bearer <TOKEN>';
$headers[] = 'Accept: application/json';

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

Response Definition

{
  "series": {
    "data": [
      {
        "time": "2019-05-09T09:30:00",
        "timestamp": 1557408600,
        "price": 199.64499999999998,
        "open": 200.46,
        "high": 200.53,
        "low": 198.76,
        "close": 200.1154,
        "volume": 1273841,
        "vwap": 199.77806
      },
      {
        "time": "2019-05-09T09:31:00",
        "timestamp": 1557408660,
        "price": 200.2,
        "open": 200.15,
        "high": 200.54,
        "low": 199.86,
        "close": 200.49,
        "volume": 228068,
        "vwap": 200.17588
      },
      {
        "time": "2019-05-09T09:32:00",
        "timestamp": 1557408720,
        "price": 200.445,
        "open": 200.51,
        "high": 200.75,
        "low": 200.14,
        "close": 200.2,
        "volume": 277041,
        "vwap": 200.44681
      },
      ...
    ]
  }
}