Get invoice details

GET /api/v2/billing/invoices/{id}

Return invoice totals, line items, payment history, action gates, and invoice-specific payment-method availability.

Amounts live under totals; payment rows use method for the canonical enum and methodLabel for display text.

renewalInvoicing.isConsolidated is supplied only when the invoice matches the same automated-renewal logic used by invoice emails; do not infer a consolidated invoice from line-item count.

delivery appears only when the invoice travels as a Peppol e-invoice; its absence means a normal invoice.

Billing & Orders Invoices

Authentication

Required API scope: read:billing

Authenticate with an API key in the Authorization: Bearer <token> header.

Context

Path Parameters

id string required Example: inv_01hxa3b4c5d6e7f8g9h0j1k2m3

Public invoice ID from invoice list, an order response, or a billing activity row. Do not invent this value; use the exact ID returned by the referenced API response.

Query Parameters

skipCache integer · enum

Use 1 to refresh this invoice from the billing provider before returning its current payment state.

1

Headers

Authorization Bearer <token>
Accept application/json

Responses

200 Invoice details.
id string · Example: inv_01hxa3b4c5d6e7f8g9h0j1k2m3
orderId string · Example: ord_01hxa3b4c5d6e7f8g9h0j1k2m3

Public order ID when the invoice is attached to an order. Domain renewal invoices with an uncancelled order must cancel this order first.

number string · Example: 202600001

Customer-facing invoice number.

status string · enum · Example: unpaid
draft
unpaid
partially_paid
paid
cancelled
refunded
dates object
dates.issuedAt string · Example: 2026-04-27T12:00:00.000Z
dates.dueAt string · Example: 2026-05-11T23:59:59.000Z
dates.paidAt string · Example: 2026-04-27T12:10:00.000Z
totals object
totals.currencyCode string required · Example: SEK
totals.subtotal number required · Example: 127.2
totals.taxAmount number required · Example: 31.8
totals.taxRateDecimal number · Example: 0.25
totals.creditApplied number required · Example: 0
totals.total number required · Example: 159
totals.amountPaid number required · Example: 0
totals.amountRefunded number required · Example: 0

Total refunded amount recorded against the invoice. Zero when no refund has been recorded.

totals.outstanding number required · Example: 159
lineItemCount integer · Example: 1
lineItems array<object>
overpaymentCredit object

Present only when complete fresh payment and credit records confirm two settled full payments, one card and one Bankgiro, and their entire excess was automatically credited and remains available. This is explanatory evidence, not authorization to refund or add credit. Absence does not prove that an apparent overpayment is resolved.

overpaymentCredit.decision string · enum required
card_bankgiro_overpayment_already_credited
overpaymentCredit.currencyCode string · enum required
SEK
overpaymentCredit.invoiceAmount number required · Example: 211.25
overpaymentCredit.excessAmount number required · Example: 211.25
overpaymentCredit.creditedAt string required · Example: 2026-07-09
overpaymentCredit.currentCreditBalance number · min: 0 required · Example: 211.25
payments array<object>
payments[].kind string · nullable · enum · Example: payment

Optional row kind. account_credit_added marks an overpayment that was added to the customer's account credit instead of counted as an additional invoice payment.

payment
account_credit_added
payments[].method string · nullable · enum required · Example: card

Canonical payment method enum. Display labels and upstream gateway names never appear here; use methodLabel for text.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paypal
invoice
other
payments[].methodLabel string · nullable required · Example: Card

Human-readable payment method label for display.

payments[].amount number required · Example: 98.75
payments[].currencyCode string required · Example: SEK

ISO-4217 currency for amount.

note string · Example: Thank you for your order.
actions object
actions.canPay object required
actions.canPay.allowed boolean required · Example: true
actions.canPay.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canPay.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canGeneratePaymentLink object required
actions.canGeneratePaymentLink.allowed boolean required · Example: true
actions.canGeneratePaymentLink.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canGeneratePaymentLink.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canBulkPay object required
actions.canBulkPay.allowed boolean required · Example: true
actions.canBulkPay.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canBulkPay.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canCancel object required
actions.canCancel.allowed boolean required · Example: true
actions.canCancel.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canCancel.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canEmail object required
actions.canEmail.allowed boolean required · Example: true
actions.canEmail.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canEmail.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canDownload object required
actions.canDownload.allowed boolean required · Example: true
actions.canDownload.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canDownload.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.canReissueInCurrency object required

