Billing and credits

This guide covers invoices and LoopiaPREPAID credits.

Check your credit balance

from loopiase import Loopia

client = Loopia("user@loopiaapi", "my_password")

balance = client.get_credits_amount()
print(f"Balance: {balance:.2f} SEK")

List unpaid invoices

invoices = client.get_unpaid_invoices()

if not invoices:
    print("No unpaid invoices!")
else:
    for inv in invoices:
        print(f"Invoice {inv.reference_no}: {inv.to_pay:.2f} {inv.currency} (due: {inv.expires})")

Example output:

Invoice INV-12345: 125.00 SEK (due: 2025-06-01)
Invoice INV-12346: 89.00 SEK (due: 2025-06-15)

Get invoice details

invoice = client.get_invoice("INV-12345")
print(f"Invoice: {invoice.reference_no}")
print(f"Total: {invoice.total:.2f} {invoice.currency}")
print(f"VAT: {invoice.vat:.2f}")
print(f"Credits applied: {invoice.credits:.2f}")
print(f"To pay: {invoice.to_pay:.2f}")
print(f"Due date: {invoice.expires}")
print()
print("Line items:")
for item in invoice.items:
    print(f"  {item.product:30s}  {item.subtotal:>8.2f} {invoice.currency}")

Pay an invoice using credits

from loopiase import LoopiaError

try:
    client.pay_invoice_using_credits("INV-12345")
    print("Invoice paid!")
except LoopiaError as e:
    if e.status == "INSUFFICIENT_FUNDS":
        print("Not enough credits to pay this invoice.")
    else:
        raise

Full example: auto-pay all unpaid invoices

from loopiase import Loopia, LoopiaError

client = Loopia("user@loopiaapi", "my_password")

balance = client.get_credits_amount()
print(f"Current balance: {balance:.2f} SEK")

for invoice in client.get_unpaid_invoices():
    if invoice.to_pay <= balance:
        try:
            client.pay_invoice_using_credits(invoice.reference_no)
            balance -= invoice.to_pay
            print(f"Paid {invoice.reference_no} ({invoice.to_pay:.2f} {invoice.currency})")
        except LoopiaError as e:
            print(f"Failed to pay {invoice.reference_no}: {e.status}")
    else:
        print(f"Skipping {invoice.reference_no}: {invoice.to_pay:.2f} exceeds balance {balance:.2f}")