Skip to content

Event: payment.succeeded

Fired when a recurring or retry charge is approved by the gateway.

A charge against a subscription’s payment method has been approved by the gateway. Today this fires for manually-retried transactions that succeed; once Topiic emits gateway-driven recurring charges, this same event type will cover those too.

Pair this with payment.failed — every charge attempt fires exactly one of the two.

Same envelope as other events: Topiic-Event-Id, Topiic-Idempotency-Key, Topiic-Signature. See Verifying signatures.

{
"id": "8c1f4a37-…",
"type": "payment.succeeded",
"createdAt": "2026-07-01T03:00:12.802Z",
"data": {
"transactionId": "4d8c2a14-7b3d-4e9c-8d6f-1a2b3c4d5e6f",
"originalTransactionId": "1f9e8d7c-6b5a-4e3d-2c1b-0a9f8e7d6c5b",
"subscriptionId": "3c4d5e6f-7a8b-9c0d-1e2f-3a4b5c6d7e8f",
"memberId": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"amount": 49.50,
"currency": "AUD",
"status": "Approved",
"declineCode": null,
"occurredAt": "2026-07-01T03:00:12.000Z"
}
}
FieldTypeNotes
transactionIdUUIDThe Topiic Transaction id for this charge attempt. Unique per attempt.
originalTransactionIdUUID | nullThe original transaction this is a retry of, if any. Null for first attempts.
subscriptionIdUUID | nullThe Subscription the charge belongs to. Null for one-off charges.
memberIdUUIDThe Topiic Member id.
amountdecimalCharge amount (positive).
currencystringISO-4217 code (usually "AUD").
statusstringAlways "Approved".
declineCodestring | nullAlways null for successful charges.
occurredAtISO-8601 UTCWhen the gateway confirmed the charge.
  1. Verify the signature, dedupe on event.id.
  2. Find the customer on your side via memberId.
  3. Update your billing history / receipt log — record transactionId, amount, occurredAt.
  4. Optionally trigger a “payment received” email or push notification.
  5. If the customer was previously in dunning (a prior payment.failed), reinstate full access.
  6. Return 2xx within 10 seconds.