Whether the account can switch to EUR and have this invoice replaced by an EUR invoice for the same period, which makes SEPA bank transfer available (customers outside Sweden with a SEK invoice). Execute with POST /api/v2/billing/invoices/{id}/actions/reissue-in-currency. When blocked, branch on code: invoice_order_backed (a pending order or plan change backs the invoice: cancel that order and order again after changing currency), invoice_domain_renewal (cancel the renewal order and renew again), invoice_partially_settled, invoice_multiple_services, invoice_usage_not_reissuable and renewal_period_ended (contact support), account_country_not_eligible (Swedish accounts pay by bankgiro, Swish or card).

actions.canReissueInCurrency.allowed boolean required · Example: true
actions.canReissueInCurrency.reason string · nullable required · Example: null

Nullable: may be null when not applicable.

actions.canReissueInCurrency.code string · nullable · Example: pending_order

Machine-readable reason code when an action is blocked.

paymentMethods object

Per-method payment availability. Keys include card, accountCredit, swish, bankgiro, sepa, alipay, and crypto. Check these server-owned gates before starting a payment flow.

paymentMethods.card object required
paymentMethods.card.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paymentMethods.card.label string required · Example: Card
paymentMethods.card.available boolean required · Example: true
paymentMethods.card.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

paymentMethods.card.reason string · nullable required · Example: null

Human-readable blocker when available is false.

paymentMethods.card.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
paymentMethods.card.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

paymentMethods.card.requirements.invoiceCurrencyCode string · Example: SEK
paymentMethods.card.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
paymentMethods.card.requirements.accountCountryCode string · Example: SE
paymentMethods.card.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

paymentMethods.card.requirements.accountType string · enum · Example: private
private
organisation
paymentMethods.card.requirements.accountCurrencyCode string · Example: SEK
paymentMethods.card.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

paymentMethods.card.requirements.availableBalance object
paymentMethods.card.requirements.availableBalance.amount number required · Example: 100
paymentMethods.card.requirements.availableBalance.currencyCode string required · Example: SEK
paymentMethods.card.requirements.minimumAmount object
paymentMethods.card.requirements.minimumAmount.amount number required · Example: 3
paymentMethods.card.requirements.minimumAmount.currencyCode string required · Example: SEK
paymentMethods.card.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.card.requirements.maximumAmount object
paymentMethods.card.requirements.maximumAmount.amount number required · Example: 3
paymentMethods.card.requirements.maximumAmount.currencyCode string required · Example: SEK
paymentMethods.card.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.accountCredit object required
paymentMethods.accountCredit.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paymentMethods.accountCredit.label string required · Example: Card
paymentMethods.accountCredit.available boolean required · Example: true
paymentMethods.accountCredit.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

paymentMethods.accountCredit.reason string · nullable required · Example: null

Human-readable blocker when available is false.

paymentMethods.accountCredit.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
paymentMethods.accountCredit.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

paymentMethods.accountCredit.requirements.invoiceCurrencyCode string · Example: SEK
paymentMethods.accountCredit.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
paymentMethods.accountCredit.requirements.accountCountryCode string · Example: SE
paymentMethods.accountCredit.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

paymentMethods.accountCredit.requirements.accountType string · enum · Example: private
private
organisation
paymentMethods.accountCredit.requirements.accountCurrencyCode string · Example: SEK
paymentMethods.accountCredit.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

paymentMethods.accountCredit.requirements.availableBalance object
paymentMethods.accountCredit.requirements.availableBalance.amount number required · Example: 100
paymentMethods.accountCredit.requirements.availableBalance.currencyCode string required · Example: SEK
paymentMethods.accountCredit.requirements.minimumAmount object
paymentMethods.accountCredit.requirements.minimumAmount.amount number required · Example: 3
paymentMethods.accountCredit.requirements.minimumAmount.currencyCode string required · Example: SEK
paymentMethods.accountCredit.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.accountCredit.requirements.maximumAmount object
paymentMethods.accountCredit.requirements.maximumAmount.amount number required · Example: 3
paymentMethods.accountCredit.requirements.maximumAmount.currencyCode string required · Example: SEK
paymentMethods.accountCredit.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.swish object required
paymentMethods.swish.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paymentMethods.swish.label string required · Example: Card
paymentMethods.swish.available boolean required · Example: true
paymentMethods.swish.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

