Skip to content

intent_replay

The signed intent passed every other check, but its nonce was already used by this agent.

HTTP 403 · permission_error · not retryable

The signed intent passed every other check, but its nonce was already used by this agent. Each intent works once: of any number of concurrent sends of one header, exactly one succeeds. An intent old enough for its nonce to be pruned is refused as intent_invalid with reason expired instead.

Reason Param Message
replay nonce This signed intent was already used at {time} UTC. Sign a new intent, with a fresh nonce, for every call.
replay (the first use was pruned meanwhile) nonce This signed intent was already used. Sign a new intent, with a fresh nonce, for every call.

Sign a new intent, with 128 fresh random bits as its nonce, for every call, retries included. If you didn’t send the request twice, something on the path did: treat it as a replay attempt and check what sits between the agent and Deedglass.

HTTP 403 · intent_replay
{
"error": {
"type": "permission_error",
"code": "intent_replay",
"message": "This signed intent was already used at 09:30:02 UTC. Sign a new intent, with a fresh nonce, for every call.",
"param": "nonce",
"request_id": "req_01j9zr3m5k8q2w7x4t6v0b1c9d",
"doc_url": "https://docs.deedglass.com/errors/intent_replay"
}
}

The message is for a person and can get more exact over time: branch on type and code, never on the message.

SDK Raised as
TypeScript (@deedglass/sdk) PermissionDeniedError with code === "intent_replay"
Python (deedglass) deedglass.PermissionDeniedError with .code == "intent_replay"