Customers

The people and companies you bill. Customers own saved cards, subscriptions and invoices.

The customer object

idstring
Prefixed cus_.
emailstring
namestring | null
phonestring | null
kennitalastring | null
Icelandic national or company id. Needed for bank-invoice collection.
external_idstring | null
Your own id. Usage events can reference it as external_customer_id.
vat_numberstring | null
tax_exemptenum
none, exempt or reverse. See VAT status.
invoice_emailstring | null
Where invoices go when not to email. See collection setup.
billing_addressobject | null
line1, line2, city, postal_code, country.
default_payment_methodstring | null
The pm_ charged by subscriptions.
metadataobject
created_attimestamp
updated_attimestamp

VAT status

tax_exempt says whether VAT applies to a customer's invoices. none, the default, charges VAT at each line's rate. exempt books every line at 0% VAT. reverse books at 0% too and marks the invoice as reverse charge, for a business in another EU country that accounts for the VAT itself; give it a vat_number as well, since the invoice must show it.

An exempt or reverse-charge customer is charged the prices without their VAT: each line's unit price is backed out of the VAT-inclusive price at its rate, so a 1,240 kr. price at 24% bills them 1,000 kr. with no tax. That applies wherever Borga computes a charge from prices: subscription invoices, prorations, quotes, a subscription started from checkout, and a payment whose customer is known when it is created. A checkout session is priced without VAT when you create it for such a customer, by customer or by a customer_email that belongs to one. An email the payer types at checkout never changes the price: a customer attached that way keeps the amount paid and loses only the tax on the invoice, and you refund the VAT afterwards if you choose to. Wallets report the email after the payment, so this keeps one flow for every method. The status is frozen on each invoice as tax_exempt when the invoice is built, so changing it never moves an invoice already issued.

Collection setup

Everything Borga needs to collect from a customer by bank claim or invoice lives on the customer, set once and used by every subscription and invoice after: kennitala, which a bank claim is addressed to; invoice_email, where invoices and claim notifications go when the payer's own email is not the accounts-payable address; name, vat_number and the billing address, printed on the invoice; and the customer's record in your accounting system, which Borga creates on the first invoice and reuses. A subscription chooses collection_method and days_until_due; the customer supplies the rest.

Create a customer

POST/v1/customersSecret key

Body

emailstringrequired
namestring
phonestring
kennitalastring
external_idstring
Your own identifier, unique per customer.
vat_numberstring
tax_exemptenumdefault: none
exempt or reverse. See VAT status.
invoice_emailstring
Accounts-payable address for invoices, when not email.
billing_address_line1string
billing_address_line2string
billing_citystring
billing_postal_codestring
billing_countrystring
ISO 3166-1 alpha-2, for example IS.
metadataobject
curl https://api.borga.is/v1/customers \
  -H "Authorization: Bearer sk_test_…" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "anna@example.is",
    "name": "Anna Jónsdóttir",
    "kennitala": "0101302989",
    "external_id": "user_12345",
    "billing_address_line1": "Laugavegur 1",
    "billing_postal_code": "101",
    "billing_city": "Reykjavík",
    "billing_country": "IS"
  }'
Response
{
  "id": "cus_8Jk2Lm4Np6Qr8St0Uv2Wx4Yz",
  "email": "anna@example.is",
  "name": "Anna Jónsdóttir",
  "phone": null,
  "kennitala": "0101302989",
  "external_id": "user_12345",
  "vat_number": null,
  "billing_address": {
    "line1": "Laugavegur 1",
    "line2": null,
    "city": "Reykjavík",
    "postal_code": "101",
    "country": "IS"
  },
  "metadata": {},
  "default_payment_method": null,
  "created_at": "2026-09-07T10:00:00.000Z",
  "updated_at": "2026-09-07T10:00:00.000Z"
}

Retrieve a customer

GET/v1/customers/:idSecret key

Update a customer

PATCH/v1/customers/:idSecret key

Accepts the same fields as create, all optional. Only the fields you send are changed.

Body

emailstring
namestring
phonestring
kennitalastring
external_idstring
Send an empty string to clear.
vat_numberstring
tax_exemptenum
none, exempt or reverse. Applies to invoices issued from the change on.
invoice_emailstring
Send an empty string to clear.
billing_address_line1string
billing_address_line2string
billing_citystring
billing_postal_codestring
billing_countrystring
metadataobject

Customer billing state

Everything a customer-facing billing page needs, in one call: the customer's active, trialing and past_due subscriptions with their items, and every meter balance. Documented with the meters at customer billing state; the SDK exposes it as borga.customers.state(id).

List customers

GET/v1/customersSecret key

Query parameters

emailstring
Exact match, case-insensitive.
limitintegerdefault: 25
starting_afterstring