List fills
curl --request GET \
--url https://api.numofx.com/v1/fills \
--header 'X-Numo-Auth: <x-numo-auth>'import requests
url = "https://api.numofx.com/v1/fills"
headers = {"X-Numo-Auth": "<x-numo-auth>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Numo-Auth': '<x-numo-auth>'}};
fetch('https://api.numofx.com/v1/fills', 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.numofx.com/v1/fills",
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-Numo-Auth: <x-numo-auth>"
],
]);
$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.numofx.com/v1/fills"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Numo-Auth", "<x-numo-auth>")
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.numofx.com/v1/fills")
.header("X-Numo-Auth", "<x-numo-auth>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.numofx.com/v1/fills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Numo-Auth"] = '<x-numo-auth>'
response = http.request(request)
puts response.read_body{
"fills": [
{
"trade_id": 123,
"order_id": "<string>",
"liquidity": "taker",
"side": "buy",
"price": "<string>",
"size": "<string>",
"asset_address": "<string>",
"sub_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"market": "<string>",
"display_name": "<string>",
"fee": "<string>",
"tx_hash": "<string>",
"spot_contract": {
"spec": "usdc_cngn_spot_v1",
"ui_intent": {
"side": "buy",
"price": "1371.977018",
"size": "1.199729"
},
"engine_order": {
"side": "buy",
"price": "0.000728875182750367",
"amount": "1646"
},
"balance_delta": {
"usdc": "-1.199729",
"cngn": "+1646"
}
}
}
],
"next_before": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Markets service
List fills
The fills on the authenticated owner’s orders, newest first. Takes the same X-Numo-Auth frame as GET /v1/orders; the owner is taken from it, never from a parameter. A trade between two of the owner’s orders is listed once per order.
GET
/
v1
/
fills
List fills
curl --request GET \
--url https://api.numofx.com/v1/fills \
--header 'X-Numo-Auth: <x-numo-auth>'import requests
url = "https://api.numofx.com/v1/fills"
headers = {"X-Numo-Auth": "<x-numo-auth>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Numo-Auth': '<x-numo-auth>'}};
fetch('https://api.numofx.com/v1/fills', 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.numofx.com/v1/fills",
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-Numo-Auth: <x-numo-auth>"
],
]);
$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.numofx.com/v1/fills"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Numo-Auth", "<x-numo-auth>")
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.numofx.com/v1/fills")
.header("X-Numo-Auth", "<x-numo-auth>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.numofx.com/v1/fills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Numo-Auth"] = '<x-numo-auth>'
response = http.request(request)
puts response.read_body{
"fills": [
{
"trade_id": 123,
"order_id": "<string>",
"liquidity": "taker",
"side": "buy",
"price": "<string>",
"size": "<string>",
"asset_address": "<string>",
"sub_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"market": "<string>",
"display_name": "<string>",
"fee": "<string>",
"tx_hash": "<string>",
"spot_contract": {
"spec": "usdc_cngn_spot_v1",
"ui_intent": {
"side": "buy",
"price": "1371.977018",
"size": "1.199729"
},
"engine_order": {
"side": "buy",
"price": "0.000728875182750367",
"amount": "1646"
},
"balance_delta": {
"usdc": "-1.199729",
"cngn": "+1646"
}
}
}
],
"next_before": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Returns the fills on your orders — every execution, at the price and size it traded — newest first.
Use it to reconcile balances trade by trade; order history
gives the same activity summed per order.
Authentication is required, and the owner is taken from the signature, never from a parameter.
The public trades feed lists every execution by order id but not
by owner; this endpoint is what ties fills to an address.
Authentication
Send the sameX-Numo-Auth frame as order history, signed
over the same message. One frame authorizes both endpoints until it expires, so a client that already
shows order history needs no second signature.
Reading a fill
liquidityistakerwhen your order crossed the book,makerwhen it rested and was hit.side,priceandsizeare the engine’s: your order’s engine side, the price in USDC per cNGN, and the size in whole cNGN.- On the spot market,
spot_contract.ui_intentrestates the fill in trader terms:side(buyacquires USDC),pricein cNGN per USDC, andsizeas the USDC that changed hands. - A trade between two of your own orders, on different subaccounts, is listed twice — once for each
order — because each moved that account’s balances. Both rows share a
trade_id.
Fees
fee is what your order paid on the fill, in USDC. Makers are never charged, so a maker fill’s fee
is 0. A taker fill carries the fee the venue charged: recorded when the fill executes, and filled in
exactly for fills from before fees were recorded. fee is absent only when the fee is not known.
tx_hash is the Base transaction that settled the fill. It is absent for fills recorded before
transaction hashes were stored.
Retention
Fills are kept indefinitely. An order that traded is never pruned, even after it is cancelled or expires, so its fills stay listed.Paging
Pages hold up tolimit fills (default 50, maximum 100). When a page is full, the response includes
next_before; pass it back as before to fetch older fills. The last page has no next_before.Headers
Base64url-encoded JSON auth frame {address, signature, nonce, issued_at, expiry}, signed with personal_sign over the order-history message. The same frame GET /v1/orders accepts.
Query Parameters
Required range:
1 <= x <= 100The next_before value from the previous page, to page to older fills.
Was this page helpful?