paymentMethods.swish.reason string · nullable required · Example: null

Human-readable blocker when available is false.

paymentMethods.swish.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
paymentMethods.swish.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

paymentMethods.swish.requirements.invoiceCurrencyCode string · Example: SEK
paymentMethods.swish.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
paymentMethods.swish.requirements.accountCountryCode string · Example: SE
paymentMethods.swish.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

paymentMethods.swish.requirements.accountType string · enum · Example: private
private
organisation
paymentMethods.swish.requirements.accountCurrencyCode string · Example: SEK
paymentMethods.swish.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

paymentMethods.swish.requirements.availableBalance object
paymentMethods.swish.requirements.availableBalance.amount number required · Example: 100
paymentMethods.swish.requirements.availableBalance.currencyCode string required · Example: SEK
paymentMethods.swish.requirements.minimumAmount object
paymentMethods.swish.requirements.minimumAmount.amount number required · Example: 3
paymentMethods.swish.requirements.minimumAmount.currencyCode string required · Example: SEK
paymentMethods.swish.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.swish.requirements.maximumAmount object
paymentMethods.swish.requirements.maximumAmount.amount number required · Example: 3
paymentMethods.swish.requirements.maximumAmount.currencyCode string required · Example: SEK
paymentMethods.swish.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.bankgiro object required
paymentMethods.bankgiro.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paymentMethods.bankgiro.label string required · Example: Card
paymentMethods.bankgiro.available boolean required · Example: true
paymentMethods.bankgiro.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

paymentMethods.bankgiro.reason string · nullable required · Example: null

Human-readable blocker when available is false.

paymentMethods.bankgiro.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
paymentMethods.bankgiro.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

paymentMethods.bankgiro.requirements.invoiceCurrencyCode string · Example: SEK
paymentMethods.bankgiro.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
paymentMethods.bankgiro.requirements.accountCountryCode string · Example: SE
paymentMethods.bankgiro.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

paymentMethods.bankgiro.requirements.accountType string · enum · Example: private
private
organisation
paymentMethods.bankgiro.requirements.accountCurrencyCode string · Example: SEK
paymentMethods.bankgiro.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

paymentMethods.bankgiro.requirements.availableBalance object
paymentMethods.bankgiro.requirements.availableBalance.amount number required · Example: 100
paymentMethods.bankgiro.requirements.availableBalance.currencyCode string required · Example: SEK
paymentMethods.bankgiro.requirements.minimumAmount object
paymentMethods.bankgiro.requirements.minimumAmount.amount number required · Example: 3
paymentMethods.bankgiro.requirements.minimumAmount.currencyCode string required · Example: SEK
paymentMethods.bankgiro.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.bankgiro.requirements.maximumAmount object
paymentMethods.bankgiro.requirements.maximumAmount.amount number required · Example: 3
paymentMethods.bankgiro.requirements.maximumAmount.currencyCode string required · Example: SEK
paymentMethods.bankgiro.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.sepa object required
paymentMethods.sepa.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paymentMethods.sepa.label string required · Example: Card
paymentMethods.sepa.available boolean required · Example: true
paymentMethods.sepa.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

paymentMethods.sepa.reason string · nullable required · Example: null

Human-readable blocker when available is false.

paymentMethods.sepa.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
paymentMethods.sepa.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

paymentMethods.sepa.requirements.invoiceCurrencyCode string · Example: SEK
paymentMethods.sepa.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
paymentMethods.sepa.requirements.accountCountryCode string · Example: SE
paymentMethods.sepa.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

paymentMethods.sepa.requirements.accountType string · enum · Example: private
private
organisation
paymentMethods.sepa.requirements.accountCurrencyCode string · Example: SEK
paymentMethods.sepa.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

paymentMethods.sepa.requirements.availableBalance object
paymentMethods.sepa.requirements.availableBalance.amount number required · Example: 100
paymentMethods.sepa.requirements.availableBalance.currencyCode string required · Example: SEK
paymentMethods.sepa.requirements.minimumAmount object
paymentMethods.sepa.requirements.minimumAmount.amount number required · Example: 3
paymentMethods.sepa.requirements.minimumAmount.currencyCode string required · Example: SEK
paymentMethods.sepa.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.sepa.requirements.maximumAmount object
paymentMethods.sepa.requirements.maximumAmount.amount number required · Example: 3
paymentMethods.sepa.requirements.maximumAmount.currencyCode string required · Example: SEK
paymentMethods.sepa.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.alipay object required
paymentMethods.alipay.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paymentMethods.alipay.label string required · Example: Card
paymentMethods.alipay.available boolean required · Example: true
paymentMethods.alipay.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

