Billing
Plan, subscription
Plan, subscription (`paid_by`: card | bank_transfer), current period (included / used / from credit / overage), prepaid credit, headroom, spending limit, hold, plans, credit pack range and Paddle.js settings (client token, environment). A client workspace billed to its agency gets `billed_to_agency` { agency_id, agency_name, spending_cap_usd, usage_usd, cap_left_usd }, the agency's plan, `can_manage: false` and no agency subscription/credit details; its billing writes (checkout, credit, plan, spending limit, bank transfer) answer 409 `{billed_to_agency: true}`
Prepaid credit history
Prepaid credit history
Usage by billing period
Usage by billing period
Completed Paddle transactions
Completed Paddle transactions (plan, credit, overage) with tax and totals, newest first. `format=csv` downloads the filtered list (at most 5,000 rows)
A short-lived link to the invoice PDF rendered by Paddle
A short-lived link to the invoice PDF rendered by Paddle
Create checkout (billing)
Subscribe: creates the Paddle customer (first time) and a transaction for the plan's monthly or yearly price (a trial, when the plan has one, is on the Paddle price); open it with Paddle.Checkout.open({ transactionId }). The plan starts when Paddle's webhook arrives. Included usage is monthly on yearly plans too.
What a promo code gives on a plan before checkout
What a promo code gives on a plan before checkout (new subscriptions only, not credit). Refused alike when unknown, inactive, expired, used up, not enabled for checkout, in another currency or restricted to other prices
Buy prepaid credit
Buy prepaid credit (whole USD within credit_packs.min_usdβmax_usd); credited when the transaction completes
What a plan or interval change does, before confirming
What a plan or interval change does, before confirming. mode `now` (an upgrade, or any change in a trial): Paddle's prorated amounts β new_plan_amount (the new plan for the rest of the period), unused_credit (the unused part of the old plan), tax, result_action charge | credit and result_amount (tax in); covered: true when Paddle was already paid for the target plan (or a higher one) in the current billing period, same interval and not yet ended (an upgrade back after a downgrade), so it applies unbilled (do_not_bill) until the next renewal. mode `scheduled` (a downgrade: a lower plan, or year β month): nothing is charged now and the change takes effect at effective_at, the end of the paid period
Change plan or interval
Change plan or interval. An upgrade (higher plan, or month β year) applies now, prorated (refused if the card is declined); a downgrade is scheduled for the end of the paid period and shows as subscription.pending_change { plan, interval, effective_at, state: scheduled | applying | failed | review, error }. In a trial every change applies now, unbilled
Take back a downgrade waiting for the end of the period
Take back a downgrade waiting for the end of the period (state scheduled or failed)
Cancel at the end of the paid period
Cancel at the end of the paid period
Take back a scheduled cancellation
Take back a scheduled cancellation
Paddle customer portal link
Paddle customer portal link (address, tax id; cards are also managed in-app under /billing/payment-methods)
Automatic top-up
Owner/admin: automatic top-up. When prepaid credit drops below `below_usd`, a one-time charge of `amount_usd` (plus tax) on the subscription's card buys more; the credit lands with Paddle's webhook, and no second top-up is sent before it does. Saving it while credit is already below `below_usd` sends the first top-up at once, on the queue: the answer shows it as pending at most, so poll GET /billing for the outcome (credit landed, `enabled: false` with `error` when declined, `pending_usd` with `error` when unconfirmed). A declined card turns it off and notifies the account. Saving clears the last `error`/`paused`, unless a top-up is still pending. `below_usd: null` turns it off. An approved refund or chargeback turns it off too. GET /billing returns the state as `auto_topup` { enabled, below_usd, amount_usd, pending_usd, last_at, error, paused: { action: refund | chargeback, invoice } | null, available }
List payment methods (billing)
Cards (and PayPal) saved with Paddle: { id, type, brand, last4, expiry_month, expiry_year, paypal_email, saved_at }. Empty before the first payment
Remove a saved card
Owner/admin: remove a saved card. The last card stays while a card subscription renews on it
The card subscription's next charge from Paddle
The card subscription's next charge from Paddle (next_billed_at, next_total with discount and tax in, next_discount, next_tax, currency, discount_ends_at) and the card it renews on (`card`, a payment method from its latest paid transaction; Paddle lists it among saved methods only if the customer chose so). Cached 5 minutes per subscription version and latest invoice, so a card change shows as soon as its transaction lands
Replace the card the subscription renews on
Owner/admin: replace the card the subscription renews on. Returns a zero-amount transaction to open with Paddle.Checkout.open({ transactionId })
Cap pay-as-you-go overage
Cap pay-as-you-go overage (null = the plan's maximum)
Bank-transfer billing
Bank-transfer billing (VND): enabled, provider (paddle | bank_transfer), can_choose, can_manage, vat_percent, fx_vnd_per_usd, fx_source (paddle: the rate and the standard plans' VND prices follow Paddle's USDβVND conversion; fixed: Lantfly staff settings), receiving bank, VND plan prices (monthly, yearly), top-up range, the bank-transfer subscription, open invoices/quotes, billing profile
Pay by card
Pay by card (Paddle, USD) or bank transfer (VND invoices). Self-serve only when the installation allows it, and only while no subscription is live
VND invoices, newest first
VND invoices, newest first (status open | underpaid | paid | expired | void)
Issue an invoice
Issue an invoice: a plan term (an upgrade mid-term takes off the unused part; a downgrade starts when the term ends) or a credit top-up. Prices exclude VAT; the exchange rate is locked on the invoice. Asking again for the same plan returns the open invoice
One invoice
One invoice: amounts in Δα»ng, buyer snapshot, and how to pay (account, memo, VietQR payload, optional img.vietqr.io link)
Transferred invoice
'I've transferred': notifies Lantfly staff, changes nothing (payments are confirmed by the bank webhook or Lantfly staff). Once an hour
Withdraw an invoice nothing was paid on
Withdraw an invoice nothing was paid on
Who the VAT invoice
Who the VAT invoice (hoΓ‘ ΔΖ‘n Δα») is made out to
Set the VAT invoice details
Set the VAT invoice details. tax_code: 10 digits with a valid check digit, 10-3 for a branch, or 12 digits (personal)
Stop renewing the bank-transfer plan
Stop renewing the bank-transfer plan: it runs to the end of the paid term, then Free (open renewal invoices are voided)
Take back the cancellation
Take back the cancellation
Quotes sent to the account
Quotes sent to the account (enterprise custom plans)
One quote
One quote: plan name, limits, included usage, VND price per term, VAT, terms text, valid_until, acceptable
Accept quote
Accept: the account moves to bank transfer and the quote's invoice is issued; paid, the account runs on plan quote_β¨idβ© for the term
Decline the quote
Decline the quote