Mintcash
ConceptsWebhooks

Event types

Every webhook MintCash emits, when it fires, and whether it's terminal.

Every webhook's event field follows the pattern <entity>.<status>. The type field tells you what's inside data. The event field tells you which state transition fired.

Payment events (type: "payment")

EventWhen it firesTerminal
payment.createdPayment row created, waiting on the PSP or customer redirectNo
payment.pendingPSP accepted the charge, awaiting capture or 3DS completionNo
payment.authorizedFunds authorized but not yet capturedNo
payment.succeededCharge captured — fulfil the order on this eventNo¹
payment.failedCharge declined or PSP returned an errorYes
payment.partially_refundedA partial refund succeeded; further refunds are still possibleNo
payment.refundedFully refundedYes
payment.refund_failedA refund attempt failed. The parent payment is unchangedNo
payment.voidedAuthorization voided before captureYes

¹ succeeded is not strictly terminal because it can still transition to partially_refunded, refunded, or voided. Once you receive a terminal event for a paymentId, no further events fire for it.

Subscription events (type: "subscription")

Subscription events mirror payment events for the underlying invoice charges, plus the lifecycle transitions of the subscription itself.

EventWhen it fires
subscription.succeededFirst charge or a renewal charge succeeded
subscription.failedFirst charge or a renewal charge failed
subscription.cancelledCancelled by merchant, or all retries exhausted (terminal)

Treat subscription.succeeded after the first one as "renewal — extend the customer's access by another billingIntervalDays."

Refund events (type: "refund")

EventWhen it fires
payment.partially_refunded(also fires under type: "payment")
payment.refunded(also fires under type: "payment")
payment.refund_failedA refund attempt couldn't be processed

Note: refund events are delivered with type: "payment" because the customer-facing entity is the payment. The refund record is included in data.refund.

What "terminal" means in practice

When a payment hits failed, refunded, or voided, no further events will fire for that paymentId. Same for a subscription that hits failed or cancelled.

Use this to safely clean up state: archive the order record, close the dunning ticket, mark the customer record. You won't get any more updates about that resource.