paymentMethods.alipay.reason string · nullable required · Example: null

Human-readable blocker when available is false.

paymentMethods.alipay.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
paymentMethods.alipay.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

paymentMethods.alipay.requirements.invoiceCurrencyCode string · Example: SEK
paymentMethods.alipay.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
paymentMethods.alipay.requirements.accountCountryCode string · Example: SE
paymentMethods.alipay.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

paymentMethods.alipay.requirements.accountType string · enum · Example: private
private
organisation
paymentMethods.alipay.requirements.accountCurrencyCode string · Example: SEK
paymentMethods.alipay.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

paymentMethods.alipay.requirements.availableBalance object
paymentMethods.alipay.requirements.availableBalance.amount number required · Example: 100
paymentMethods.alipay.requirements.availableBalance.currencyCode string required · Example: SEK
paymentMethods.alipay.requirements.minimumAmount object
paymentMethods.alipay.requirements.minimumAmount.amount number required · Example: 3
paymentMethods.alipay.requirements.minimumAmount.currencyCode string required · Example: SEK
paymentMethods.alipay.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.alipay.requirements.maximumAmount object
paymentMethods.alipay.requirements.maximumAmount.amount number required · Example: 3
paymentMethods.alipay.requirements.maximumAmount.currencyCode string required · Example: SEK
paymentMethods.alipay.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.crypto object required
paymentMethods.crypto.method string · enum required · Example: card

Canonical v2 payment method. Card-backed hosted checkout and wallet flows are represented as card; provider names are not public v2 method values.

card
accountCredit
swish
bankgiro
sepa
alipay
crypto
paymentMethods.crypto.label string required · Example: Card
paymentMethods.crypto.available boolean required · Example: true
paymentMethods.crypto.visible boolean · Example: true

Present for restricted methods. When false, the method must not be rendered to the customer.

paymentMethods.crypto.reason string · nullable required · Example: null

Human-readable blocker when available is false.

paymentMethods.crypto.checkoutMode string · nullable · enum required · Example: payment

Hosted checkout mode used by the existing payment session endpoint, or null for methods handled without hosted checkout.

payment
sepa_bank_transfer_payment
alipay_payment
paymentMethods.crypto.requirements object required

Machine-readable requirements for the payment method. Examples: card minimum amount, Swish/Bankgiro Swedish account requirement, SEPA bank transfer EUR requirement, cryptocurrency account eligibility, account-credit balance limit.

paymentMethods.crypto.requirements.invoiceCurrencyCode string · Example: SEK
paymentMethods.crypto.requirements.invoiceCurrencyCodes array<string> · Example: ["EUR","USD"]
paymentMethods.crypto.requirements.accountCountryCode string · Example: SE
paymentMethods.crypto.requirements.accountCountryExcludedCode string · Example: SE

Billing country that is explicitly excluded for this method.

paymentMethods.crypto.requirements.accountType string · enum · Example: private
private
organisation
paymentMethods.crypto.requirements.accountCurrencyCode string · Example: SEK
paymentMethods.crypto.requirements.requiresCardVerification boolean · Example: true

Whether a saved card or prior successful card payment is required.

paymentMethods.crypto.requirements.availableBalance object
paymentMethods.crypto.requirements.availableBalance.amount number required · Example: 100
paymentMethods.crypto.requirements.availableBalance.currencyCode string required · Example: SEK
paymentMethods.crypto.requirements.minimumAmount object
paymentMethods.crypto.requirements.minimumAmount.amount number required · Example: 3
paymentMethods.crypto.requirements.minimumAmount.currencyCode string required · Example: SEK
paymentMethods.crypto.requirements.minimumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentMethods.crypto.requirements.maximumAmount object
paymentMethods.crypto.requirements.maximumAmount.amount number required · Example: 3
paymentMethods.crypto.requirements.maximumAmount.currencyCode string required · Example: SEK
paymentMethods.crypto.requirements.maximumAmount.comparison string · enum required · Example: greater_than
greater_than
less_than_or_equal
paymentLinkGeneratorUrl string · nullable · Example: /api/v2/billing/invoices/inv_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/generate-payment-link

