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.voidedAuthorization voided before captureYes

Refund transitions (payment.partially_refunded, payment.refunded, payment.refund_failed) keep the payment. event prefix but are delivered with type: "refund" — see Refund events below.

¹ succeeded is not strictly terminal because the payment can still be refunded (delivered as a type: "refund" event) 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_refundedA partial refund succeeded; further refunds still possible
payment.refundedThe payment is now fully refunded
payment.refund_failedA refund attempt couldn't be processed

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.