Skip to content
Translated page. The English version is the source of truth.

POST /apiv2/order5m ​

Crie um pedido de aluguel de energy de 5 minutos por meio dos pools de energy internos da Netts.

URL do endpoint ​

POST https://netts.io/apiv2/order5m

Cabeçalhos da requisição ​

HeaderRequiredDescription
Content-TypeSimapplication/json
X-API-KEYSimSua chave de API do painel da Netts
X-Real-IPSimEndereço IP da sua whitelist

Corpo da requisição ​

json
{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}

Parâmetros da requisição ​

ParameterTypeRequiredDescription
amountintegerSimQuantidade de energy a ser alugada (mínimo: 61.000, máximo: 650.000)
receiveAddressstringSimEndereço TRON que receberá a energy (formato TRC-20)

Limites de Energy

O endpoint de 5 minutos aceita quantidades de energy entre 61.000 e 650.000 unidades por pedido. Solicitações fora dessa faixa serão rejeitadas com HTTP 400.

Informações do Provedor ​

Os pedidos de energy de 5 minutos são atendidos exclusivamente por meio dos pools de energy internos da Netts. Diferente do endpoint de 1 hora, provedores externos não são utilizados.

Disponibilidade e Estratégia de Repetição

Como as delegações vêm apenas de pools internos, é possível haver indisponibilidade temporária durante períodos de alta demanda. Se você receber um erro 503, repita a solicitação após um breve intervalo ou utilize o endpoint de 1 hora, que possui acesso a múltiplos provedores externos.

Exemplos ​

cURL ​

bash
curl -X POST https://netts.io/apiv2/order5m \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip" \
  -d '{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
  }'

Python ​

python
import requests

url = "https://netts.io/apiv2/order5m"
headers = {
    "Content-Type": "application/json",
    "X-API-KEY": "your_api_key",
    "X-Real-IP": "your_whitelisted_ip"
}

payload = {
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}

response = requests.post(url, headers=headers, json=payload)
data = response.json()

if response.status_code == 200:
    detail = data.get('detail', {})
    order_data = detail.get('data', {})
    print(f"Order ID: {order_data.get('orderId')}")
    print(f"Transaction Hash: {order_data.get('hash')}")
    print(f"Energy Delivered: {order_data.get('energy')}")
    print(f"Cost: {order_data.get('paidTRX')} TRX")
    print(f"Delegate Address: {order_data.get('delegateAddress')}")
elif response.status_code == 503:
    # Pool temporarily unavailable - retry or fallback to 1h
    print("Pool busy, retrying in 2 seconds...")
else:
    error_detail = data.get('detail', data)
    print(f"Error Code: {error_detail.get('code', 'N/A')}")
    print(f"Error Message: {error_detail.get('msg', error_detail)}")

Resposta ​

Resposta de Sucesso (200 OK) ​

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.430 TRX deducted",
        "data": {
            "orderId": "5Mb4ee11ef86",
            "paidTRX": 1.43,
            "hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
            "delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
            "energy": 65050
        }
    }
}

Sucesso com Ativação de Endereço (200 OK) ​

Quando o endereço de recebimento ainda não foi ativado na rede TRON, a Netts o ativa automaticamente. O custo de ativação é adicionado ao total:

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.430 TRX for energy + 1.100 TRX for address activation",
        "data": {
            "orderId": "5Mb4ee11ef86",
            "paidTRX": 2.53,
            "hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
            "delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
            "energy": 65050,
            "activationHash": "bab38070a64b237acc9110ecf5135acc4d6e8f0a2b4c6d8e0f2a4b6c8d0e2f4a"
        }
    }
}

Campos da Resposta ​

FieldTypeDescription
detail.codeintegerSempre 10000 para pedidos bem-sucedidos
detail.msgstringMensagem de sucesso com o valor debitado
detail.data.orderIdstringID de pedido unificado (formato: 5M{id})
detail.data.paidTRXnumberCusto total em TRX (inclui taxa de ativação, se aplicável)
detail.data.hashstringHash da transação de delegação
detail.data.delegateAddressstringEndereço do pool que delegou a energy
detail.data.energyintegerQuantidade de energy + margem adicional (normalmente +50)
detail.data.activationHashstringPresente apenas se a ativação de endereço foi realizada

Respostas de erro ​

Quantidade de Energy Inválida (400) ​

json
{
    "code": 1003,
    "msg": "Energy amount must be between 61000 and 650000. Requested: 50000"
}

Erro de Autenticação (401) ​

json
{
    "detail": "Invalid API key or IP not in whitelist"
}

Saldo Insuficiente (403) ​

json
{
    "code": 1004,
    "msg": "Insufficient funds. Required: 1.43 TRX, Available: 0.50 TRX"
}