isBulkPaymentChild boolean · Example: false
bulkPaymentParentId string · nullable · Example: null

coversInvoiceIds array<string> · Example: ["inv_01hxa3b4c5d6e7f8g9h0j1k2m3"]
renewalInvoicing object

Present only when the invoice detail route can evaluate the same renewal invoicing preference logic used by invoice emails.

renewalInvoicing.preference string · enum required · Example: consolidated
consolidated
separate
renewalInvoicing.generatedByAutomation boolean required · Example: true

True when the invoice was generated by the renewal automation path that also shows the invoice-email preference note.

renewalInvoicing.isConsolidated boolean required · Example: true

True only when this is an automated renewal invoice and the account preference was consolidated at generation time. Do not infer this from line-item count.

renewalInvoicing.label string required · Example: Consolidated renewal invoice
renewalInvoicing.settingsUrl string required · Example: /account
delivery object

Present only when the invoice is delivered as an e-invoice via the Peppol network. Absent for normal invoices.

delivery.channel string · enum required · Example: peppol
peppol
delivery.status string · enum required · Example: sent

queued = accepted for e-invoice dispatch (waiting for the send window, or a same-day unpaid invoice of a Peppol-registered organisation that the bookkeeping platform has not picked up yet); sent = transmitted into the Peppol network; delivered = the recipient's access point confirmed receipt. Failed or ineligible deliveries never appear here — those invoices present as normal invoices without a delivery field.

queued
sent
delivered
delivery.sentAt string · nullable required · Example: 2026-07-28T08:15:00.000Z

Moment the e-invoice was transmitted into the Peppol network. Null while the delivery is still queued.

delivery.deliveredAt string · nullable required · Example: null

Receipt confirmation from the recipient's access point. Null until confirmed.

cancellation object

Present only on a cancelled invoice whose cancellation reason is verified. Returned by the invoice detail endpoint; list items never carry it.

cancellation.code string · enum required · Example: domain_registered_elsewhere

Stable machine value. domain_registered_elsewhere = an unpaid order for a NEW domain registration was cancelled automatically because the name was registered by someone else before the invoice was paid. A new domain is registered only once its invoice is paid, so the name was never held on this account and nothing was charged.

domain_registered_elsewhere
cancellation.reason string required · Example: example.se was registered by someone else before this invoice was paid, so the order wa...

Human-readable explanation in English. Use code to branch or to pick localized copy.

cancellation.domainName string required · Example: example.se

The ordered domain name.

cancellation.registrarName string · nullable required · Example: Example Registrar AB

The registrar the name is now registered through, as published by the registry. null when not known.

cancellation.registeredAt string · nullable required · Example: 2026-08-31T00:00:00.000Z

When the other registration was created at the registry (day precision, midnight UTC). null when not known.

cancellation.cancelledAt string · nullable required · Example: 2026-09-01T02:50:23.717Z

When the order and invoice were cancelled. It follows registeredAt because the cancellation is a consequence of that registration.

