Documentation
PoolNode Fee, Revenue, and Subaccount API
PoolNode fee-account, revenue, payout address, small-withdrawal, subaccount fee, and rebate administration endpoints.
PoolNode Fee, Revenue, and Subaccount API
This chapter covers the fee, revenue, address, withdrawal, and subaccount calls needed by API clients. Revenue emails, codes, wallet addresses, and transaction hashes are sensitive and must be redacted.
PoolNode may wrap results as { status, error, data } or return data directly. See the PoolNode envelope.
Project coin fee
POST /api/poolnode/project/config
{
"email": "[email protected]",
"coin": "PI-BTC",
"r": 0.01
}
r is a 0–1 fraction; 0.01 means 1%.
Revenue and records
| Method | Path | Main body fields |
|---|---|---|
| POST | /api/poolnode/profit |
email, coin. |
| POST | /api/poolnode/address/info |
email. |
| POST | /api/poolnode/rewards |
email, coin, page, size. |
| POST | /api/poolnode/payouts |
email, coin, page, size. |
The frontend recognizes all, yesterday, paid, and unpaid profit states. Reward and payout lists use:
{
"records": [],
"total": 0,
"page_no": 1
}
Update payout address
Send a user-email code:
POST /api/poolnode/send/user/mail
{
"address": "[email protected]",
"token": "<captcha or verification token>"
}
Save the payout address and threshold:
POST /api/poolnode/update/address
{
"email": "[email protected]",
"code": "123456",
"coin": "PI-BTC",
"amount": "0.01",
"address": "<payout wallet>"
}
The current frontend submits amount as a string.
Small withdrawal
| Method | Path | Body |
|---|---|---|
| POST | /api/poolnode/withdrawal/can/apply |
{ email, coin }; check eligibility. |
| POST | /api/poolnode/withdrawal/logs |
{ email, coin }; read request history. |
| POST | /api/poolnode/withdrawal/submit |
{ email, coin }; submit a request. |
The frontend interprets eligibility as [status, payload]. With status=0, payload is available balance; with status=-3, it is the next application time.
Subaccount fees
Query subaccounts:
POST /api/poolnode/subaccount/configs
{
"page": 1,
"size": 20,
"coin": "PI-BTC",
"name": "<optional subaccount filter>"
}
Set a subaccount fee:
POST /api/poolnode/subaccount/config
{
"sid": 1,
"coin": "PI-BTC",
"action": 0,
"r": 0.01
}
Set a subaccount rebate:
POST /api/poolnode/subaccount/rebate
{
"sid": 1,
"coin": "PI-BTC",
"email": "[email protected]",
"action": 0,
"r": 0.005
}
Currency parameters use PoolNode codes: BTC is normally PI-BTC, and LTC is VA-LTC.
Complete response fields
Project fee
email is the owner-controlled revenue email. coin should come from project/info.data.config[].coin. A successful save returns business success or HTTP 200; refetch project info and verify config[].r.
Profit and address
/api/poolnode/profit returns an array in data:
[
{ "status": "all", "profit": 0 }
]
status is all, yesterday, paid, or unpaid; profit is the corresponding amount. Treat a missing state as zero.
/api/poolnode/address/info returns address rows:
| Field | Type | Meaning |
|---|---|---|
coin |
string | PoolNode currency code. |
address |
string | Current revenue address. |
amount |
string/number | Minimum payout amount. |
Look up the row by coin before editing it.
Rewards and payouts
Both responses use { records, total, page_no }.
Reward records[]:
| Field | Type | Meaning |
|---|---|---|
day |
string | Revenue day. |
avg_hashrate |
number/string | Daily average hashrate. |
day_profit |
number/string | Daily profit. |
r |
number/string | Applied fee ratio. |
status |
number/string | Reward status enum. |
account_type |
number/string | Account-type enum. |
Payout records[]:
| Field | Type | Meaning |
|---|---|---|
created_at |
string | Payout-record time. |
amount |
number/string | Payout amount. |
trans_id |
string | On-chain transaction hash. |
status |
number/string | Payout status enum. |
account_type |
number/string | Account-type enum. |
total is the total row count and page_no is the server-confirmed page. Request pages start at 1.
Address update
coin must come from address info or project configuration. A successful update returns business success; query /api/poolnode/address/info again to verify address and amount. The mail endpoint returns only the delivery result, never the code.
Small withdrawal
The eligibility response is [status, payload]:
| Status | Meaning |
|---|---|
0 |
Eligible; payload is the balance. |
-1 |
No eligible small balance. |
-2 |
Balance exists but no payout address is bound. |
-3 |
Too soon since the previous request; payload is the relevant time. |
-4 |
Insufficient account permission. |
withdrawal/logs.data[] fields consumed by the frontend are updated_at, amount, status, and hash. status=1 means awaiting payment; for status=0 the UI can expose the transaction hash. Recheck eligibility immediately before submit.
Subaccounts
The query returns { records, total, page_no }. Current records[] fields:
| Field | Type | Meaning and reuse |
|---|---|---|
id |
number/string | Subaccount ID used as sid in fee/rebate writes. |
name |
string | Subaccount name. |
created_at |
string | Registration time. |
hashrate |
number/string | Current hashrate. |
r |
number/string | Independent fee ratio. |
rb_r |
number/string | Rebate ratio. |
rb_email |
string/null | Rebate revenue email. |
tick |
string/null | Read-only token fragment for the PoolNode observer link. |
action=0 saves. For subaccount fees, action=1 restores the node default; the frontend sends compatibility value r=0.03. For rebates, action=1 removes the rebate. Refetch the current page after a successful write.
Field dependency map
| Input | Source |
|---|---|
coin |
GET /api/poolnode/project/info → data.config[].coin, or the supported PoolNode currency list. |
email |
Revenue email held by the caller; config[].email can be used for display verification. |
Address address / amount |
The same-coin row from /api/poolnode/address/info. |
sid |
/api/poolnode/subaccount/configs → records[].id. |
Rebate email on removal |
Current records[].rb_email. |
