# A phone number in a response no longer promises the input rules

The contract stops declaring `minLength` and `pattern` on `phone` in responses; they move to `PhoneInput`. The server sends exactly what it sent before.

Sep 19, 2026 · Improved

A correction to the contract, not to the API. The `phone` of a customer, an invoice's issuer and recipient, and the company profile declared the same 9-character minimum and character pattern that a request has to meet. A stored number does not always meet them: it may have arrived through a payment provider or a bulk import, or have been saved before the rule existed.

A client that validated responses against the contract threw away the **whole** list when it hit one such number.

## What else changed

- **Responses use `Phone`**, which only states the 20-character maximum. Read the field defensively and do not assume it parses.
- **Requests use `PhoneInput`**, with the rules the API enforces on the way in: 9 to 20 characters, digits, spaces, dashes, parentheses and an optional leading `+`. Nothing you send is judged differently.
- **What to do.** If you generate a client from the contract, regenerate it. Response models lose the pattern check and request models keep it.

## Where to go next

- [Create a customer](/customers/createCompanyCustomer)
- [Three response fields were never guaranteed](/changelog#contract-drops-guarantees-it-never-had)

---

Full OpenAPI spec: https://docs.beel.es/api/openapi