Skip to main content
Kibble gives you three ways to track whether a payment link or invoice has been paid. You can check the merchant portal for a visual overview, poll the status API from your own code, or configure a webhook to receive a push notification the moment a payment is confirmed on-chain.

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:
Replace {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.
Example response when paid:
Example response when still pending:

Invoice status

Example response:

Polling from your application

A simple polling loop in JavaScript:
The hosted checkout and invoice pages poll GET /api/payments/status/{slug} automatically every five seconds. You only need to implement your own polling if you are tracking payments server-side or in a custom UI.

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 passing webhook_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.