Responses and errors.
One envelope shape, success or failure. Branch on the group, not the code.
The envelope
Every result comes back the same shape, success or failure, with backend (mock or seam) and network on both, so a transcript alone says whether a call touched a real chain and which one.
ok
{"ok": true, "backend": "seam", "network": "sepolia", "result": {...}}error
{"ok": false, "backend": "seam", "network": "sepolia", "error": {"code": "...", "message": "...", "retryable": false}}Branch on the group below, not the individual code. retryable on the error is the thing to trust — not a guess from the name.
A write takes one to four minutes. Do not create a new operation_id for one that appears stuck — call reconcile, then resume_operation with the original ID once its result permits it.