# Replace customer billing > PUT /api/customers/{id}/billing on the Vigilbase One API. Source: https://docs.vigilbase.com/one/api/reference/customers/put-customers-id-billing `PUT https://one.vigilbase.com/api/customers/{id}/billing` > Needs a recent sign-in: renewing a token doesn't count, and MCP sessions and API keys are always refused. See [changes that need a recent sign-in](https://docs.vigilbase.com/one/api#changes-that-need-a-recent-sign-in). ## Authorizations - `Authorization` (string, header, required): Bearer access token from Vigilbase Identity (`auth.vigilbase.com`), sent as `Authorization: Bearer `. The CLI gets one with `vigilbase login`. Organisation API keys can't call this endpoint: it needs a recent sign-in by a person. - Permissions checked: `write:billing` ## Path parameters - `id` (string, required) ## Body (application/json) - `operationId` (string, required) - `name` (string) - `email` (string) - `address` (object, required) - `line1` (string, required): Min length 1. - `line2` (string) - `city` (string, required): Min length 1. - `state` (string): Min length 1. - `postal_code` (string): Min length 1. - `country` (string, required): Min length 2, max length 2. - `tax_exempt` (string): One of `none`, `exempt`, `reverse`. - `tax_id_data` (object[]) - `type` (string, required): Min length 1. - `value` (string, required): Min length 1. ## Responses ### 200 Success ### 401 Authentication required ### 403 Not permitted ## Example request ```bash # Token from `vigilbase login`. API keys can't call this. curl --request PUT \ --url 'https://one.vigilbase.com/api/customers/{id}/billing' \ --header "Authorization: Bearer $VIGILBASE_TOKEN" \ --header 'Content-Type: application/json' \ --data '{"operationId":"","name":"","email":"","address":{"line1":"","line2":"","city":"","state":"","postal_code":"","country":""},"tax_exempt":"none","tax_id_data":[{"type":"","value":""}]}' ```