ASSIGN_PROOF_INVALID
The presence proof did not verify.
| HTTP status | 401 |
| Group | Relay path |
| Retryable | No — sending it again changes nothing |
| Re-sign | NONE — do not ask the user to sign anything |
What happened
Wrong signature, wrong domain string, wrong chain id, or a timestamp too far from server time. A common cause: the message was signed with the MultiversX message prefix (a wallet’s signMessage, or sdk-core Account.signMessage) instead of raw. The proof is a raw Ed25519 signature by the sender’s own key over the UTF-8 bytes of the message, for kind key and sponsor alike.
What to do
Sign the bytes of the message directly with the sender key (sdk-core UserSigner.sign), read details.serverTimeMs, rebuild the proof for this host’s chain id, and call assign again.
Extra members
This code carries serverTimeMs in the problem document, on top of the common members.
The problem document
Every error is application/problem+json (RFC 9457) with the same shape:
{
"type": "https://docs.co-relayer.com/errors/assign-proof-invalid",
"title": "The presence proof did not verify.",
"status": 401,
"detail": "A sentence about this specific occurrence.",
"instance": "req_01JB…",
"code": "ASSIGN_PROOF_INVALID",
"retryable": false,
"resign": "NONE",
"hint": "Sign the bytes of the message directly with the sender key (sdk-core `UserSigner.sign`), read `details.serverTimeMs`, rebuild the proof for this host’s chain id, and call assign again."
}
See the error model for what each member means and how to handle unknown codes.