Serviço Indisponível (503) ​

json
{
    "code": 5003,
    "msg": "Service temporarily unavailable. Energy delegation failed after retries."
}

Tratamento de Erros 503

Uma resposta 503 indica que os pools internos estão temporariamente em capacidade máxima. Estratégia recomendada:

  1. Aguarde de 2 a 3 segundos e repita o pedido de 5 minutos
  2. Se continuar indisponível, utilize o endpoint de 1 hora, que utiliza múltiplos provedores

Erro Interno do Servidor (500) ​

json
{
    "code": 5000,
    "msg": "Internal server error occurred"
}

Referência de Códigos de Erro ​

CodeDescriptionHTTP Status
10000Sucesso200
10000Sucesso (resposta em cache)208
-Solicitação duplicada ainda em processamento409
1003Quantidade de energy fora da faixa400
1004Saldo insuficiente403
1005Endereço pagador do usuário não configurado400
5000Erro interno do servidor500
5003Serviço de energy indisponível503

Limites de taxa ​

Os seguintes limites de taxa se aplicam a este endpoint (por endereço IP):

PeriodLimitDescription
1 segundo50 solicitaçõesMáximo de 50 solicitações por segundo

Headers de Rate Limit ​

http
RateLimit-Limit: 50
RateLimit-Remaining: 49
RateLimit-Reset: 1
X-RateLimit-Limit-Second: 50
X-RateLimit-Remaining-Second: 49

Limite de Taxa Excedido (429) ​

json
{
    "message": "API rate limit exceeded"
}

Idempotência ​

A API oferece suporte à idempotência para evitar o processamento de pedidos duplicados. Quando você envia várias solicitações idênticas, o sistema garante que o pedido seja processado apenas uma vez.

Como Funciona a Idempotência ​

A unicidade da solicitação é determinada por uma combinação de:

  • Timestamp da solicitação (janela de 2 segundos)
  • Quantidade de energy
  • Endereço de recebimento
  • Chave de API

Cada solicitação recebe uma janela de unicidade de 2 segundos. Solicitações com parâmetros idênticos dentro dessa janela são tratadas como duplicadas.

Fornecendo Sua Própria Chave ​

Você pode assumir o controle da idempotência enviando o cabeçalho X-Idempotency-Key. Quando ele está presente, esse valor define isoladamente se uma solicitação é uma repetição, e a combinação automática acima não é utilizada. Quando ele estiver ausente, nada muda — o servidor deriva a chave para você.

As regras são as mesmas de /apiv2/order1h:

HeaderX-Idempotency-Key
FormatExatamente 64 caracteres hexadecimais minúsculos — um digest SHA-256
Lifetime24 horas a partir da primeira solicitação contendo essa chave
ScopeSua conta. O mesmo valor enviado por uma conta diferente nunca retorna o seu resultado

Uma chave com qualquer outro formato — um UUID com traços, base64, hexadecimal maiúsculo — é rejeitada com 400 antes que o pedido seja realizado e antes de qualquer cobrança:

json
{
    "detail": "Invalid idempotency key format. Must be 64-character hexadecimal string."
}

Derive a chave a partir da sua chave de API para que ela seja única para a sua conta e reproduzível em uma nova tentativa — o exemplo detalhado está na página de 1 hora. Inclua o período de aluguel na mensagem que você calcula o hash: alugar para o mesmo endereço por 5 minutos e por 1 hora são pedidos diferentes, e reutilizar a mesma chave para ambos retorna a resposta do primeiro pedido para a segunda solicitação.

Fazendo Dois Pedidos Idênticos ​

A mesma armadilha do endpoint de uma hora, com uma janela maior. Dois pedidos idênticos — a mesma quantidade para o mesmo endereço — são indistinguíveis de uma repetição, e apenas o momento de chegada os separa.

Sem uma chave própria:

Intervalo entre as duas solicitaçõesO que acontece
Dentro da mesma janela de 2 segundosA segunda solicitação é considerada uma repetição. Ela não é executada: você recebe 208 e a resposta do primeiro pedido. Nada é cobrado por ela
Com mais de dois segundos de diferençaDuas chaves diferentes — ambos os pedidos são realizados e ambos são cobrados

Portanto, aguarde mais de dois segundos entre dois pedidos idênticos e verifique o código de status: 208 significa que o pedido que você acabou de enviar não foi realizado.

Fazer uma pausa é apenas um contorno, não uma solução definitiva — ela também separa solicitações que você nunca teve a intenção de repetir, como uma nova tentativa após um timeout ou uma mensagem reenviada pela sua fila de mensagens, e cada uma delas se torna um pedido separado com uma cobrança separada. Enviar sua própria chave é o que realmente resolve isso: um novo nonce para um novo pedido, o nonce da primeira tentativa para uma repetição. O raciocínio completo está na página de 1 hora.

