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

Orchestrator — pedidos em lote em uma única chamada ​

Envie até 100 endereços em uma única requisição e deixe o Netts realizar toda a sequência para cada um: ativar o endereço se necessário, recarregar sua Bandwidth se estiver insuficiente e, em seguida, alugar a Energy — dividindo grandes quantias em frações automaticamente.

Você recebe um 202 Accepted imediato com uma chave de rastreamento e nunca fica esperando na conexão. O progresso é então consultado a partir do endpoint de status.

Por que usar ​

Solicitar Energy para um novo endereço normalmente exige três chamadas separadas, na ordem correta, com sua própria lógica de novas tentativas entre elas. O orchestrator reduz isso a uma única requisição e executa a sequência por endereço:

probe → activation (if the address is not active) → bandwidth (if free < 400) → energy

Uma falha na ativação ou na Bandwidth não interrompe o pedido de Energy para esse endereço, e a falha em um endereço nunca afeta os demais.

URL base do endpoint ​

https://netts.io/apiv2/orchestrator

Cabeçalhos da Requisição ​

CabeçalhoObrigatórioDescrição
Content-TypeSimapplication/json
X-API-KEYSimSua chave de API do painel Netts
X-Real-IPSimEndereço IP da sua lista de permissões
X-Idempotency-KeySim*Sua chave para este pedido, 12–128 caracteres de A-Z a-z 0-9 . _ : -

* É obrigatório fornecer o cabeçalho X-Idempotency-Key ou o campo clientRequestId no corpo. Se você não enviar nenhum dos dois, a requisição será rejeitada com 5010.

A chave identifica o pedido como um todo. Repetir uma requisição com a mesma chave retorna o resultado original em vez de criar um segundo pedido — consulte Idempotência.


Criar um pedido — POST /apiv2/orchestrator ​

Corpo da requisição ​

json
{
    "clientRequestId": "my-batch-2026-01-01-001",
    "defaults": {
        "bandwidth": true,
        "bandwidthAmount": 400,
        "bandwidthPeriod": "1h",
        "check": true,
        "trx_send": false
    },
    "items": [
        { "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE", "amount": 65000 },
        { "receiveAddress": "TXXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "amount": 131000 },
        { "receiveAddress": "TYYyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", "amount": 61000, "bandwidth": false }
    ]
}

Campos de nível superior ​

CampoTipoObrigatórioDescrição
itemsarraySim1 a 100 endereços. Duplicatas no mesmo pedido são rejeitadas.
clientRequestIdstringNãoSua referência de pedido, 8–128 caracteres de A-Z a-z 0-9 . _ : -. Funciona também como a chave de idempotência caso o cabeçalho esteja ausente.
defaultsobjectNãoValores aplicados a todos os itens que não os substituam.

Campos do item ​

Todos os campos, exceto receiveAddress e amount, também podem ser definidos em defaults. Um valor no item tem precedência sobre o padrão.

CampoTipoPadrãoDescrição
receiveAddressstring—Endereço TRON que recebe a Energy
amountint—Energy para este endereço, 61 000 … 50 000 000
bandwidthbooltruePedir Bandwidth para este endereço caso esteja insuficiente
bandwidthAmountint400400 ou 5000
bandwidthPeriodstring1h5m ou 1h
checkboolveja abaixoVerificar a Bandwidth gratuita primeiro e ignorar o pedido se houver o suficiente
trx_sendboolfalseRepassado ao serviço de Bandwidth
activationbooltrueAtivar o endereço se ele não estiver ativo. Defina como false para pular a etapa em um endereço que você sabe que já está ativo.

check tem como padrão true quando bandwidthAmount é 400, e false caso contrário — pedir 5 000 unidades geralmente significa que você as deseja independentemente do que já estiver disponível.

As quantias são por endereço. Uma única requisição pode misturar quantias diferentes livremente; o único limite é o total.

Limites ​

LimiteValor
Endereços por pedido100
Energy por endereço61 000 … 50 000 000
Energy total por pedido50 000 000
Pedidos em andamento por conta3
Endereços em andamento por conta300
Saldo mínimo para ser aceito4 TRX

O teto de 50 000 000 se aplica à soma de todos os endereços na requisição, não a cada um individualmente.

Resposta — aceito (202, código 10202) ​

json
{
    "detail": {
        "code": 10202,
        "status": "accepted",
        "msg": "Order accepted for processing",
        "data": {
            "idempotencyKey": "my-batch-2026-01-01-001",
            "requestId": 1234,
            "itemsAccepted": 3,
            "statusUrl": "/apiv2/orchestrator/status/my-batch-2026-01-01-001",
            "items": [
                {
                    "deliveryKey": 5001,
                    "trackingId": "my-batch-2026-01-01-001:TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "amount": 65000,
                    "energyChunks": 1,
                    "activation": "planned",
                    "bandwidth": "planned",
                    "status": "queued"
                }
            ]
        }
    }
}

202 significa enfileirado, não executado. Nada foi cobrado ainda. Consulte statusUrl para obter o resultado.

trackingId é o par chave de idempotência + endereço — a identificação de um endereço dentro do seu pedido. Use-o em seus próprios logs e conciliações.

Exemplo ​

bash
curl -X POST https://netts.io/apiv2/orchestrator \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip" \
  -H "X-Idempotency-Key: my-batch-2026-01-01-001" \
  -d '{
        "items": [
          {"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE", "amount": 65000}
        ]
      }'