400 Invalid request. The response body is an RFC 7807 Problem Details document.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
401 Unauthorized. Authentication is required.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
403 Forbidden. The caller lacks a required scope or does not own the resource.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
404 Not found. The resource does not exist or is not owned by the caller; code is invoice_not_found.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
429 Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
500 Internal error. Retry later or contact support if the issue persists.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
GET https://cloud.hostup.se/api/v2/billing/invoices/{id}
For AI assistants
View as Markdown
cURL
curl -X GET "https://cloud.hostup.se/api/v2/billing/invoices/inv_01hxa3b4c5d6e7f8g9h0j1k2m3" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
Response
// Paid invoice with canonical payment history
{
  "id": "inv_06ex6yz35kn5w7dgzpzg4f4v3g",
  "orderId": "ord_06ex6yz13fh2qvpe8key9vetj0",
  "number": "202664056",
  "status": "paid",
  "dates": {
    "issuedAt": "2026-04-28T00:00:00.000Z",
    "dueAt": "2026-05-12T00:00:00.000Z",
    "paidAt": "2026-04-28T09:47:47.000Z"
  },
  "totals": {
    "currencyCode": "SEK",
    "subtotal": 79,
    "taxAmount": 19.75,
    "taxRateDecimal": 0.25,
    "creditApplied": 0,
    "total": 98.75,
    "amountPaid": 98.75,
    "amountRefunded": 0,
    "outstanding": 0
  },
  "lineItemCount": 2,
  "lineItems": [
    {
      "kind": "domain",
      "purpose": "registration",
      "resource": {
        "type": "domain",
        "id": "dom_06ex6z7c41av0cvgzkhrrqpwar",
        "displayName": "example.com"
      },
      "description": "Domain registration for example.com",
      "displayDescription": "Domain registration: example.com",
      "displaySecondaryLines": [
        "2026-04-28 - 2027-04-28"
      ],
      "quantity": 1,
      "unitAmount": 99,
      "totalAmount": 99,
      "currencyCode": "SEK",
      "period": {
        "startAt": "2026-04-28T00:00:00.000Z",
        "endAt": "2027-04-28T00:00:00.000Z"
      }
    },
    {
      "kind": "domain",
      "purpose": "registration",
      "resource": {
        "type": "domain",
        "id": "dom_06ex6z7c430873qcb91bmdk3k4",
        "displayName": "example.com"
      },
      "description": "Discount: Domain registration for example.com",
      "displayDescription": "Discount: Domain registration: example.com",
      "displaySecondaryLines": [
        "2026-04-28 - 2027-04-28"
      ],
      "quantity": 1,
      "unitAmount": -20,
      "totalAmount": -20,
      "currencyCode": "SEK",
      "period": {
        "startAt": "2026-04-28T00:00:00.000Z",
        "endAt": "2027-04-28T00:00:00.000Z"
      }
    }
  ],
  "payments": [
    {
      "method": "card",
      "methodLabel": "Card",
      "amount": 98.75,
      "currencyCode": "SEK"
    }
  ],
  "actions": {
    "canPay": {
      "allowed": false,
      "reason": "Invoice is already paid."
    },
    "canGeneratePaymentLink": {
      "allowed": false,
      "reason": "Invoice is already paid."
    },
    "canBulkPay": {
      "allowed": false,
      "reason": "Invoice is already paid."
    },
    "canCancel": {
      "allowed": false,
      "reason": "Only unpaid invoices can be cancelled."
    },
    "canEmail": {
      "allowed": true,
      "reason": null
    },
    "canDownload": {
      "allowed": true,
      "reason": null
    }
  },
  "paymentMethods": {
    "card": {
      "method": "card",
      "label": "Card",
      "available": false,
      "reason": "Invoice is already paid.",
      "checkoutMode": "payment",
      "requirements": {
        "minimumAmount": {
          "amount": 3,
          "currencyCode": "SEK",
          "comparison": "greater_than"
        }
      }
    },
    "accountCredit": {
      "method": "accountCredit",
      "label": "Account credit",
      "available": false,
      "reason": "Invoice is already paid.",
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCode": "SEK",
        "accountCurrencyCode": "SEK",
        "availableBalance": {
          "amount": 0,
          "currencyCode": "SEK"
        },
        "maximumAmount": {
          "amount": 0,
          "currencyCode": "SEK",
          "comparison": "less_than_or_equal"
        }
      }
    },
    "swish": {
      "method": "swish",
      "label": "Swish",
      "available": false,
      "reason": "Invoice is already paid.",
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCode": "SEK",
        "accountCountryCode": "SE"
      }
    },
    "bankgiro": {
      "method": "bankgiro",
      "label": "Bankgiro",
      "available": false,
      "reason": "Invoice is already paid.",
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCode": "SEK",
        "accountCountryCode": "SE"
      }
    },
    "sepa": {
      "method": "sepa",
      "label": "SEPA bank transfer",
      "available": false,
      "reason": "Invoice is already paid.",
      "checkoutMode": "sepa_bank_transfer_payment",
      "requirements": {
        "invoiceCurrencyCode": "EUR"
      }
    },
    "alipay": {
      "method": "alipay",
      "label": "Alipay",
      "available": false,
      "reason": "Invoice is already paid.",
      "checkoutMode": "alipay_payment",
      "requirements": {
        "invoiceCurrencyCodes": [
          "EUR",
          "USD"
        ]
      }
    },
    "crypto": {
      "method": "crypto",
      "label": "Cryptocurrency",
      "available": false,
      "reason": "Cryptocurrency payments are not available for Swedish billing accounts.",
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCodes": [
          "SEK",
          "EUR",
          "USD"
        ],
        "accountCountryExcludedCode": "SE",
        "accountType": "private",
        "requiresCardVerification": true
      },
      "visible": false
    }
  },
  "paymentLinkGeneratorUrl": null,
  "isBulkPaymentChild": false,
  "bulkPaymentParentId": null
}

