Status code reference
| Status | Meaning | Source |
|---|---|---|
401 | Signature or identity failed (MinerAuthError) | src/platform_network/master/app_proxy.py:442-443 |
409 | Nonce already used (NonceReplayError) | src/platform_network/master/app_proxy.py:440-441 |
413 | Submission body too large | src/platform_network/master/app_proxy.py:427-431 |
502 | Challenge unavailable (transport failure) | src/platform_network/master/app_proxy.py:475-478 |
403 | Proxy path is not allowed | src/platform_network/master/app_proxy.py:386-390 |
401 Unauthorized
A401 means signature verification or identity resolution failed
(src/platform_network/master/app_proxy.py:442-443). The specific message comes from the
verifier:
missing <header>
missing <header>
One of
X-Hotkey, X-Signature, X-Nonce, or X-Timestamp is absent
(src/platform_network/security/miner_auth.py:230-234). Set all four headers
(src/platform_network/security/miner_auth.py:159-162).invalid timestamp
invalid timestamp
X-Timestamp is not an integer (src/platform_network/security/miner_auth.py:163-166).
Send Unix seconds as an integer.stale signature
stale signature
The timestamp is more than
300 seconds from server time
(src/platform_network/security/miner_auth.py:168-169,
src/platform_network/config/settings.py:33). Re-sign with a current timestamp and resend
promptly.invalid signature
invalid signature
The signature does not verify against the canonical message
(
src/platform_network/security/miner_auth.py:181-182). Re-check the message fields and
the body hash; the message is
platform-upload-v1:{netuid}:{slug}:{METHOD}:{path}:{hotkey}:{nonce}:{timestamp}:{body_hash}
(src/platform_network/security/miner_auth.py:96-111). See
Authentication & signing.unknown hotkey
unknown hotkey
Your hotkey is not in the metagraph
(
src/platform_network/security/miner_auth.py:213-215). Register on netuid 100; see
Wallet & registration.blocked uid
blocked uid
Your hotkey resolves to UID
0, which is blocked
(src/platform_network/security/miner_auth.py:143,217-218).metagraph unavailable
metagraph unavailable
409 Conflict (nonce replay)
A409 means the nonce was already used
(src/platform_network/master/app_proxy.py:440-441,
src/platform_network/security/miner_auth.py:89-90). Generate a fresh, unique nonce for
every request. Nonces are retained for 86,400 seconds
(src/platform_network/config/settings.py:34).
413 Request entity too large
A413 means the body exceeded the upload limit
(src/platform_network/master/app_proxy.py:427-431). The maximum is 7,500,000 bytes
(src/platform_network/config/settings.py:35). Shrink the artifact below the limit.
502 Bad gateway (Agent Challenge)
A502 under /challenges/agent-challenge/... is a safe unavailable state from proxy
transport handling, not a challenge rejection (docs/miner/README.md:101-103). Work the
checklist (docs/miner/README.md:105-112):
Confirm ingress routes /challenges
A route for
/v1/challenges alone is not enough; /challenges must route to the proxy
(docs/miner/README.md:107).Confirm proxy slug routing
The proxy must point at the Agent Challenge service and still block
/internal/*,
/health, and /version (docs/miner/README.md:108).Confirm challenge health
Check Agent Challenge health, a running Swarm task, service DNS on the overlay, and the
service port (
docs/miner/README.md:109).Confirm placement
The challenge service must run on the manager node and not be stuck pending placement
(
docs/miner/README.md:110).403 Forbidden (blocked path)
A403 means the path targets a private challenge route
(src/platform_network/master/app_proxy.py:386-390). The proxy blocks /internal/*,
/health, /version, and benchmark-execution paths on challenge routes
(src/platform_network/master/app_proxy.py:73-74,90-110). Use only the public submission,
status, and leaderboard routes.
Next steps
Authentication & signing
Rebuild a valid signature.
Monitoring & logs
Confirm status after a fix.