REST API/Fills & makers
Fills & makers
Fills are populated by the on-chain signature scanner: the indexer reads
recent program signatures, parses each take_offer instruction, and writes
the resulting fill to Postgres. The maker endpoints aggregate that view per
wallet.
GET /v1/fills
Global fills feed, newest first.
Query parameters
| Name | Type | Notes |
|---|---|---|
taker | string | Filter by taker wallet |
maker | string | Filter by maker wallet |
offerPda | string | Equivalent to /v1/offers/:pda/fills plus filters |
tokenMint | string | Filter by asset mint |
paymentMint | string | Filter by payment mint |
fromTime | number | Unix seconds, inclusive |
toTime | number | Unix seconds, inclusive |
limit | number | Max 200, default 50 |
offset | number | Default 0 |
Response
{
"fills": [
{
"signature": "2pwo...",
"offerPda": "5x...",
"taker": "E89...",
"fillAmount": "100000000",
"paymentAmount": "1000000",
"feeAmount": "2000",
"blockTime": "2026-04-26T14:30:00Z",
"slot": "458271000",
"tokenMint": "Es9...",
"paymentMint": "So11...",
"side": "sell"
}
],
"limit": 50,
"offset": 0
}tokenMint, paymentMint, and side come from the matching offer row and
are included as a convenience so consumers don't have to do a second lookup
per row.
GET /v1/makers/:maker/stats
Per-maker aggregates.
Response
{
"maker": "3p...",
"totalOffers": 14,
"openOffers": 3,
"filledOffers": 9,
"expiredOffers": 2,
"totalSold": { "Es9...": "120000000000" },
"totalBought": {}
}totalSold and totalBought are keyed by token mint and contain the
cumulative raw token amount the maker has moved on each side.
GET /v1/makers/:maker/offers
Convenience listing equivalent to /v1/offers?maker=... with the same
status / limit / offset parameters.