// Automated consolidated renewal invoice
{
  "id": "inv_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "number": "202600101",
  "status": "unpaid",
  "dates": {
    "issuedAt": "2026-04-27T12:00:00.000Z",
    "dueAt": "2026-05-11T23:59:59.000Z"
  },
  "totals": {
    "currencyCode": "SEK",
    "subtotal": 199,
    "taxAmount": 49.75,
    "taxRateDecimal": 0.25,
    "creditApplied": 0,
    "total": 248.75,
    "amountPaid": 0,
    "amountRefunded": 0,
    "outstanding": 248.75
  },
  "lineItemCount": 3,
  "actions": {
    "canPay": {
      "allowed": true,
      "reason": null
    },
    "canGeneratePaymentLink": {
      "allowed": true,
      "reason": null
    },
    "canBulkPay": {
      "allowed": true,
      "reason": null
    },
    "canCancel": {
      "allowed": false,
      "reason": "Domain renewal invoices can only be cancelled after the related order is cancelled."
    },
    "canEmail": {
      "allowed": true,
      "reason": null
    },
    "canDownload": {
      "allowed": true,
      "reason": null
    }
  },
  "paymentMethods": {
    "card": {
      "method": "card",
      "label": "Card",
      "available": true,
      "reason": null,
      "checkoutMode": "payment",
      "requirements": {
        "minimumAmount": {
          "amount": 3,
          "currencyCode": "SEK",
          "comparison": "greater_than"
        }
      }
    },
    "accountCredit": {
      "method": "accountCredit",
      "label": "Account credit",
      "available": false,
      "reason": "No account credit is available.",
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCode": "SEK",
        "accountCurrencyCode": "SEK",
        "availableBalance": {
          "amount": 0,
          "currencyCode": "SEK"
        },
        "maximumAmount": {
          "amount": 0,
          "currencyCode": "SEK",
          "comparison": "less_than_or_equal"
        }
      }
    },
    "swish": {
      "method": "swish",
      "label": "Swish",
      "available": true,
      "reason": null,
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCode": "SEK",
        "accountCountryCode": "SE"
      }
    },
    "bankgiro": {
      "method": "bankgiro",
      "label": "Bankgiro",
      "available": true,
      "reason": null,
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCode": "SEK",
        "accountCountryCode": "SE"
      }
    },
    "sepa": {
      "method": "sepa",
      "label": "SEPA bank transfer",
      "available": false,
      "reason": "SEPA bank transfer is only available for EUR invoices.",
      "checkoutMode": "sepa_bank_transfer_payment",
      "requirements": {
        "invoiceCurrencyCode": "EUR"
      }
    },
    "alipay": {
      "method": "alipay",
      "label": "Alipay",
      "available": false,
      "reason": "Alipay is not available for SEK invoices. Use card or another payment method.",
      "checkoutMode": "alipay_payment",
      "requirements": {
        "invoiceCurrencyCodes": [
          "EUR",
          "USD"
        ]
      }
    },
    "crypto": {
      "method": "crypto",
      "label": "Cryptocurrency",
      "available": false,
      "reason": "Cryptocurrency payments are not available for Swedish billing accounts.",
      "checkoutMode": null,
      "requirements": {
        "invoiceCurrencyCodes": [
          "SEK",
          "EUR",
          "USD"
        ],
        "accountCountryExcludedCode": "SE",
        "accountType": "private",
        "requiresCardVerification": true
      },
      "visible": false
    }
  },
  "paymentLinkGeneratorUrl": "/api/v2/billing/invoices/inv_01hxa3b4c5d6e7f8g9h0j1k2m3/actions/generate-payment-link",
  "isBulkPaymentChild": false,
  "bulkPaymentParentId": null,
  "renewalInvoicing": {
    "preference": "consolidated",
    "generatedByAutomation": true,
    "isConsolidated": true,
    "label": "Consolidated renewal invoice",
    "settingsUrl": "/account"
  }
}