3.2 KiB
3.2 KiB
Core Private Node Routes
These routes are consumed only by the node agent and require the x-node-auth-key header.
Authentication
POST /node/registeris the only public route in this group.- All other routes require a valid node auth key.
- The auth key is issued by Core during registration and persisted on the node side.
Route table
| Method | Route | Input | Output / Notes |
|---|---|---|---|
POST |
/node/register |
RegisterNodeDto |
Returns { authKey, nodeId } |
POST |
/node/heartbeat |
NodeHeartbeatDto |
Returns { ok: true, needSync } |
POST |
/node/usage |
NodeUsageDto |
Returns { ok: true } |
POST |
/node/outbound-usage |
NodeOutboundUsageDto |
Returns { ok: true } |
POST |
/node/session-events |
SessionEventsDto |
Returns { ok: true } |
GET |
/node/config/latest |
none | Returns NodeConfig |
POST |
/node/config/applied |
NodeConfigAppliedDto |
Returns { ok: true } |
POST |
/node/error |
NodeErrorDto |
Returns { ok: true } |
Request payloads
RegisterNodeDto
code: stringname: stringhost: stringip: stringregion: string
NodeHeartbeatDto
ip?: stringrevision?: number
The node sends its current revision in heartbeats. Core uses it to decide whether a sync is needed.
NodeUsageDto
entries: UsageEntryDto[]
UsageEntryDto fields:
userId: numbersubscriptionId?: number | nullnodeProtocolId: numberbytesUp: numberbytesDown: numberrecordedAt: string
NodeOutboundUsageDto
items: OutboundUsageItem[]
OutboundUsageItem fields:
tag: stringbytesUp: numberbytesDown: number
SessionEventsDto
events: SessionEventEntryDto[]
SessionEventEntryDto fields:
userId: numberprotocol: VpnProtocoleventType: SessionEventTypeoccurredAt: stringipAddress?: string
NodeConfigAppliedDto
revision: number
NodeErrorDto
message: stringcode?: stringdetails?: Record<string, unknown>
NodeConfig
The config returned by GET /node/config/latest has this structure:
{
revision: number
clientMap: Record<string, { userId: number; subscriptionId: number | null }>
services: {
xray?: XrayServiceConfig
mtproto?: MtProtoServiceConfig
}
}
Important notes:
clientMapmaps subscription link UUIDs to the user and subscription used for traffic attribution.services.xraycontains the Xray inbounds, routing, and outbounds for the node.services.mtprotocontains MTProto inbounds fortelemt.- the node stores the current revision and client map locally after a successful apply
Route semantics
POST /node/heartbeatupdateslastSeenAtand can request a sync when the node revision is behind.POST /node/usagestores per-minute usage rows and increments subscription traffic counters.POST /node/outbound-usageincrementsnode_outbounds.traffic_bytes_up/down.POST /node/session-eventsstores online/offline events insession_events.POST /node/config/appliedmarks the node sync status assynced.POST /node/errormarks the node aserrorand the sync status asfailed.