Use nodevera as a managed blockchain access layer for TRON, Ethereum and Solana payment systems. This guide covers onboarding, API key authentication, account endpoints, chain RPC forwarding, signed transaction broadcasting, error handling and production integration practices.
Integration pathCopy API Base URL and API Key -> send authenticated backend requests -> monitor usage and errors.
Quick Start
Five minute backend integration
1. Prepare credentialsCopy the API Base URL and API Key from API Access after your account is active.
2. Store secretsKeep the API Key in your backend secret manager or environment variables.
3. Check accountCall /api/me to confirm authentication, plan status, quota and current usage.
4. Test chain RPCSend one TRON, Ethereum or Solana request and verify your application handles the response shape.
# Example smoke test from your backend server
export NODEVERA_BASE_URL="<api_base_url>"
export NODEVERA_API_KEY="<your_api_key>"
curl -sS "$NODEVERA_BASE_URL/api/me" \
-H "X-API-Key: $NODEVERA_API_KEY"
curl -sS -X POST "$NODEVERA_BASE_URL/eth" \
-H "content-type: application/json" \
-H "X-API-Key: $NODEVERA_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
TRON Energy
TRON Energy API integration guide
Use your separate TRX balance to rent 65,000 or 131,000 Energy for one hour. This reference covers authentication, quotes, authorized orders, delivery tracking, top-ups and reconciliation.
Energy access, API keys and TRX balances are separate from RPC subscriptions. Open the Energy API access page to create or revoke keys and copy its full API Base URL. In these examples, ENERGY_BASE_URL already ends in /v1/resources; do not append that prefix again.
Register your calling server's public IPv4 or IPv6 address in Energy API access before calling this API. Both the Energy key and its account's allowed source IP are required. An empty IP allowlist denies direct API access; dashboard actions remain available.
Send X-API-Key or Authorization: Bearer with your Energy API key. No API Secret, request signature, HMAC or timestamp header is required. Use HTTPS from your backend and keep keys out of browser code, logs and shared examples.
The receiver is the activated TRON wallet that will send the transaction, not the recipient of a USDT transfer. Contract accounts cannot receive this delegated Energy. Wait for CONFIRMED before signing and broadcasting your own transaction. Resources may be reclaimed after the rental period; bandwidth is separate, and Energy needs vary by transaction.
2. Account, catalog and usage summary
All *_sun monetary fields are integer SUN: 1 TRX = 1,000,000 SUN. Use integer arithmetic. Energy amounts are resource units, not SUN. Dates are RFC 3339 timestamps.
Endpoint
Response and meaning
GET /account
Returns account.id, balance_sun (available funds), held_sun (currently reserved funds) and disabled. Placing an order moves its authorization from available funds into held funds.
GET /catalog
Returns products with amount, duration, price_sun and enabled, plus currency: TRX. A price_sun of 0 means the catalog has no fixed price, not that the product is free. Request a quote for the current estimate.
GET /summary
Returns account and summary with timezone, as_of, today, month, lifetime, pending_order_count and review_order_count. Periods contain order_count, confirmed_order_count, charged_sun and delivered_energy; lifetime also includes deposit_sun.
Summary day and month boundaries use Asia/Shanghai. Order counts and known delivered amounts follow order creation time; confirmed counts follow confirmation time, and charges follow CAPTURE ledger time. delivered_energy is historical known delivery, not the wallet's remaining on-chain Energy. Use summary for account totals rather than summing the recent history lists.
3. Request an estimate
POST /quotes accepts one JSON object with all three fields below. A successful response is HTTP 200 with a quote object. Requesting a quote does not reserve funds or create an order. Quotes are valid for approximately 60 seconds; always check expires_at.
Field
Type
Requirements
amount
integer
Required: 65000 or 131000 Energy.
receiver
string
Required: a valid, activated TRON Base58Check wallet address that can receive delegated resources.
All amounts, dates and IDs in these responses are illustrative, not live prices or payment instructions. quote.id identifies this estimate; sell_price_sun is its estimated total. The final charge is determined after delivery and cannot exceed the maximum you authorize when ordering.
4. Create an authorized order and poll its result
POST /orders creates an asynchronous order. Review the current quote and available balance before sending this request: it reserves the full max_total_sun immediately. The cap must cover the quote estimate and must not exceed 1,000,000,000 SUN (1,000 TRX). You may set it to the estimate if you do not authorize a higher final price.
Field
Requirements
quote_id
Required string: the unused quote ID belonging to this account. A new order must be placed before the quote expires.
client_order_id
Required string: your stable business order ID, unique within this Energy account. Use 1–128 ASCII letters, digits, underscores or hyphens; quote_id uses the same character rules. This JSON field provides idempotency; an Idempotency-Key header does not replace it.
max_total_sun
Required integer SUN: the maximum final charge you approve. Your available balance must cover this entire authorization, not just the estimate.
A first successful creation normally returns HTTP 202. Replaying an existing client_order_id with exactly the same quote_id and max_total_sun returns the existing order, normally HTTP 200; changing either value returns HTTP 409. Concurrent identical requests may both return 202 for the same order. Treat either 200 or 202 as accepted and persist the returned order.id.
If the POST response is lost, retry the identical JSON with the same client_order_id, even if the quote has since expired. Do not generate a new business ID just because of a timeout: it can create another paid order. A quote can fund only one order.
GET /orders/{order_id} returns HTTP 200 with order. Poll at a modest interval, for example every 5 seconds with backoff. order.sell_price_sun is the original estimate; charged_sun is the settled charge. order.held_sun records the original authorization even after settlement, not the current wallet hold. Read account.held_sun for the current total. delivered_amount is known delivered Energy, and transaction_id is included when available.
Pay for one order on-chain
After requesting a quote, choose a single-order payment instead of using your existing balance. POST /checkouts accepts quote_id and client_order_id. Optional max_total_sun defaults to the quoted total and must satisfy the same authorization bounds as a balance order. Create the checkout before the quote expires.
A new checkout returns HTTP 201 with checkout; an identical replay returns HTTP 200. Reuse the same quote_id, client_order_id and authorization if the response is lost. A checkout reserves its quote and business ID, so they cannot also create a separate balance order.
The checkout contains id, quote_id, client_order_id, amount, receiver, duration, sell_price_sun, max_total_sun, status, deposit, created_at and expires_at. Pay exactly deposit.amount_sun to deposit.address before deposit.expires_at, normally within 30 minutes. The dashboard QR contains only this receiving address; enter the exact TRX amount separately.
GET /checkouts/{id} returns checkout; GET /checkouts returns checkouts with at most 100 recent records. PENDING means awaiting payment, EXPIRED means the payment window has closed, CANCELED means the payment was canceled, and PAID means funds were credited. Only an order_id identifies an Energy order; query that order for delivery. PAID without order_id must not be treated as an order or delivery confirmation.
For an eligible, uncanceled checkout, payment confirmation credits your account and creates the authorized Energy order atomically, even if your browser is closed. The original quote expiry does not cancel a valid payment. A canceled checkout never starts an automatic Energy order. If fulfillment cannot proceed, funds remain in your available balance; there is no automatic on-chain refund. Any payment reference tail above the authorization also remains in your balance.
5. Order states and next actions
Status
Meaning and action
QUEUED
Accepted and waiting to process. Funds are held; continue polling.
PROCESSING
Delivery is in progress. Continue polling and avoid duplicate orders.
UNKNOWN
The delivery outcome is not yet confirmed. This is not a failure; funds stay held. Continue polling the existing order without creating a replacement.
REVIEW
Delivery or settlement, including partial delivery, needs reconciliation. Funds remain held. Contact support with order.id and client_order_id; do not assume a full delivery or an automatic refund.
CONFIRMED
Delivery is confirmed and the final charge is settled within your cap. Unused authorization is released to available balance. You may now proceed with your own transaction.
FAILED
The order ended without a charge or confirmed delivery. Its authorization is released. Check the result before deliberately requesting a new quote and business order.
RESOLVED
A reviewed order has been reconciled and settled. Read charged_sun, delivered_amount and the ledger for the outcome; this status does not by itself mean full delivery.
Stop routine polling at CONFIRMED, FAILED or RESOLVED. Handle REVIEW through support and reconciliation. An HTTP 202, a timeout or a zero charged_sun on a pending order does not prove delivery or final failure.
6. Create TRX top-up instructions
POST /deposits accepts amount_sun between 1,000,000 and 1,000,000,000,000 (1 to 1,000,000 TRX), and returns HTTP 201 with deposit. This only creates payment instructions: it neither transfers funds nor buys Energy.
Use only the address and exact amount_sun returned by the current deposit, including every decimal place. The amount may be slightly higher than requested to identify the payment. Send native TRX on TRON before expires_at; do not send USDT or another network's assets. New instructions are valid for 30 minutes. Do not reuse paid or expired instructions or round the amount.
GET /deposits returns deposits with id, amount_sun, address, status, tx_id, created_at, expires_at and can_cancel. PENDING means awaiting confirmation, PAID means credited, EXPIRED means the payment window has closed, and CANCELED means canceled. A wallet broadcast alone is not confirmation. Contact support with the deposit ID and transaction ID if a payment needs investigation.
Each deposit list record includes checkout_id: null identifies a balance top-up, while a checkout ID identifies a single-order payment. Use this field to distinguish payment types even when the corresponding checkout is outside the recent checkout history.
Payment status and cancellation
RPC subscription payments, TRX balance top-ups and single-order Energy payments share one pending-payment slot per account. Before creating a payment, read GET /payment-status. Continue only when pending_payment is null and payment_creation_available is true. The server rechecks every write; another session or a temporary restriction can still prevent creation.
pending_payment is null or an object with id, kind, expires_at and can_cancel. kind is RPC, TOPUP or CHECKOUT. An existing object means you must handle that payment first, even if payment_creation_available is true. Manage RPC payments on the billing page; manage TOPUP and CHECKOUT payments in Energy payment history. can_cancel is a current capability hint, not permission to skip server validation.
POST /deposits/{id}/cancel accepts exactly confirm_unpaid: true and returns HTTP 200 with deposit. Only your own valid, unpaid TRX payment can be canceled. Repeating a completed cancellation returns its current deposit without consuming another cancellation. Cancellation has cooldowns and usage limits; HTTP 429 means wait for Retry-After rather than retrying in a loop.
Do not cancel if you have already transferred funds. Cancellation does not reverse an on-chain transfer or trigger a refund. Transfers made within the original payment window are still checked after cancellation; a matching confirmed TRX payment is credited to available balance. A canceled checkout will not automatically purchase Energy, including when its deposit later becomes PAID. Check order_id and the ledger before making another purchase.
Status
Meaning and action
PENDING
Awaiting payment within its validity window. Use the current instructions; cancel only if no transfer has been sent and can_cancel is true.
CANCELED
Stop sending funds to this payment request. Cancellation is final; check for any credited transfer before deliberately starting a new payment.
PAID
Funds are credited. For a checkout, inspect order_id separately; this status alone never confirms Energy delivery.
EXPIRED
Do not send a new transfer using these instructions. An eligible transfer made during the original window may still confirm later.
GET /ledger returns entries with id, kind, amount_sun, reference_id, created_at, available_delta_sun and held_delta_sun. The delta fields show movement in available and held balances; amount_sun is not always spending. Match reference_id to the corresponding deposit or order.
Kind
Balance movement
DEPOSIT
Confirmed top-up: available balance increases.
HOLD
Order authorization: available balance decreases and held balance increases; this is not a settled charge.
CAPTURE
Final charge: held balance decreases. The negative amount_sun represents settled spending.
RELEASE
Unused authorization: held balance decreases and available balance increases.
GET /ledger returns entries and next_cursor; GET /deposits returns deposits and next_cursor. Both accept limit (default 20, maximum 100), cursor, and RFC3339 from/to filters. Keep filters unchanged and pass next_cursor as cursor until it is empty. GET /deposits/{deposit_id} returns one of your payment requests.
GET /orders returns up to 100 recent orders. GET /keys returns up to 100 key metadata records, never the original secret. Create and revoke keys in the customer dashboard; retain order IDs for individual queries or use paged Reconciliation for older orders.
Reconciliation and request history
Detailed history is available for 90 days. Unfinished and review orders are kept until resolved. Lifetime totals remain unchanged.
Open Reconciliation to compare requested and delivered Energy, the on-chain transaction, the final charge and released funds for each order. A hold reserves your spending limit; it is not a second charge. Balance movements show how available and held balances changed.
GET /reconciliation returns items with order and ledger. GET /reconciliation/{order_id} adds recent linked api_logs. GET /activity lists your Energy API requests with request_id, API key ID, source, method, path, HTTP status, duration and related order or deposit ID. Filter activity by deposit_id to trace a payment request. X-Request-ID identifies the recorded request for support.
Lists return items and next_cursor. Reuse next_cursor as cursor with the same filters until it is empty. limit accepts 1 to 100. Both lists accept order_id and RFC3339 from/to timestamps; reconciliation accepts an order status, while activity accepts request_id, key_id, source (api or portal) and an HTTP status. Filters use exact matches. All results belong to your account.
Energy API errors use a JSON error string. Unknown JSON fields, extra JSON objects and malformed bodies are rejected. Use the documented method and exact field types; the request body limit is 32 KiB.
{"error":"insufficient TRX balance"}
HTTP status
Cause and response
400
Invalid JSON, field type, product, receiver format or identifier. Correct the request before retrying.
401
Missing, invalid or revoked Energy API key. Verify the Energy key and base URL rather than using an RPC key.
403
The account is disabled, the source IP is not allowed, or key/IP management was attempted through the public API. Manage Energy API keys and allowed IPs in the dashboard.
404
The order does not exist in this account, or the API path is wrong. Check the saved order.id, credentials and URL.
405
Unsupported resource operation or HTTP method. Use the endpoint and method listed in this guide.
409
A pending payment, a conflicting business ID, an invalid quote or authorization, or a payment that cannot be canceled. Preserve the existing payment and inspect payment-status or the saved order. Do not automatically create a replacement payment or business ID.
422
The receiver is not eligible for delegated resources, or TRON account verification is temporarily unavailable. Check that it is an activated eligible wallet and retry verification later if needed.
429
A request, payment-creation or cancellation limit was reached. Honor Retry-After, back off with jitter and reduce polling. Do not bypass the restriction with another payment type or automatically repeat a cancellation.
503
Purchases, supply, deposits or the service are temporarily unavailable. Back off. If an order POST may have reached the server, preserve its client_order_id and retry the same request or query the saved order.
9. Before production
Verify account and catalog with read-only requests first. Validate the actual sender address, current quote, available balance and approved maximum before creating an order.
Persist your client_order_id and the exact order request before sending it. Store the returned order.id, final state, charge and delivery evidence for reconciliation.
Test timeout recovery, idempotent retries, insufficient balance, expired quotes, rate limits and REVIEW handling. Do not treat a pending authorization as spending or a confirmed Energy order as a broadcast transaction.
This API supports individual one-hour Energy orders, polling and cancellation of eligible unpaid TRX payments. Energy delivery orders cannot be canceled through this endpoint. Batch ordering, automatic renewal, Webhooks and bandwidth rental are not available. Your application remains responsible for transaction signing and broadcasting.
RPC authentication
For RPC access, copy the API Base URL and API Key from the authenticated customer console. Requests are accepted when the RPC API Key is valid, the client is active and the RPC subscription has not expired. Keep the API Key in backend secrets or environment variables only.
Do not expose keys in browsers Calls should come from your backend, queue worker, payment service or wallet service. Browser code and mobile apps can leak API keys.
Security boundary
nodevera forwards signed transaction payloads and chain query requests. Private key management, transaction signing, business risk controls and fund policies stay inside your own backend. Never send private keys, seed phrases or unsigned custody instructions to any nodevera endpoint.
Base URL
Replace <api_base_url> in examples with the private API domain displayed in your API Access page.
nodevera forwards chain requests to configured upstream RPC providers and adds customer-level access control, usage metering and upstream failover behavior. Request bodies are JSON for the common payment workflows; signed transaction payloads must be created by your own system before broadcast.
Area
Path
Method
Authentication
Usage count
Notes
Gateway health
/healthz
GET
None
No
Returns upstream pool metadata and basic service status.
Account status
/api/me
GET
API Key
No chain usage
Returns plan, quota, usage and docs URLs.
TRON
/tron/<tron_http_path>
POST or upstream-compatible method
API Key
Yes
Forwards TronGrid-compatible HTTP API paths.
Ethereum
/eth
POST
API Key
Yes
Standard Ethereum JSON-RPC over HTTP.
Solana
/solana
POST
API Key
Yes
Standard Solana JSON-RPC over HTTP.
Customer account API
Account endpoints are useful for deployment checks and usage dashboards. They require the same API Key as chain endpoints.
TRON uses TronGrid-compatible paths. Append the TronGrid path after /tron. The gateway injects the configured upstream TRON API key when needed, while your customer API Key remains separate.
Broadcast boundary The gateway broadcasts signed transaction JSON. It does not sign transactions and must never receive private keys.
Ethereum JSON-RPC
Ethereum uses standard JSON-RPC. Send all Ethereum requests to /eth. Standard JSON-RPC request IDs are preserved. Batch requests are forwarded when the upstream provider supports them.
Solana uses standard JSON-RPC. Send all Solana requests to /solana. For transaction lookup, use jsonParsed encoding when your application needs SPL Token transfer details.
Any HTTP client works. Keep credentials in backend configuration and retry only idempotent read requests unless your business logic explicitly permits retry.
Read requestsRetry temporary network failures with short backoff, but keep total timeout bounded.
Broadcast requestsDo not retry blindly. Query by transaction hash or signature first when the previous broadcast result is unknown.
Duplicate txidsYour business system should treat txid or signature processing as idempotent.
Usage and quota
Every TRON, Ethereum and Solana request is counted per customer. Account endpoints do not consume chain quota. Exceeding the monthly plan quota returns 429.
Monthly quotaUsage resets by calendar month as tracked by the gateway.
API keyThe same customer API Key authenticates TRON, Ethereum, Solana and account endpoints.
Upstream limitsWhen an upstream provider rate-limits a route, the gateway can try another configured upstream before returning an error.
Common errors
400Request body is invalid, unreadable or exceeds the configured gateway body limit.
401API key is missing, invalid or sent through the wrong header.
403API key is disabled or the subscription has expired.
405Ethereum and Solana JSON-RPC require POST.
408Request was canceled while waiting for upstream quota.
429Monthly request quota is exhausted or an upstream route is throttled.
502All configured upstream RPC providers failed or returned retryable errors.
Production checklist
Call nodevera from backend services, queue workers or payment services instead of browser code.
Store API Keys in secret managers or environment variables, not source code.
Use HTTPS API Base URL in production and set HTTP client timeouts.
Build idempotency around txid or signature processing to avoid double crediting.
Do not retry broadcast blindly. Confirm whether the signed transaction already reached the chain.
Track 401, 403, 429 and 502 separately in your monitoring.
Review traffic growth before increasing concurrency, batch size or polling frequency.