---
title: "Update the billing profile"
method: PUT
path: "/api/space/billing_profile"
tags: ["Space Billing"]
---

# Update the billing profile

`PUT /api/space/billing_profile`

Replaces the billing profile. The update writes the whole profile, so send every field
you want to keep. `contact_email` takes an array of one or more addresses.

`tax_id_number` is required when the profile reports `tax_id_number_required: true`,
which is the case on Enterprise spaces. On a postpay space, `monthly_invoices` is locked
on and `false` is rejected with `monthly_invoices_locked`; the profile reports this as
`monthly_invoices_locked: true` so a client does not have to infer it.

#### Permissions

Authenticate with a [Personal access token](/docs/apis/authorization#personal-access-tokens) whose holder is an owner or admin of the space. A project API token is not accepted on this endpoint, and a Personal access token has no scopes: the holder's role in the space is the whole authorization decision.

## Request body

- SpaceUpdateBillingProfileRequest — Request body for updating the billing profile. The update writes the whole profile, so send every field you want to keep.
  - `address_line1` string, required — The first line of the billing address.
  - `address_line2` string — The second line of the billing address.
  - `address_city` string, required — The city of the billing address.
  - `address_state` string, required — The state, province, or region of the billing address.
  - `address_zip` string, required — The postal code of the billing address.
  - `address_country` string, required — The ISO 3166-1 alpha-2 country code of the billing address.
  - `company_name` string, required — The company name to show on statements.
  - `contact_name` string, required — The name of the billing contact.
  - `contact_email` string[], required — The email addresses to send billing correspondence to. Must be an array (`contact_email_must_be_array`) with at least one address (`contact_email_missing`), each a valid email address (`contact_email_address_invalid`).
  - `contact_phone` string, required — The phone number of the billing contact.
  - `tax_id_number` string — The tax identification number to show on statements. Required when the profile reports `tax_id_number_required: true`, which is the case on Enterprise spaces.
  - `monthly_invoices` boolean — Whether to issue a monthly invoice. On a postpay space this is locked on, and `false` is rejected with `monthly_invoices_locked`.

## Response `200`

The request has succeeded.

- SpaceBillingProfile — The billing address and contacts for the space. A profile that has never been configured is returned with `null` fields rather than a `404`.
  - `type` 'billing_profile', required — The object type. Always `billing_profile`.
  - `address_line1` string, nullable, required — The first line of the billing address.
  - `address_line2` string, nullable, required — The second line of the billing address.
  - `address_city` string, nullable, required — The city of the billing address.
  - `address_state` string, nullable, required — The state, province, or region of the billing address.
  - `address_zip` string, nullable, required — The postal code of the billing address.
  - `address_country` string, nullable, required — The ISO 3166-1 alpha-2 country code of the billing address.
  - `company_name` string, nullable, required — The company name that appears on statements.
  - `contact_name` string, nullable, required — The name of the billing contact.
  - `contact_email` string[], nullable, required — The email addresses billing correspondence is sent to.
  - `contact_phone` string, nullable, required — The phone number of the billing contact.
  - `tax_id_number` string, nullable, required — The tax identification number that appears on statements.
  - `monthly_invoices` boolean, required — Whether a monthly invoice is issued for the space.
  - `tax_id_number_required` boolean, required — Whether `tax_id_number` is required when updating the profile. `true` on Enterprise spaces.
  - `monthly_invoices_locked` boolean, required — Whether `monthly_invoices` is locked on. `true` on postpay spaces, where monthly invoices cannot be turned off.

## Other responses

- `400` — The request body is not valid JSON.
- `401` — The credential is missing, unknown, or revoked; its holder is not a member of the space in the subdomain; the member is not an owner or admin; or billing for this space is not managed in the space itself, which is the case for a space purchased through a cloud marketplace and for a suspended or deactivated space. A space deactivated for nonpayment keeps the billing endpoints so that its outstanding balance can be settled. The body is the plain text `Unauthorized`. An unverified space instead receives the JSON body `{"message": "Please validate a phone number to access your account."}` on every endpoint under `/api/space`.
- `422` — The request failed validation. `contact_email` was not an array (`contact_email_must_be_array`), was empty (`contact_email_missing`), or held an address that is not a valid email address (`contact_email_address_invalid`); a required field was blank; `tax_id_number` was omitted on a space that requires it; or a postpay space tried to set `monthly_invoices` to `false` (`monthly_invoices_locked`).
- `500` — An internal server error occurred.

## Changes

> 161 revisions in range; 3 could not be searched.

- **2026-09-15** `45bac4fd93ab` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/signalwire/apis/signalwire-rest-api/changes/api/space/billing_profile/put.md)

---

[API](https://skmtc.dev/signalwire/apis/signalwire-rest-api.md) · [All operations](https://skmtc.dev/signalwire/apis/signalwire-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signalwire/apis/signalwire-rest-api/revisions/20ee0f568ece?raw)