Códigos de Status HTTP para Solicitações Duplicadas ​

Status CodeNameDescription
200OKPedido processado com sucesso (primeira solicitação)
208Already ReportedO pedido já foi processado, retornando a resposta em cache
409ConflictA solicitação está sendo processada no momento, não repita

Solicitação Duplicada - Já Processada (208) ​

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.430 TRX deducted",
        "data": {
            "hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
            "energy": 65050,
            "orderId": "5Mb4ee11ef86",
            "paidTRX": 1.43,
            "delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq"
        }
    },
    "idempotency": {
        "status": "completed",
        "cached": true,
        "original_created_at": "2026-03-21T08:53:52.498000"
    }
}

Solicitação Duplicada - Ainda em Processamento (409) ​

json
{
    "success": false,
    "error": "duplicate_request_processing",
    "message": "This request is currently being processed. Please wait and do not retry.",
    "retry_after_seconds": 3
}

Melhores Práticas ​

  • Não envie solicitações paralelas com os mesmos parâmetros — aguarde cada resposta
  • Trate respostas 409 aguardando, em vez de tentar novamente de imediato
  • Verifique o campo idempotency.cached para identificar respostas em cache

Comparação: Pedidos de 5 Minutos vs 1 Hora ​

Feature5-Minute Order1-Hour Order
Endpoint/apiv2/order5m/apiv2/order1h
Duração5 minutos1 hora
Faixa de energy61.000 - 650.00061.000 - 3.000.000
ProvedoresApenas pools internos da NettsPools internos + provedores externos
PreçoMais baixo (tarifa de 5 minutos)Tarifa horária padrão
DisponibilidadePode ser limitada durante picosAlta (fallback com múltiplos provedores)
Melhor paraTransações pequenas e frequentesEntregas grandes ou garantidas

Contas Pós-pagas ​

Contas com faturamento pós-pago utilizam o mesmo endpoint, URL, cabeçalhos e corpo de solicitação que os demais usuários. A diferença reside na forma como o pedido é pago:

  • Nada é debitado do seu depósito. Cada pedido bem-sucedido é adicionado ao saldo devedor da sua conta na moeda de liquidação acordada em seu contrato. O pagamento é feito por fatura, de acordo com o seu contrato.
  • Sua conta possui um limite de crédito. Enquanto o valor devido estiver dentro do limite, os pedidos serão aceitos mesmo com depósito zerado.
  • Apenas serviços entregues são faturados. Um pedido rejeitado ou não executado não gera cobrança.
  • Se o endereço de recebimento precisar ser ativado, a ativação fará parte do mesmo pedido e será faturada como uma cobrança separada.

O faturamento pós-pago é ativado pela Netts para uma conta mediante solicitação. Todas as respostas informam como o pedido é pago: paymentMode será postpaid ou prepaid.

Campos adicionais de solicitação ​

ParameterTypeRequiredDescription
testbooleanNãotrue — apenas calcula o preço. Nada é pedido, entregue ou faturado
freezePricebooleanNãotrue — fixa o preço sob o seu contrato por 60 segundos. Nada é pedido ou faturado
quoteIdstringNãoFaz o pedido com base no preço de uma cotação emitida por freezePrice
priceCurrencystringNãoTRX (padrão) ou a moeda do seu contrato, conforme em settlement.asset. Para contas pós-pagas, os valores na moeda do seu contrato sempre estão incluídos

quoteId não pode ser combinado com test ou freezePrice. Qualquer outro campo no corpo da solicitação será rejeitado.

Consulta de preço (test: true) ​

json
{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
    "test": true
}
json
{
    "detail": {
        "code": 10010,
        "msg": "Test calculation",
        "data": {
            "amount": 65000,
            "unitPriceSun": "19",
            "discount": null,
            "energyTRX": "1.235000",
            "activationTRX": "1.100000",
            "wouldCostTRX": "2.335000",
            "paidTRX": 0,
            "paymentMode": "postpaid",
            "activationCheck": "inactive",
            "alt": {"USDC": {"energy": "0.409088", "activation": "0.364370", "total": "0.773458"}},
            "fxAt": "2026-10-19T07:16:12.548894+00:00"
        }
    }
}
FieldDescription
unitPriceSunPreço por unidade de energy em SUN, incluindo seu desconto pessoal se você tiver um
discountSeu desconto pessoal (type, value) ou null
energyTRX / activationTRX / wouldCostTRXEnergy, ativação (caso o endereço precise) e total, em TRX
activationCheckinactive — o endereço será ativado e faturado; active — sem ativação; unknown — não foi possível verificar no momento
alt.<currency>Os mesmos valores na moeda do seu contrato
fxAtMomento da taxa de câmbio utilizada para os valores na moeda do seu contrato

