idempotent PUT