No Fianto fee during the beta. Any fee comes with at least 30 days notice. See pricing
Guide

Failed renewals and retries.

Updated October 2026By Fianto

When a renewal cannot be collected, nothing is taken and the subscription is past due. Fianto makes four attempts in all: two minutes into the period, then one hour, six hours and one day into it. If the fourth fails, the subscription ends, and that period is never charged later.

The four attempts

AttemptWhen, from the start of the period
12 minutes
21 hour
36 hours
41 day

The schedule is fixed for every merchant; there is no setting for it. When an earlier delay was not the customer's doing, each retry keeps its gap from the failure before it rather than all falling due at once. The program never takes part of an amount.

Which failures count

Only a failure caused by the customer's wallet uses up an attempt:

Reason in the eventMeaningUses an attempt
INSUFFICIENT_FUNDSThe wallet holds less USDC than the chargeYes
DELEGATION_REVOKEDThe customer removed the permission in their walletYes
ACCOUNT_FROZENThe customer's USDC account is frozenYes
ACCOUNT_CLOSEDThe customer's USDC account was closedYes
TOO_EARLYThe chain's clock had not reached the new periodNo
NETWORK_ERRORSolana or an RPC node did not answerNo
PROGRAM_ERRORThe program refused for another reasonNo
CHARGING_KEY_UNFUNDEDFianto's charging key could not pay its feeNo

What your server hears

  • subscription.past_due: once, at the first failure that counts. The subscription's status is PAST_DUE.
  • subscription.payment_failed: at every failed attempt, with failure.reason, attempt_no and next_attempt_at.
  • subscription.renewed: a later attempt succeeded; the period is paid.
  • subscription.ended: the fourth attempt failed, with end_reason: "PAYMENT_FAILED".

Whether a past-due customer keeps access while attempts run is your decision; the events give you what you need either way. The dashboard lists every failing subscription with its reason and next attempt.

Reading it from the API

GET /v1/subscriptions/{id} returns the subscription as it is now: status is ACTIVE, PAST_DUE or ENDED, with current_period_end and the latest payment and its signature. You can also cancel a past-due subscription yourself, now, with POST /v1/subscriptions/{id}/cancel, instead of waiting for the last attempt.

What the customer can do

In the portal at fianto.xyz/my, the subscription shows as past due, with what to do: for a short wallet, add USDC before the next try, and it is collected then. A customer who removed the permission can reauthorize in the portal at fianto.xyz/my while the subscription is still past due. Fianto sends customers no email, so if you want them to know, tell them from your own product.

Questions

Questions about failed renewals.

Can I retry a failed payment by hand?

No need. Fianto tries again after an hour, six hours and a day, so a topped-up wallet is collected on the next try.

Is a missed period charged later?

No. If the fourth attempt fails, the subscription ends and that period is never charged.

Can I change the number of attempts?

No. Every merchant gets the same four attempts over one day.

See a failed renewal as soon as it fails.

Four fixed attempts, one day, and an event at every step.