Cotação de preço fixo (freezePrice: true) ​

Utilize uma cotação para fixar o preço sob o seu contrato antes de fazer o pedido.

  1. Envie o pedido com "freezePrice": true. A resposta conterá o código 10011 (Quote issued), os mesmos campos de uma consulta de preço, além de quoteId e expiresAt.
  2. Em até 60 segundos, envie o pedido com "quoteId": "<quoteId>" e os mesmos amount e receiveAddress.
  3. O pedido é faturado pelo preço cotado — o preço sob o seu contrato no momento da cotação —, mesmo que o preço mude nesse intervalo.

Uma cotação pode ser usada uma única vez e apenas para o mesmo produto: uma cotação de 5 minutos não pode pagar por um pedido de 1 hora. Uma cotação expirada ou já utilizada será rejeitada e nada será pedido.

json
{
    "amount": 65000,
    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
    "quoteId": "q_4f540f16a2c94b7f8e3d1a6b5c0e9d72"
}

Pedido bem-sucedido ​

json
{
    "detail": {
        "code": 10000,
        "msg": "Successful, 1.24 TRX service cost, postpaid",
        "data": {
            "orderId": "5M5f557d2fba",
            "paidTRX": 1.235,
            "hash": "c1fafd8ef7fb6b7fb8a729120756b26e611f401275cb4f7a04fe2bafd75b13da",
            "delegateAddress": "TR3qZsdmkFcvP729Md3PwXzktFQkMoUzjg",
            "energy": 65000,
            "paymentMode": "postpaid",
            "energyTRX": "1.235000",
            "activationTRX": "0.000000",
            "totalTRX": "1.235000"
        }
    }
}
FieldDescription
paidTRXCusto do serviço em TRX. Para contas pós-pagas, ele não é deduzido do depósito
paymentModepostpaid
energyTRX / activationTRX / totalTRXValores exatos, com 6 casas decimais
quoteId, altPresentes quando o pedido foi feito com uma cotação: o ID da cotação e os valores cotados

Todos os outros campos são os mesmos dos pedidos pré-pagos.

Limite de crédito atingido (402) ​

json
{
    "detail": {
        "code": 1004,
        "msg": "Postpaid credit limit reached.",
        "paymentMode": "postpaid",
        "reason": "limit_reached"
    }
}

O pedido não é executado e nada é faturado. Novos pedidos serão aceitos novamente assim que o seu pagamento for registrado ou o seu limite for aumentado.

Códigos de erro para pós-pago ​

CodeHTTPDescription
10010200Resultado da consulta de preço (test)
10011200Cotação emitida (freezePrice)
1004402Limite de crédito pós-pago atingido
4100400Solicitação inválida
4101400priceCurrency não suportada
4102400quoteId combinado com test ou freezePrice
4103409Cotação já utilizada
4104409Cotação expirada
4105409Chave de idempotência já utilizada para uma solicitação diferente
4106404Cotação não encontrada
4107409Parâmetros do pedido diferem da cotação
4108400Formato de quoteId inválido
4109422Não disponível para subcontas
5032503Preço temporariamente indisponível
5033503Taxa de câmbio temporariamente indisponível
5034503Faturamento temporariamente indisponível — o pedido não foi aceito
5036503Verificação de crédito temporariamente indisponível — tente novamente mais tarde

Para todas as respostas 4xx e 503 acima, nada é solicitado e nada é faturado.

Observações ​

  • A energy é entregue instantaneamente após a realização do pedido com sucesso (normalmente em 0,5 a 2 segundos)
  • Timeout de resposta da API: Máximo de 10 segundos (inclui tentativas internas de repetição)
  • Ativação de endereço: Se o endereço de recebimento não estiver ativado, a Netts o ativa pelo preço de custo. O custo de ativação é cobrado apenas uma vez por endereço
  • Duração: Fixa em 5 minutos (300 segundos)
  • Quantidade mínima de energy: 61.000 unidades
  • Quantidade máxima de energy: 650.000 unidades por pedido
  • Margem de energy: +50 unidades adicionadas automaticamente (gratuitamente)
  • Formato do ID do pedido: 5M{id} para rastreamento unificado
  • Preços: Dinâmicos com base na hora do dia por meio da Pricing API
  • Rate limiting: 50 solicitações por segundo por endereço IP
  • Apenas pools internos: Se os pools estiverem com capacidade esgotada, tente novamente após um breve intervalo ou utilize o endpoint de 1 hora como alternativa