Plans and Contracts

Plan types, contract terms, extend, renew, and PATCH contract rules

Contract and plan information appears on customers at creation and can be changed later via PATCH /customers/{customerID}/contract.

Plan values

API value planProduct
standardPhoneLine+
officePhoneLine+ Office
anywherePhoneLine+ Anywhere
hardware_onlyPhoneLine+ Hardware Only
hardware_only_cpPhoneLine+ Hardware Only (CP)

On GET /customers and GET /customers/{customerID}, the current plan is returned in the plan field, along with contractLength and contractStartDate.

Contract term

Term length is expressed in months: 12, 24, or 36.

Set at creation in POST /customerscontract.term, and when extending via contract patch.

Update contract — PATCH /customers/{customerID}/contract

This endpoint is asynchronous — it returns { "jobID": "..." } with HTTP 202.

One change per request

You cannot send term and plan in the same request.
The API validates the body and returns 400 with message: Cannot update both term and plan at the same time.

Send exactly one of the following:

Request bodyEffect
{ "term": 24 }Extend contract (fixed term)
{ "term": 24, "renew": true }Renew contract
{ "plan": "anywhere" }Change plan type

To change both plan and term, make two sequential requests and track both jobID values.

An empty body (neither term nor plan) returns 400: No contract updates provided.

Examples

Extend term to 24 months:

PATCH /v2/customers/550e8400-e29b-41d4-a716-446655440000/contract
Content-Type: application/json
Authorization: Bearer <token>

{
  "term": 24
}

Renew with a 36-month term:

{
    "term": 36,
    "renew": true
}

Change plan:

{
    "plan": "office"
}

Poll for completion

GET /v2/jobs/{jobID}

Or listen for the contract_updated webhook — see Webhooks.

Create-time contract

When creating a customer (POST /customers), the contract object includes:

FieldDescription
termLength in months
typeFixed or Rolling
planOne of the plan values above

See Onboarding a customer.

What PATCH customer does not do

PATCH /customers/{customerID} only updates company contact details. It does not change plan, contractLength, or contractStartDate.

Reference

OpenAPI operation: Update customer contract — includes field-level descriptions and constraints.


Did this page help you?