Prices
How much a product costs and how often it is billed. Prices are immutable apart from activation and metadata.
The price object
price_.one_time or recurring.null for tiered prices. Includes VAT unless tax_behavior is exclusive.interval (day, week, month, year), interval_count, usage_type (licensed or metered), aggregate_usage.up_to (number or null for the last tier), unit_amount, flat_amount.graduated or volume.Amounts and VAT
By default (tax_behavior: "inclusive") a price's amounts are what the
customer pays, VAT included. The product's
tax_rate says how much of that is VAT, so the invoice line can
show the net and the tax: a monthly price of 1,240 kr. on a product at
tax_rate: 2400 charges 1,240 kr. and books as 1,000 kr. plus 240 kr. VAT.
Changing the rate never changes what an inclusive price charges.
Every amount in Borga works this way by default, a payment's line items
included: unit_amount is the figure quoted to the customer and carries the VAT
the way a shelf price does.
If your catalogue is priced before VAT, create the price with
tax_behavior: "exclusive". Its unit_amount and tier amounts are then the
net, and every invoice line built from the price adds the VAT at the product's
rate on top, rounded per unit: a monthly price of 999 kr. at 24% bills 1,239
kr., booked as 999 kr. plus 240 kr. VAT. The charges, prorations, discounts,
quotes and MRR all work from that gross. Here a corrected product rate does
change what is charged, since the VAT is added to the net. tax_behavior is
fixed when the price is created, like its amounts.
These examples are for a customer who pays VAT. A customer whose
VAT status is exempt or reverse is charged the
net with no VAT under either behaviour: 1,000 kr. for the inclusive price above,
999 kr. for the exclusive one.
The rate is read when an invoice line is built: the product's tax_rate, else
your default VAT rate under Settings. VAT is off until you turn it on there
with a rate; off, nothing is booked as tax and the customer is charged the
amount. A corrected product rate, or a change in the law, reaches every invoice
from then on; each line keeps the rate it was booked at.
Create a price
Body
one_time or recurring.inclusive when unit_amount and the tiers include VAT, exclusive when they are the net and the product's VAT is added on top.{ interval, interval_count?, usage_type?, aggregate_usage? }. interval is day, week, month or year.graduated prices each band separately; volume prices everything at the reached band.[{ up_to, unit_amount?, flat_amount? }], ordered, last tier with up_to: null.recurring.usage_type is metered.const product = await borga.products.create({
name: "Pro plan",
description: "Everything in Starter plus priority support",
});
const monthly = await borga.prices.create({
product: product.id,
type: "recurring",
currency: "ISK",
unit_amount: 4990, // 4.990 kr. per seat per month
recurring: { interval: "month", interval_count: 1 },
});
const yearly = await borga.prices.create({
product: product.id,
type: "recurring",
currency: "ISK",
unit_amount: 49900,
recurring: { interval: "year" },
});const price = await borga.prices.create({
product: "prod_4Gh6Ij8Kl0Mn2Op4Qr6St8Uv",
type: "recurring",
currency: "ISK",
recurring: { interval: "month", usage_type: "metered" },
meter: "mtr_1Zx3Cv5Bn7Mq9We1Rt3Yu5Io",
included_units: 10_000, // first 10k requests are free
tiers_mode: "graduated",
tiers: [
{ up_to: 100_000, unit_amount: 2 }, // 2 kr. per request
{ up_to: null, unit_amount: 1 }, // 1 kr. above 100k
],
});{
"id": "price_2Ab4Cd6Ef8Gh0Ij2Kl4Mn6Op",
"product": "prod_4Gh6Ij8Kl0Mn2Op4Qr6St8Uv",
"active": true,
"currency": "ISK",
"type": "recurring",
"unit_amount": 4990,
"tax_behavior": "inclusive",
"recurring": { "interval": "month", "interval_count": 1, "usage_type": "licensed" },
"tiers": null,
"tiers_mode": null,
"meter": null,
"included_units": null,
"accounting_code": null,
"metadata": {},
"created_at": "2026-09-07T10:00:00.000Z",
"updated_at": "2026-09-07T10:00:00.000Z"
}Errors: missing_meter, resource_not_found for product or meter.
Retrieve a price
Update a price
Amounts and intervals cannot change; create a new price and move subscriptions to it.