Z Zise Developers 简体中文

Fixed-term order list, with rates snapshotted at subscription

GET /v1/earn/orders scope: earn:read
On behalf of a member · x-on-behalf-of required

Fixed-term only. Flexible Earn is a balance pool, one row per product rather than per transaction; use GET /v1/earn/positions.

apr_bps is the subscription-time snapshot, not today’s listed product rate. Changing the listed rate does not affect existing orders. Comparing it to the product list’s apr_bps will differ after every rate change; that is not drift.

The accrual interval is inclusive at the start, exclusive at the end: value_date inclusive → maturity_date exclusive.

⚠ principal and settled_interest are fixed-point decimal strings, with precision from the same row’s ledger_scale. principal in GET /v1/earn/positions is instead an integer string in minor units. The same order therefore has different amount formats at these two endpoints.

Query Parameters

FieldTypeRequiredDescription
limit integer Optional Default 20, maximum 100.
cursor string Optional Previous page’s next_cursor, an opaque string.
FieldTypeRequiredDescription
x-on-behalf-of string Required Member whose fixed-term orders are queried.

Response

200status values: pending_start / starting / accruing / pending_settle / settling / settled / closed. Expose unknown values unchanged, never default. rollover_mode values: none / principal / principal_interest.
{
  "data": [
    {
      "id": "ero_c41d7f92-8a03-4bb6-9e10-5f2c8d3a7061",
      "product_id": "ern_7d2b48ae-19c3-4f60-8c55-0ab3e9f21744",
      "status": "accruing",
      "asset": "USDT",
      "ledger_scale": 6,
      "principal": "1000.000000",
      "settled_interest": "0.000000",
      "apr_bps": 620,
      "term_days": 90,
      "rollover_mode": "principal_interest",
      "value_date": "2026-08-13",
      "maturity_date": "2026-11-11",
      "created_at": "2026-08-12T09:30:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
400member_context_required · member_not_found
403insufficient_scope
Request
curl -X GET 'https://api.zinfra.vip/v1/earn/orders' \
  -H 'x-auth-token: Bearer $TOKEN' \
  -H 'x-on-behalf-of: $MEMBER_ID'
const res = await fetch("https://api.zinfra.vip/v1/earn/orders", {
  method: "GET",
  headers: {
    "x-auth-token": "Bearer $TOKEN",
    "x-on-behalf-of": "$MEMBER_ID",
  },
});
// Keep monetary amounts as strings, never numbers.
const data = await res.json();
import requests

res = requests.get(
    "https://api.zinfra.vip/v1/earn/orders",
    headers={
        "x-auth-token": "Bearer $TOKEN",
        "x-on-behalf-of": "$MEMBER_ID",
    },
)
# Use Decimal(str(...)) for amounts, not float.
data = res.json()
req, _ := http.NewRequest("GET", "https://api.zinfra.vip/v1/earn/orders",
    nil)
req.Header.Set("x-auth-token", "Bearer $TOKEN")
req.Header.Set("x-on-behalf-of", "$MEMBER_ID")
res, err := http.DefaultClient.Do(req)
// Decode amount fields as string, not float64.
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.zinfra.vip/v1/earn/orders"))
    .header("x-auth-token", "Bearer $TOKEN")
    .header("x-on-behalf-of", "$MEMBER_ID")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();
// Use String / BigDecimal for amounts, not double.
$ch = curl_init('https://api.zinfra.vip/v1/earn/orders');
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'x-auth-token: Bearer $TOKEN',
    'x-on-behalf-of: $MEMBER_ID',
  ],
]);
$res = curl_exec($ch);
// Use bcmath / strings for amounts, not floatval.
200
{
  "data": [
    {
      "id": "ero_c41d7f92-8a03-4bb6-9e10-5f2c8d3a7061",
      "product_id": "ern_7d2b48ae-19c3-4f60-8c55-0ab3e9f21744",
      "status": "accruing",
      "asset": "USDT",
      "ledger_scale": 6,
      "principal": "1000.000000",
      "settled_interest": "0.000000",
      "apr_bps": 620,
      "term_days": 90,
      "rollover_mode": "principal_interest",
      "value_date": "2026-08-13",
      "maturity_date": "2026-11-11",
      "created_at": "2026-08-12T09:30:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}