Skip to content

Commit d55b868

Browse files
DOCS-3667: Document annual billing feature for subscription billing model (#4447)
1 parent d26cc57 commit d55b868

File tree

6 files changed

+112
-31
lines changed

6 files changed

+112
-31
lines changed

docs/dev/reference/changelog.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ date: "2024-09-18"
4242
# updated: "" # When the content was last entirely checked
4343
---
4444

45+
{{% changelog color="added" title="Annual billing support for subscription billing model" date="2025-07-23" %}}
46+
47+
You can now configure annual billing alongside monthly billing options for your organizations.
48+
See [white-labelled billing documentation](/manage/manage/white-labelled-billing/) for configuration details.
49+
applications/).
50+
51+
{{% /changelog %}}
52+
4553
{{% changelog color="added" title="Build custom Viam applications" date="2025-07-17" %}}
4654

4755
You can now create and use Viam applications to build custom applications that interact with your Viam-powered machines through the Viam SDKs.

docs/manage/manage/white-labelled-billing.md

Lines changed: 87 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -100,33 +100,19 @@ https://app.viam.com/billing/<public-namespace>?id=<org-id>
100100

101101
## Set custom pricing
102102

103-
To use custom billing, add a billing configuration the fragment you use for your machine configurations.
103+
To use custom billing, add a billing configuration to a fragment.
104104

