Activator — address activation
Activate a TRON address that has never been used on-chain. A brand-new address has no account record, so it cannot receive delegated energy or bandwidth until it is activated. This endpoint creates the account for you and returns the activation transaction hash.
Activation is a one-time operation per address. If the address is already active, the endpoint tells you so and charges nothing.
Endpoint base URL
https://netts.io/apiv2/activatorRequest Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| X-API-KEY | Yes | Your API key from the Netts dashboard |
| X-Real-IP | Yes | IP address from your whitelist |
Your user_id is derived from the API key — you never pass it.
Activate — POST /apiv2/activator
Request body
{ "targetAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE" }| Field | Type | Required | Description |
|---|---|---|---|
targetAddress | string | Yes | TRON address to activate. Must match ^T[A-Za-z0-9]{33}$ (34 chars, starts with T). |
Response — activated (200, code 10000)
{
"detail": {
"code": 10000,
"msg": "Address activated successfully, 1.1 TRX deducted",
"data": {
"orderId": "A123456",
"targetAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"activation_cost": 1.1,
"user_balance_before": 500.00,
"user_balance_after": 498.90,
"hash": "0000000000000000000000000000000000000000000000000000000000000000"
}
}
}| Field | Type | Description |
|---|---|---|
orderId | string | Activation order number, always A + digits. Use it for reconciliation. |
targetAddress | string | The address that was activated |
activation_cost | float | Amount deducted from your balance, in TRX |
user_balance_before | float | Balance before the deduction |
user_balance_after | float | Balance after the deduction |
hash | string | Activation transaction hash. Verify it on any TRON explorer. |
Response — already active (200, code 2001)
Returned when the address already exists on-chain. Nothing is charged.
{
"detail": {
"code": 2001,
"msg": "Address is already activated",
"data": {
"targetAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"status": "already_activated",
"user_balance": 500.00,
"activation_cost": 0,
"activation_required": false
}
}
}Check code before assuming a charge occurred: 10000 means you paid, 2001 means you did not.
Example
curl -X POST https://netts.io/apiv2/activator \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key" \
-H "X-Real-IP: your_whitelisted_ip" \
-d '{"targetAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"}'Price
| Item | Amount |
|---|---|
| Activation | 1.1 TRX |
| Address already active | 0 |
The amount is fixed and does not depend on the address or on network conditions. It is deducted from your Netts balance at the moment the activation succeeds — never before. A failed activation costs nothing.
Your balance must cover the cost, otherwise the request is rejected with 403 (1004) and no order is created.
When you need this
- Before renting energy or bandwidth for a fresh address. Delegation to a non-existent account fails. Activate first, then order.
- Before the first incoming transfer to an address you generated yourself.
You do not need to call this endpoint for an address that has ever received TRX or a token — it is already active, and the call would simply return 2001.
Ordering energy for a new address
The 1-hour energy endpoint activates a non-active receiver on its own as part of the order, and the activation cost is added to that order. Call the activator explicitly when you want the address active before any rental — for example to top up bandwidth first, which does require an active account.
Timing
Activation is a real on-chain transaction. The endpoint returns after it is broadcast and the activation record is written, typically within a few seconds.
The address becomes usable only once the transaction is included in a block — up to ~3 seconds after the response, since that is the TRON block interval. If your next step depends on the address being active (ordering bandwidth, for instance), confirm the state on-chain by the returned hash instead of calling immediately.
Error Code Reference
| Code | Description | HTTP Status |
|---|---|---|
10000 | Address activated, balance deducted | 200 |
2001 | Address already activated, nothing charged | 200 |
-1 | Invalid API key / IP not in whitelist | 401 |
1004 | Insufficient funds — the message states what is required and what you have | 403 |
- | Invalid targetAddress format (must be 34 chars, start with T) | 422 |
5003 | Activation failed or service temporarily unavailable — retry later | 503 |
5000 | Internal server error | 500 |
A 503 means no charge occurred and no address was activated: the request may be retried safely.
Rate Limits
Limited per source IP:
| Period | Limit |
|---|---|
| 1 second | 5 requests |
| 1 minute | 60 requests |
Rate Limit Exceeded (429)
{ "message": "API rate limit exceeded" }Postpaid Accounts
Accounts on postpaid billing use the same endpoint, headers and request body. The difference is how the activation is paid:
- Nothing is deducted from your deposit. Each successful activation is added to your account balance due in the settlement currency agreed in your contract. You pay it by invoice, according to your agreement.
- Your account has a credit limit. While the amount due is within the limit, activations are accepted even with a zero deposit.
- Only a completed activation is billed. An address that is already active (
2001) and a failed activation cost nothing.
Postpaid billing is enabled by Netts for an account on request. Every response tells you how the activation is paid: paymentMode is postpaid or prepaid.
Additional request fields
| Field | Type | Required | Description |
|---|---|---|---|
test | boolean | No | true — calculate the price and check the address only. Nothing is activated or billed |
freezePrice | boolean | No | true — fix the price under your contract for 60 seconds. Nothing is activated or billed |
quoteId | string | No | Activate at the price of a quote issued by freezePrice for the same address |
priceCurrency | string | No | TRX (default) or the currency of your contract, as in settlement.asset. For postpaid accounts the amounts in your contract currency are always included |
quoteId cannot be combined with test or freezePrice. Any other field in the request body is rejected.
Price check (test: true)
{ "targetAddress": "TSMARToKjQGxroMnPKK6o6d4876VkQmHEH", "test": true }{
"detail": {
"code": 10010,
"msg": "Test calculation",
"data": {
"amount": 1,
"unitPriceSun": null,
"discount": null,
"energyTRX": "0.000000",
"activationTRX": "1.100000",
"wouldCostTRX": "1.100000",
"paidTRX": 0,
"paymentMode": "postpaid",
"activationCheck": "inactive",
"alt": {"USDC": {"energy": "0.000000", "activation": "0.364333", "total": "0.364333"}},
"fxAt": "2026-10-19T07:17:33.475335+00:00",
"targetAddress": "TSMARToKjQGxroMnPKK6o6d4876VkQmHEH"
}
}
}activationCheck: inactive — the address needs activation and will be billed; active — the address is already active, wouldCostTRX is 0; unknown — could not be checked right now.
alt.<currency> — the same amounts in the currency of your contract. fxAt — the time of the exchange rate used.
Fixed-price quote (freezePrice: true)
- Send the request with
"freezePrice": true. The response has code10011(Quote issued), the same fields as a price check, plusquoteIdandexpiresAt. - Within 60 seconds send the request with
"quoteId": "<quoteId>"and the sametargetAddress. - The activation is billed at the quoted price — the price under your contract at the moment of the quote.
A quote can be used once. An expired or already used quote is rejected and nothing is activated.
Successful activation
{
"detail": {
"code": 10000,
"msg": "Address activated successfully, 1.1 TRX service cost, postpaid",
"data": {
"orderId": "A564125",
"targetAddress": "TSMARToKjQGxroMnPKK6o6d4876VkQmHEH",
"activation_cost": 1.1,
"user_balance_before": 0.0,
"user_balance_after": 0.0,
"hash": "bd9ea6ef92ce4ba6553af3930a03abe874cdfcc2399b7fdd9abdb11570de2920",
"paymentMode": "postpaid",
"activationTRX": "1.100000",
"totalTRX": "1.100000"
}
}
}| Field | Description |
|---|---|
activation_cost | Cost of the activation in TRX. For postpaid accounts it is not deducted from the deposit |
user_balance_before / user_balance_after | Your deposit — unchanged for postpaid accounts |
paymentMode | postpaid |
activationTRX / totalTRX | Exact amounts, 6 decimal places |
quoteId, alt | Present when the activation was placed with a quote |
Credit limit reached (402)
{
"detail": {
"code": 1004,
"msg": "Postpaid credit limit reached.",
"paymentMode": "postpaid",
"reason": "limit_reached"
}
}Nothing is activated and nothing is billed. New activations are accepted again once your payment is registered or your limit is increased.
Postpaid error codes
| Code | HTTP | Description |
|---|---|---|
10010 | 200 | Price check result (test) |
10011 | 200 | Quote issued (freezePrice) |
1004 | 402 | Postpaid credit limit reached |
4100 | 400 | Invalid request |
4101 | 400 | Unsupported priceCurrency |
4102 | 400 | quoteId combined with test or freezePrice |
4103 | 409 | Quote already used |
4104 | 409 | Quote expired |
4106 | 404 | Quote not found |
4107 | 409 | Request parameters differ from the quote |
4108 | 400 | Invalid quoteId format |
4109 | 422 | Not available for sub-accounts |
5032 | 503 | Price temporarily unavailable |
5033 | 503 | Exchange rate temporarily unavailable |
5034 | 503 | Billing temporarily unavailable — the activation was not accepted |
5036 | 503 | Credit check temporarily unavailable — retry later |
For all 4xx and 503 responses above nothing is activated and nothing is billed.
Notes
- Idempotency is on you. The endpoint has no idempotency key. Repeating a request for an address that is already active is safe and free (
2001), but two simultaneous requests for the same brand-new address may both proceed. Serialise activation per address on your side. orderIdformat isA+ digits and is unique across activations.- No webhook is sent for activation today — the response and the
hashare the confirmation. Webhooks currently cover confirmed energy delegations only, see Webhooks.