Payment and invoice statuses
Before diving into each method, here is what each status value means:Payment statuses
Invoice statuses
GET /api/invoices/{id}/status also returns overdue as a derived status when the invoice is in draft or sent state and the due date has passed.Option 1: merchant portal
The merchant portal gives you a real-time visual view of your payment links. Access it at:{slug} with the slug returned when you created the payment link. The portal is available for payment links created with the privy wallet type and shows the current payment status, received amount, and transaction details.
Option 2: status polling API
Poll the status endpoints directly from your application. Both endpoints return lightweight JSON responses with no authentication required.Payment link status
Invoice status
Polling from your application
A simple polling loop in JavaScript:Option 3: webhooks
Webhooks are the most efficient way to track payments if you have a server that can receive HTTP requests. Instead of polling, Kibble POSTs to your endpoint the moment an invoice payment is confirmed — no repeated API calls needed. Configure a webhook by passingwebhook_url when you create an invoice. See Webhooks overview for setup instructions and Webhook verification to learn how to validate incoming requests.
Choosing the right approach
You can combine all three — for example, use a webhook for server-side processing and display polling-based status updates in your checkout UI.
Only USDC on Base (chain ID 8453) triggers a status change. Transfers of other tokens to the deposit address are silently ignored and will not change the payment or invoice status.