Verificar progresso — GET /apiv2/orchestrator/status/{idempotencyKey} ​

Adicione ?address=T… para obter um único endereço em vez do pedido inteiro.

json
{
    "detail": {
        "code": 10000,
        "status": "processing",
        "data": {
            "idempotencyKey": "my-batch-2026-01-01-001",
            "requestId": 1234,
            "clientRequestId": "my-batch-2026-01-01-001",
            "summary": {
                "total": 3, "queued": 1, "processing": 1, "completed": 1,
                "partial": 0, "failed": 0, "insufficient_balance": 0,
                "credentials_revoked": 0, "cancelled": 0
            },
            "items": [
                {
                    "deliveryKey": 5001,
                    "trackingId": "my-batch-2026-01-01-001:TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
                    "status": "completed",
                    "energy": {
                        "requested": 65000,
                        "delegated": 65000,
                        "status": "done",
                        "chunks": { "total": 1, "done": 1 },
                        "orderIds": ["1Hxxxxxxxxxx"],
                        "hashes": ["0000000000000000000000000000000000000000000000000000000000000000"]
                    },
                    "activation": { "status": "not_needed", "orderId": null, "hash": null },
                    "bandwidth": {
                        "status": "enough", "orderId": "B1Hxxxxxxxxxxxxxx",
                        "amount": 400, "period": "1h", "hashes": [], "skipReason": null
                    },
                    "attempts": 1,
                    "startedAt": "2026-01-01T00:00:00+00:00",
                    "finishedAt": "2026-01-01T00:00:03+00:00"
                }
            ]
        }
    }
}

Uma chave desconhecida, ou pertencente a outra conta, retorna 404.

Valores de status do endereço ​

StatusSignificado
queuedAguardando para ser processado
processingEm andamento
completedToda a Energy solicitada foi delegada
partialAlgumas frações foram entregues, outras falharam
failedNada foi entregue
insufficient_balanceInterrompido — seu saldo caiu abaixo do mínimo
credentials_revokedSua chave de API foi removida ou desativada enquanto o pedido estava em execução
cancelledRemovido da fila pela sua solicitação de cancelamento

Valores de status da etapa ​

EtapaValores
activationnot_needed, done, failed, skipped, skipped_unavailable
bandwidthenough, done, failed, skipped
energydone, partial, failed

bandwidth.skipReason explica o motivo de skipped: option_off (você desativou a opção), energy_gt_600000 (pedidos grandes de Energy não precisam de recarga de Bandwidth).

Hashes de delegação ​

energy.hashes é o seu comprovante de entrega. Quando a Energy vem de um provedor externo, o hash não é conhecido no momento do pedido — ele é preenchido cerca de um minuto depois, e o endereço não é relatado como concluído até que os hashes sejam coletados ou a janela de espera expire. Um endereço em completed com um hash presente está totalmente liquidado.


