Trade history for a wallet
Every fill for a wallet across markets, newest first, read from ClickHouse: swap trades (sync) and limit-order fills (limit) in one list. wallet is the taker of record for swaps and the maker of record for limit fills, so pass the ArcherAccount PDA to see trades made from an ArcherAccount. A limit row is from the wallet’s side as maker: a filled bid is a buy that paid quote and received base, and its fee is the signed maker fee (negative = rebate).
curl --request GET \
--url https://api.archer.exchange/v1/trades \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.archer.exchange/v1/trades"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.archer.exchange/v1/trades', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.archer.exchange/v1/trades",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.archer.exchange/v1/trades"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.archer.exchange/v1/trades")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.archer.exchange/v1/trades")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"trades": [
{
"execInputSize": "<string>",
"execOutputSize": "<string>",
"fee": "<string>",
"id": "<string>",
"inputMint": "<string>",
"market": "<string>",
"outputMint": "<string>",
"side": "buy",
"slot": 123,
"timestamp": 123,
"tradeType": "sync",
"txSignature": "<string>",
"userWallet": "<string>",
"builderFeeAtoms": "<string>",
"builderFeeWallet": "<string>"
}
]
}{
"error": "INVALID_PARAMS",
"message": "Invalid market address: xyz"
}{
"error": "RATE_LIMITED",
"message": "Too many requests. Please slow down."
}{
"error": "INTERNAL_ERROR",
"message": "Internal error: ..."
}Authorizations
Query Parameters
Taker of record — a wallet, or an ArcherAccount PDA. Passing a wallet whose ArcherAccount owns books, instead of the account address, returns 400 INVALID_PARAMS naming the account address to use, rather than an empty result.
Maximum trades. Clamped to 200.
Filter by fill kind. Note: snake_case.
sync, limit Restrict to one market.
Response
Trades, newest first.
A page of fills, newest first.
Show child attributes
Show child attributes
curl --request GET \
--url https://api.archer.exchange/v1/trades \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.archer.exchange/v1/trades"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.archer.exchange/v1/trades', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.archer.exchange/v1/trades",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.archer.exchange/v1/trades"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.archer.exchange/v1/trades")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.archer.exchange/v1/trades")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"trades": [
{
"execInputSize": "<string>",
"execOutputSize": "<string>",
"fee": "<string>",
"id": "<string>",
"inputMint": "<string>",
"market": "<string>",
"outputMint": "<string>",
"side": "buy",
"slot": 123,
"timestamp": 123,
"tradeType": "sync",
"txSignature": "<string>",
"userWallet": "<string>",
"builderFeeAtoms": "<string>",
"builderFeeWallet": "<string>"
}
]
}{
"error": "INVALID_PARAMS",
"message": "Invalid market address: xyz"
}{
"error": "RATE_LIMITED",
"message": "Too many requests. Please slow down."
}{
"error": "INTERNAL_ERROR",
"message": "Internal error: ..."
}