Skip to content

POST /apiv2/reports/statement ​

Order a statement file — every operation of one token over a period, as CSV or PDF. The file is built in the background: the request returns an order number straight away, and the file is fetched once it is ready.

For a quick look at the same data without waiting, use the statement preview instead — it answers immediately but caps the number of operations it returns.

Endpoint base URL ​

https://netts.io/apiv2/reports

Request headers ​

HeaderRequiredDescription
X-API-KEYyesAPI key from the dashboard
X-Real-IPyesAn address from the key whitelist
X-Idempotency-KeynoYour own key, 12–128 chars of A-Z a-z 0-9 . _ : -

Order a file ​

bash
curl -s -X POST 'https://netts.io/apiv2/reports/statement' \
  -H 'X-API-KEY: your-api-key' \
  -H 'X-Real-IP: 203.0.113.10' \
  -H 'Content-Type: application/json' \
  -d '{
        "client_request_id": "stmt-2026-09-usdt",
        "address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "token_id": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
        "date_from": "2026-09-01",
        "date_to": "2026-09-30",
        "format": "csv"
      }'
json
{
  "status": "success",
  "code": 0,
  "msg": "created",
  "data": {
    "order_no": "REPxxxxxxxxxxxx",
    "client_request_id": "stmt-2026-09-usdt",
    "type": "statement",
    "status": "queued",
    "quota_bucket": "free",
    "progress_pct": 0,
    "address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "token_id": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "date_from": "2026-09-01",
    "date_to": "2026-09-30",
    "format": "csv",
    "created_at": "2026-09-06 17:01:51.868542+00:00",
    "finished_at": null,
    "expires_at": null,
    "artifact_sha256": null,
    "artifact_size": null,
    "download_url": null
  }
}
FieldRequiredNotes
client_request_idyesYour identifier. Unique per account
addressyesTRON base58, 34 characters
token_idnoTRX by default; a TRC20 contract or a TRC10 id
date_from, date_toyesUTC, inclusive. At most 366 days
formatnocsv by default. PDF is limited to 5000 operations

Then wait for it ​

bash
curl -s 'https://netts.io/apiv2/reports/REPxxxxxxxxxxxx' \
  -H 'X-API-KEY: your-api-key' -H 'X-Real-IP: 203.0.113.10'

The status field walks through queued → running → waiting_cypherarc → done. Two more are terminal: error, with the reason in error_code and error_message, and expired once the file has aged out. A short statement is usually ready in well under a minute; treat any status other than done as "keep waiting".

Once it is done, download_url is filled in — as a path, not a full URL — and the file can be fetched:

bash
curl -s -OJ 'https://netts.io/apiv2/reports/REPxxxxxxxxxxxx/download' \
  -H 'X-API-KEY: your-api-key' -H 'X-Real-IP: 203.0.113.10'

The file arrives gzipped. A CSV order downloads as application/gzip with a .csv.gz filename in Content-Disposition; decompress it before parsing. The status reply carries artifact_sha256 and artifact_size for the compressed file exactly as delivered, so you can verify the download without a second request.

Rather than polling, register a webhook and be told when the file is ready.

Repeating a request is safe ​

Send the same client_request_id, or the same X-Idempotency-Key, and you get the existing order back instead of a second one being built. The reply carries "msg": "existing" so you can tell the two apart.

Reusing an identifier with a different body is an error, not a new order: that gives 409. Identifiers are unique within your account only — another account's identifiers never collide with yours.

Files live for 30 days ​

After that the order becomes expired and downloading gives 410. Order it again if you need it later.

Rate limits ​

10 requests per second per endpoint, shared across all clients. Exceeding it gives 429 with Retry-After: 1 and the message Endpoint rate limit exceeded (10 req/s shared).

That is the only limit. There is no monthly quota, no cap on how many files you may order, and no limit on how many build at once — an account with a positive balance may order as much as the rate limit allows. Orders beyond what the build queue can take are held and retried automatically rather than refused, so a burst costs you latency, not failures.

Errors ​

HTTPMeaning
400the address is 34 characters but fails its base58 checksum
401key missing or invalid, or the source IP is not whitelisted
402account balance below the 4 TRX minimum
403the API key is blocked; contact support
409the same identifier was used with a different body — the body is IDEMPOTENCY_CONFLICT
410the file has expired
422a field is missing or malformed, or the period exceeds 366 days
429rate limit exceeded — retry after Retry-After
  • Balances — reading balances and the instant statement preview
  • Report webhooks — notification when a file is ready