Skip to main content

Payment Status Lifecycle

Every Manatee payment has a lifecycle status. Your backend should treat the status as the source of truth for checkout, fulfillment, and reconciliation decisions.

Statuses

StatusMeaningTypical action
pendingNo matching Bitcoin transaction has been detected yet.Show payment instructions and wait.
detectedA matching transaction was seen, but confirmations are below the required threshold.Show "payment seen" and keep waiting.
confirmedThe transaction reached required_confirmations.Mark the order as paid.
expiredThe payment expired before a matching transaction was detected.Close or recreate the checkout session.
cancelledYour backend cancelled a still-pending payment.Stop showing this payment to the customer.

Confirmation policy

required_confirmations controls when Manatee moves a payment to confirmed. Lower values are faster and higher values reduce settlement risk.

For testnet and low-risk test flows, 1 confirmation is often enough. For production, choose the threshold based on order value, fulfillment speed, and your risk policy.

Expiry behavior

Only pending payments expire automatically. If a matching transaction is already detected before expires_at, Manatee keeps tracking confirmations instead of changing the payment to expired.

Webhook events

Manatee sends webhook events when a transaction is detected and when it reaches the confirmation threshold:

  • payment.detected
  • payment.confirmed

Use payment.confirmed for fulfillment. Treat payment.detected as an early signal that a transaction exists but is not final enough for most production flows.