Record a customer consent decision
Appends one consent decision to the customer’s immutable trail. status picks the verb: granted records consent for the scope, withdrawn revokes it. source says where the decision was captured (counter, kiosk, web, phone) and is part of the legal record — state it truthfully. Only ever record a decision the customer actually made. Returns the recomputed record. 409 when the scope is already granted, 422 when withdrawing a scope with no active consent, 404 for a subject with no record at all. PERMISSION TRAP (solya-pos#949): the route gate accepts pos.customers.manage, but both underlying use-cases additionally assert the kernel permission config:manage, which the production Keycloak path never derives from scopes. An actor holding only the documented scope therefore passes the route guard and then fails with a bare 403 from the use-case. Treat a 403 here as a server-side grant gap, not a bad request.
Authorizations
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Path Parameters
1
