Recent Transactions
curl --request GET \
--url https://api.hadron.fi/pools/{address}/transactionsimport requests
url = "https://api.hadron.fi/pools/{address}/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.hadron.fi/pools/{address}/transactions', 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.hadron.fi/pools/{address}/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.hadron.fi/pools/{address}/transactions"
req, _ := http.NewRequest("GET", url, nil)
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.hadron.fi/pools/{address}/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hadron.fi/pools/{address}/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": [
{
"signature": "3Qm9q3hP8oLpAaQ7s2y1Wb6kZ4uVnRceJ2hN1xVtQz8Kfw5rXdCgu7mEb9PtVZ2sYHn4aLrDk6oW3fJq1RcT5Bv",
"timestamp": 1773239510,
"slot": 405713340,
"ix_index": 1000,
"instruction_type": "Distribute",
"success": true,
"error": null
},
{
"signature": "XK7Cu5FSNkBP55ZMXLcMv1ZVUTB2cYCVrngtWHWf7ci8L3XjuVgnw1FwNQa7vsVNZ2QrHdwGVHkQqboLENp4Qj2",
"timestamp": 1773239503,
"slot": 405713326,
"ix_index": 0,
"instruction_type": "UpdateDeltaStaleness",
"success": true,
"error": null
},
{
"signature": "5ZVLukBf3HfmT7d9Emte1fobjhtHsjps5TXtNZboTK3di76NbVUxHsLDFuzcnyhnjYLNnVdJajKg9k5NJCs9CLCi",
"timestamp": 1773239448,
"slot": 405713180,
"ix_index": 0,
"instruction_type": "SwapExactIn",
"success": true,
"error": null
}
],
"next_cursor": "eyJpZCI6ImozZDd4a203...",
"has_more": true
}
Pools
Recent Transactions
Returns Hadron and fee-split (sidecar) transactions for a pool, ordered newest first. Cursor-paginated — you can walk the full history of a pool by following next_cursor.
GET
/
pools
/
{address}
/
transactions
Recent Transactions
curl --request GET \
--url https://api.hadron.fi/pools/{address}/transactionsimport requests
url = "https://api.hadron.fi/pools/{address}/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.hadron.fi/pools/{address}/transactions', 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.hadron.fi/pools/{address}/transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.hadron.fi/pools/{address}/transactions"
req, _ := http.NewRequest("GET", url, nil)
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.hadron.fi/pools/{address}/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hadron.fi/pools/{address}/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": [
{
"signature": "3Qm9q3hP8oLpAaQ7s2y1Wb6kZ4uVnRceJ2hN1xVtQz8Kfw5rXdCgu7mEb9PtVZ2sYHn4aLrDk6oW3fJq1RcT5Bv",
"timestamp": 1773239510,
"slot": 405713340,
"ix_index": 1000,
"instruction_type": "Distribute",
"success": true,
"error": null
},
{
"signature": "XK7Cu5FSNkBP55ZMXLcMv1ZVUTB2cYCVrngtWHWf7ci8L3XjuVgnw1FwNQa7vsVNZ2QrHdwGVHkQqboLENp4Qj2",
"timestamp": 1773239503,
"slot": 405713326,
"ix_index": 0,
"instruction_type": "UpdateDeltaStaleness",
"success": true,
"error": null
},
{
"signature": "5ZVLukBf3HfmT7d9Emte1fobjhtHsjps5TXtNZboTK3di76NbVUxHsLDFuzcnyhnjYLNnVdJajKg9k5NJCs9CLCi",
"timestamp": 1773239448,
"slot": 405713180,
"ix_index": 0,
"instruction_type": "SwapExactIn",
"success": true,
"error": null
}
],
"next_cursor": "eyJpZCI6ImozZDd4a203...",
"has_more": true
}
Path Parameters
string
required
The pool config PDA address.
Query Parameters
integer
default:"50"
Page size — number of transactions to return per request. Maximum
200.string
Opaque pagination cursor. Omit on the first request; on subsequent
requests, pass the
next_cursor value from the previous response to
fetch the next page. When the server returns next_cursor: null
(equivalently has_more: false), you have reached the end of the
pool’s history.string
Filter by instruction type (e.g.
SwapExactIn, Deposit, Distribute). See the Instruction Types and Fee-Split Instruction Types tables below for possible values. When set, only transactions matching this type are returned. Pages may contain fewer than limit results.string
default:"mainnet-beta"
Solana cluster —
mainnet-beta or devnet.Response
array
Array of transaction records on this page, ordered by most recent first.
Show Transaction record
Show Transaction record
string
Solana transaction signature.
integer
Transaction timestamp (Unix seconds).
integer
Solana slot number.
integer
Zero-based ordinal among the Hadron instructions in this
transaction — not the absolute Solana instruction position. The
first Hadron invocation is
0, the second is 1, and so on;
non-Hadron instructions (compute budget, token transfers, other
programs) are skipped when counting. Top-level Hadron
instructions are counted before Hadron CPIs from inner
instructions. A single Solana transaction can invoke the Hadron
program multiple times (e.g. a router or batch); each invocation
is recorded as its own row, disambiguated by (signature, ix_index).
Fee-split (sidecar) instructions in a transaction are recorded with a
separate, higher ix_index range so they never collide with the Hadron
rows of the same transaction (a fee-split call often CPIs into Hadron).string
The instruction that was executed — a Hadron instruction or a fee-split (sidecar) instruction. See the tables below for possible values.
boolean
Whether the transaction succeeded.
string | null
Error message if the transaction failed,
null otherwise.string | null
Cursor to pass as
?cursor=... on the next request to fetch the
following page. null when there are no more transactions (end of history).boolean
true if more transactions are available beyond this page, false
if this is the last page.Instruction Types
| Type | Description |
|---|---|
Initialize | Pool initialization |
Deposit | Liquidity deposit |
Withdraw | Liquidity withdrawal |
SwapExactIn | Swap with exact input amount |
SetCurve | Price curve update |
UpdateMidprice | Oracle midprice update |
InitializeFeeConfig | Global fee config initialization |
UpdateFeeConfig | Global fee config update |
SetRiskCurve | Risk curve update |
UpdateBaseSpread | Base spread factor update |
UpdateMidpriceAndBaseSpread | Combined midprice and spread update |
SwitchPriceCurve | Switch active price curve slot |
SwitchRiskCurve | Switch active risk curve slot |
InitializeSpreadConfig | Spread config initialization |
UpdateSpreadConfig | Spread config update |
UpdateDeltaStaleness | Delta staleness parameter update |
NominateAuthority | Nominate new pool authority |
AcceptAuthority | Authority transfer acceptance |
SubmitCurveUpdates | Batch curve update submission |
ApplyCurveUpdates | Apply pending curve updates |
ClosePool | Close and reclaim pool rent |
SetPoolState | Pool state change (pause/freeze/resume) |
AllocateCurvePrefabs | Allocate curve prefab storage |
RotateFeeAdmin | Rotate fee admin key |
InitializePoolFeeConfig | Per-pool fee config initialization |
UpdatePoolFeeConfig | Per-pool fee config update |
SetAssetFee | Set a per-asset-pair fee override on the global fee config |
ValidateCurveUpdates | Dry-run validation of queued curve updates |
RemoveSpreadTriggers | Remove specific spread triggers |
UpdateDrawdownGuard | Update drawdown guard threshold / rotation interval |
UpdateFactorClamp | Update the combined-factor clamp ceiling |
ClosePoolFeeConfig | Revert a pool from per-pool fee back to the global fee |
RotateDepositAuthority | Rotate the deposit authority |
RotateWithdrawAuthority | Rotate the withdraw authority |
RotateQuotingAuthority | Rotate the quoting authority (replaces SetQuotingAuthority) |
RotateSpreadAdmin | Rotate the spread config admin |
RotatePauseAuthority | Rotate the pause authority |
Fee-Split Instruction Types
Instructions from the fee-split sidecar program. They appear alongside Hadron instructions in this endpoint, attributed to the pool via the fee-split config’shadron_pool_config, and are filterable with instruction_type. Per-recipient credit and distribution amounts are not on these rows — those are tracked separately by the sidecar indexer.
| Type | Description |
|---|---|
InitializeSplit | Fee-split config created for the pool |
UpdateCustomerDomain | Recipient set / split-weight (ppm) update (the “update fee split” operation) |
UpdateHadronSlot | Hadron-slot (protocol recipient) update |
Distribute | Pending fees paid out to a recipient |
Reinvest | A recipient’s pending fees reinvested into the pool |
CloseSplit | Fee-split config closed |
{
"data": [
{
"signature": "3Qm9q3hP8oLpAaQ7s2y1Wb6kZ4uVnRceJ2hN1xVtQz8Kfw5rXdCgu7mEb9PtVZ2sYHn4aLrDk6oW3fJq1RcT5Bv",
"timestamp": 1773239510,
"slot": 405713340,
"ix_index": 1000,
"instruction_type": "Distribute",
"success": true,
"error": null
},
{
"signature": "XK7Cu5FSNkBP55ZMXLcMv1ZVUTB2cYCVrngtWHWf7ci8L3XjuVgnw1FwNQa7vsVNZ2QrHdwGVHkQqboLENp4Qj2",
"timestamp": 1773239503,
"slot": 405713326,
"ix_index": 0,
"instruction_type": "UpdateDeltaStaleness",
"success": true,
"error": null
},
{
"signature": "5ZVLukBf3HfmT7d9Emte1fobjhtHsjps5TXtNZboTK3di76NbVUxHsLDFuzcnyhnjYLNnVdJajKg9k5NJCs9CLCi",
"timestamp": 1773239448,
"slot": 405713180,
"ix_index": 0,
"instruction_type": "SwapExactIn",
"success": true,
"error": null
}
],
"next_cursor": "eyJpZCI6ImozZDd4a203...",
"has_more": true
}