customer.update_profile
Edit the caller’s own name and phone (session-scoped). The e-mail is the login identity and is refused here. Order snapshots are never rewritten; a later checkout only fills fields that are still empty.
- Scope:
customer.self.write - System: no
- Reachable from:
POST /v1/customer/commands/customer.update_profile— the shopper’s SESSION face, with the customer session Bearer minted bycustomer.verify_otp(the tenant comes from the token). An operator’s tenant credential never carriescustomer.self.write; the data face/v1/commands/customer.update_profiletakes the same session Bearer only alongsidex-forge-tenant - Events:
customer.updated
Input (JSON Schema)
Section titled “Input (JSON Schema)”{ "additionalProperties": false, "properties": { "name": { "maxLength": 120, "type": "string" }, "phone": { "anyOf": [ { "pattern": "^\\d{10,11}$", "type": "string" }, { "const": "", "type": "string" }, { "type": "null" } ] } }, "type": "object"}Result (200)
Section titled “Result (200)”{ "additionalProperties": false, "properties": { "customer_id": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "customer_id", "name", "phone" ], "type": "object"}Errors
Section titled “Errors”validation_failed (400) · unauthorized (401) · forbidden (403) · conflict (409) · internal (500)