Payments
Record payments you’ve taken through your own system against a patient’s Vodett invoice.
GET /invoices
List the clinic’s invoices with their outstanding balance. Requires the billing module.
Parameters (query):
patient_id(optional — filter to one patient)unpaid(bool, optional — only invoices with a balance)
curl "https://api.vodett.ai/api/public/v1/invoices?unpaid=true" \
-H "Authorization: Bearer vodett_sk_live_your_key_here"[
{ "id": "…uuid…", "invoice_number": "INV-000123", "patient_id": "…uuid…", "status": "issued", "currency": "EUR", "total": 100.0, "amount_paid": 0.0, "balance": 100.0, "issued_at": "2026-08-20T09:00:00Z" }
]Use the invoice id and balance to record a payment below.
POST /invoices/{invoice_id}/payments
Records a payment against an invoice. Requires the payments module.
Parameters (JSON body):
amount(number, required — greater than 0, up to the balance)method(string, required — one ofcash,card,bank,other)note(string, optional — recommended formethod: other)
Optional header Idempotency-Key: send a unique key to make retries safe — a repeat with the same key returns the original payment instead of charging twice.
curl -X POST https://api.vodett.ai/api/public/v1/invoices/INVOICE_ID/payments \
-H "Authorization: Bearer vodett_sk_live_your_key_here" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7c1d2e33-unique-per-payment" \
-d '{"amount":40.00,"method":"card"}'{ "payment_id": "…uuid…", "invoice_id": "…uuid…", "patient_id": "…uuid…", "amount": 40.0, "method": "card", "currency": "EUR", "created_at": "2026-08-25T12:34:56Z", "invoice_status": "partially_paid", "invoice_total": 100.0, "invoice_amount_paid": 40.0, "invoice_balance": 60.0 }Partial payments are supported — pay any amount up to the balance; the invoice becomes paid when the balance reaches zero, and the patient is notified. A payment above the remaining balance is rejected.
GET /payment-methods
Lists the valid payment methods.
[
{ "key": "cash", "requires_note": false },
{ "key": "card", "requires_note": false },
{ "key": "bank", "requires_note": false },
{ "key": "other", "requires_note": true }
]requires_note is a hint — include a note when using other to describe the method.