Cancelar — POST /apiv2/orchestrator/cancel/{idempotencyKey} ​

Remove da fila todos os endereços que ainda não começaram a ser processados.

json
{
    "detail": {
        "code": 10005,
        "status": "cancelled",
        "msg": "Order cancelled: 7 addresses removed from queue",
        "data": { "cancelled": 7 }
    }
}

Endereços já em processing não são interrompidos: parte de sua Energy já pode ter sido paga. O cancelamento opera no melhor esforço para o restante.


Idempotência ​

O pedido é identificado pela sua chave — o cabeçalho X-Idempotency-Key ou clientRequestId quando o cabeçalho estiver ausente.

Repetição de requisiçãoResultado
Mesma chave, mesmo corpo208 com o pedido original e originalAcceptedAt — nenhum segundo pedido criado
Mesma chave, corpo diferente409 4090 IDEMPOTENCY_CONFLICT

Portanto, em caso de timeout de rede do seu lado, é seguro repetir exatamente a mesma requisição. Alterar o conteúdo sob uma chave já utilizada é rejeitado em vez de aplicado silenciosamente.

Dentro do pedido, cada endereço possui sua própria chave interna, portanto, uma repetição nunca cobra duas vezes um único endereço.


Cobrança ​

O orchestrator em si não cobra nada. Cada etapa é cobrada pelo serviço que a executa, em seu preço normal:

EtapaCobrado como
Ativaçãodedução separada, número do pedido A…
Bandwidthdedução separada, número do pedido B1H… — apenas quando efetivamente delegada
Energyuma dedução por fração, número do pedido 1H…

check: true com Bandwidth gratuita suficiente não custa nada — o status fica como enough e nenhum pedido é realizado. Grandes quantias de Energy ignoram a Bandwidth inteiramente.

Se o seu saldo acabar no meio do lote, os endereços restantes são finalizados como insufficient_balance sem que sejam tentados.


Referência de Códigos de Erro ​

CódigoDescriçãoStatus HTTP
10202Pedido aceito / já aceito202 / 208
10000Status retornado200
10005Pedido cancelado200
5004Campo inválido: formato de endereço, amount fora do intervalo, bandwidthAmount diferente de 400/5000, bandwidthPeriod diferente de 5m/1h, corpo não é um objeto JSON400
5005items ausente ou vazio400
5006receiveAddress duplicado em um mesmo pedido400
5009X-Idempotency-Key ou clientRequestId malformado400
5010Nem X-Idempotency-Key nem clientRequestId foram fornecidos400
5012Energy total na requisição excede 50 000 000400
-1Chave de API inválida / IP fora da lista de permissões401
1004Saldo abaixo do mínimo de 4 TRX402
-1Pedido não encontrado (ou não pertence a você)404
4090IDEMPOTENCY_CONFLICT — mesma chave, corpo diferente409
4220Validação da requisição falhou (detalhes em data.errors)422
429 / 5011Muitos pedidos, endereços ou frações em andamento429
5003Pedido não foi aceito — serviço temporariamente indisponível, seguro tentar novamente503

Um 503 na criação é à prova de falhas: nada foi armazenado e nada foi cobrado.

Limites de Taxa ​

Limitado por IP de origem:

PeríodoLimite
1 segundo20 requisições

Limite de Taxa Excedido (429) ​

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

Observações ​

  • 202 não é um comprovante de entrega. Trate-o como "enfileirado". O resultado fica disponível no endpoint de status.
  • Os endereços são processados em paralelo, até 5 de cada vez dentro de um pedido, para que um lote grande não fique travado por conta de um único endereço lento. A ordem de conclusão não é garantida.
  • O fracionamento é automático: quantias acima de 1 000 000 são divididas em frações iguais, cada uma se tornando seu próprio pedido de Energy. energy.orderIds e energy.hashes listam todas elas.
  • Não há webhook para pedidos do orchestrator como um todo. Cada delegação de Energy ainda produz o webhook habitual delegation.confirmed, consulte Webhooks.
  • Endpoints relacionados: Activator, Bandwidth, Order 1H.