105105
1. Navigate to the **FLEET** page.
106106
1. Go to the [**FRAGMENTS** tab](https://app.viam.com/fragments).
107107
1. Select the fragment you use for your machines.
108108
1. Click **+** and add **Billing**
109109
1. Adjust attributes as needed.
110+
1. Mark the fragment as public or unlisted.
110111
1. Save the fragment.
112+
1. Add the fragment to the machines that you want to bill for.
111113

112114
{{< tabs >}}
113-
{{% tab name="Example" %}}
114-
115-
```json { class="line-numbers linkable-line-numbers" }
116-
{
117-
"components": { ... },
118-
"services" : { ... },
119-
"billing": {
120-
"cost_per_month": {
121-
"per_machine": 10
122-
},
123-
"tier_name": "not-free"
124-
}
125-
}
126-
```
127-
128-
{{% /tab %}}
129-
{{% tab name="Full Template" %}}
115+
{{% tab name="Full Template (monthly)" %}}
130116

131117
```json
132118
{
@@ -146,7 +132,62 @@ To use custom billing, add a billing configuration the fragment you use for your
146132
},
147133
"tier_name": "example-tier",
148134
"description": "",
149-
"tier_credit": 0.0
135+
"tier_credit": 0.0,
136+
"in_arrears": true
137+
}
138+
}
139+
```
140+
141+
{{% /tab %}}
142+
{{% tab name="Full Template (yearly)" %}}
143+
144+
```json
145+
{
146+
"billing": {
147+
"cost_per_year": {
148+
"per_machine": 0
149+
},
150+
"tier_name": "example-tier",
151+
"description": "",
152+
"tier_credit": 0.0,
153+
"in_arrears": false
154+
}
155+
}
156+
```
157+
158+
{{% /tab %}}
159+
{{% tab name="Example (monthly)" %}}
160+
161+
This configuration charges customers every month in arrears, which means after usage:
162+
163+
```json { class="line-numbers linkable-line-numbers" }
164+
{
165+
"billing": {
166+
"cost_per_month": {
167+
"per_machine": 10,
168+
"binary_data_upload_bytes": 0.01
169+
},
170+
"tier_name": "monthly-tier",
171+
"in_arrears": true
172+
}
173+
}
174+
```
175+
176+
By setting `"in_arrears": false` you can change the configuration to charge customers upfront.
177+
178+
{{% /tab %}}
179+
{{% tab name="Example (yearly)" %}}
180+
181+
This configuration charges customers every 12 months, with upfront payment:
182+
183+
```json { class="line-numbers linkable-line-numbers" }
184+
{
185+
"billing": {
186+
"cost_per_year": {
187+
"per_machine": 100
188+
},
189+
"tier_name": "annual-tier",
190+
"in_arrears": false
150191
}
151192
}
152193
```
@@ -159,11 +200,12 @@ To use custom billing, add a billing configuration the fragment you use for your
159200
<!-- prettier-ignore -->
160201
| Name | Type | Required? | Description |
161202
| ---- | ---- | --------- | ----------- |
162-
| `cost_per_month` | object | Optional | See [cost per month attributes](/manage/manage/white-labelled-billing/#click-to-view-cost-per-month-attributes). Default: `{}` (all machines cost `0`). |
163-
| `cost_per_year` | object | Optional | See [cost per year attributes](/manage/manage/white-labelled-billing/#click-to-view-cost-per-year-attributes). Default: `{}` (all machines cost `0`). |
203+
| `cost_per_month` | object | Optional | See [cost per month attributes](/manage/manage/white-labelled-billing/#click-to-view-cost-per-month-attributes). If specified, you cannot also specify `cost_per_year`. Default: `{}` (all machines cost `0`). |
204+
| `cost_per_year` | object | Optional | See [cost per year attributes](/manage/manage/white-labelled-billing/#click-to-view-cost-per-year-attributes). If specified, you cannot also specify `cost_per_month`. Default: `{}` (all machines cost `0`). |
164205
| `tier_name` | string | **Required** | The name of the billing tier. |
165-
| `description` | | Optional | Description for the billing tier. Default: `""`. |
206+
| `description` | string | Optional | Description for the billing tier. Default: `""`. |
166207
| `tier_credit` | number | Optional | Credit that should be applied to final total for the org. Default: `0`. |
208+
| `in_arrears` | boolean | Optional | Whether billing is charged in arrears (after usage) or upfront. For monthly billing, set to `true` for billing after usage and `false` for upfront billing. If set to `false` you can only set the `per_machine` attribute in `cost_per_month`. For annual billing, `in_arrears` must be set to `false`. Default: `false`. |
167209

168210
{{% /expand%}}
169211

@@ -204,3 +246,26 @@ Payments for white-labeled billing go directly to Viam. To arrange reimbursement
204246
### Can I customize the billing page further?
205247

206248
If you need further customization, please [contact us](mailto:[email protected]).
249+
250+
### How does renewal work?
251+
252+
Renewal is automatic for upfront annual billing and for upfront monthly billing.
253+
For monthly billing after usage, if there is no usage, there is no charge.
254+
If the `per_machine` field is set, then a machine existing, is considered usage.
255+
256+
### When are invoices generated?
257+
258+
- **Monthly billing (`in_arrears: true`)**: Invoices are generated on the first day of the month and customers are charged at the end of each month for the per machine cost and usage during that month.
259+
For example, if you set up a machine on June 20, you'll get an invoice on July 1 for 10 days of usage. Then you'll get the next invoice on August 1 for the usage in July.
260+
- **Monthly billing (`in_arrears: false`)**: Invoices are generated shortly after the billing fragment is added to the machine and customers are charged at the beginning of each new month of usage for the per machine cost.
261+
For example, if you set up a monthly upfront machine on June 20, you'll get an invoice shortly after on the same day.
262+
Then you'll get the next invoice on July 20, then August 20, and so on.
263+
- **Annual billing (`in_arrears: false`)**: Invoices are generated shortly after the billing fragment is added to the machine and customers are charged at the beginning of each new year of usage for the per machine cost.
264+
For example, if you set up an annual upfront machine on June 20, you'll get an invoice shortly after on the same day.
265+
Then you'll get the next invoice on June 20 the following year.
266+
267+
### Can customers switch between monthly and annual billing?
268+
269+
Yes. However, switching billing fragments will result in the new charge immediately taking effect.
270+
We recommend that you wait until the end of the current billing cycle to remove the old billing
271+
fragment and assign the new billing fragment.

docs/manage/reference/billing.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ You must be an [organization owner](/manage/manage/rbac/) to see this page.
2020

2121
The **Payment and billing** page shows you:
2222

23-
- your usage for the current month
23+
- your usage for the current billing period
2424
- the date for your next invoice
2525
- the payment method on the account
2626
- a cost breakdown for cloud storage, cloud data upload, cloud data egress, remote control, and standard compute costs
27-
- all your monthly invoices
27+
- all your invoices (monthly or annual depending on your billing configuration)
2828

2929
{{< alert title="Note" color="note" >}}
3030

@@ -60,12 +60,16 @@ Organizations without valid payment methods may experience limitations on their
6060

6161
## Download an invoice
6262

63-
You can view all your monthly invoices for your organization:
63+
You can view all your invoices for your organization:
6464

6565
1. Click on the organization name in the top right of the navigation bar and then click on **Payment and billing**.
6666
You must be an [organization owner](https://docs.viam.com/manage/manage/rbac/) to see this page.
6767
1. Find the **Invoices** section of the **Payment & Billing** page.
68-
1. Click on **Download (PDF)** next to the relevant month.
68+
1. Click on **Download (PDF)** next to the relevant billing period.
69+
70+
{{< alert title="Note" color="note" >}}
71+
Invoices may be generated monthly or annually depending on your billing configuration. Organizations using annual billing will receive invoices every 12 months instead of monthly.
72+
{{< /alert >}}
6973

7074
## Set billing alerts
7175

@@ -74,7 +78,7 @@ You can set alerts to receive an email notification when your monthly spend exce
7478
1. Click on the organization name in the top right of the navigation bar and then click on **Payment and billing**.
7579
You must be an [organization owner](https://docs.viam.com/manage/manage/rbac/) to see this page.
7680
1. Scroll to the bottom of the **Payment & Billing** page.
77-
1. Click **Set amount** and enter a monthly threshold.
81+
1. Click **Set amount** and enter a monthly threshold amount.
7882

7983
## Receive billing emails at a different email or and email alias
8084

static/include/app/apis/generated/billing.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
### GetCurrentMonthUsage
22

3-
Access data usage information for the current month for a given organization.
3+
Access data usage information for the current billing period for a given organization.
4+
This method only returns usage for organizations with monthly billing at the end of the month (`"in_arrears": true`).
45
You can also find your usage data on the [**Payment and billing** page](/manage/reference/billing/).
56

67
{{< tabs >}}
@@ -96,7 +97,8 @@ For more information, see the [TypeScript SDK Docs](https://ts.viam.dev/classes/
9697

9798
### GetInvoicesSummary
9899

99-
Access total outstanding balance plus invoice summaries for a given org.
100+
Access total outstanding balance plus invoice summaries for a given organization.
101+
This includes both monthly and annual invoices depending on the organization's billing configuration.
100102

101103
{{< tabs >}}
102104
{{% tab name="Python" %}}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
Access data usage information for the current month for a given organization.
1+
Access data usage information for the current billing period for a given organization.
2+
This method only returns usage for organizations with monthly billing at the end of the month (`"in_arrears": true`).
23
You can also find your usage data on the [**Payment and billing** page](/manage/reference/billing/).
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
Access total outstanding balance plus invoice summaries for a given org.
1+
Access total outstanding balance plus invoice summaries for a given organization.
2+
This includes both monthly and annual invoices depending on the organization's billing configuration.

0 commit comments

Comments
 (0)