Ruwana Developer Documentation

Handle errors without creating duplicate production.

Public errors use JSON with ok:false and an error identifier. Production clients should distinguish validation/authentication problems from safe same-request retries and terminal production states.

HTTPCurrent meaningRepresentative errorClient action
400Invalid field, missing required input or idempotency keyidempotency_key_requiredFix the request.
401Public API credential invalidapi_key_invalidReplace/fix the key.
402Available wallet cannot cover the reservationinsufficient_wallet_balanceFund the wallet before retrying.
404Route/request/product not foundrequest_not_foundVerify the route and owner-bound ID.
409Idempotency conflict or terminal failed requestidempotency_key_conflictDo not change a request under the same key.
413Body or uploaded file exceeds its limitbody_too_largeReduce the upload.
415Unsupported content type / multipart requiredmultipart_requiredUse the documented transport.
422Motion media duration outside accepted production windowmotion_duration_invalidUse a 3–30 second motion source.
503Logical request entered terminal manual reviewmanual_reviewDo not blind-resubmit production.

Safe retry rule

If a transport/network failure prevents your client from knowing whether the POST was accepted, retry the same logical request with the same Idempotency-Key. Do not create a new key just because the HTTP connection was uncertain.

Manual review is intentionally terminal. It exists to prevent automatic duplicate execution when Platform cannot safely prove whether a production/finalization step should be repeated.