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

Grant and revoke access from webhooks.

Updated October 2026By Fianto

Fianto sends your server a signed event for every payment and subscription change, with your own order ID. Verify the signature, record the event once, and change the customer's access from it. When in doubt, the Solana transaction is the record that counts.

The events that change access

EventMeansTypical action
order.paidA one-off payment settledFulfil the order or add credits
subscription.createdThe first period is paidGrant access
subscription.renewedA renewal settledExtend to the new period end
subscription.past_dueThe first renewal attempt failedYour choice: keep or limit access
subscription.cancel_scheduledA cancel takes effect at period endKeep access until then
subscription.cancel_withdrawnA scheduled cancel no longer appliesNothing to undo
subscription.endedCancelled, ended or unpaidRevoke access

Each event carries the object as it is now: status, current_period_end, your order_id and metadata, and the payment with its transaction signature. Other events cover checkout sessions, expired orders, duplicate payments and your endpoint's verification.

Set up the endpoint

Add your endpoint's https URL in the dashboard. Fianto first sends it an endpoint.verification event with a challenge; answer HTTP 200 with that challenge echoed back, and the endpoint is verified. Only a verified endpoint receives events. Keep the endpoint's whsec_ secret on your server, and store each event before you act on it, so a slow job never makes Fianto wait.

Verify every delivery

Deliveries follow the Standard Webhooks format: webhook-id, webhook-timestamp and webhook-signature headers, signed with HMAC-SHA256 using your endpoint's whsec_ secret, so off-the-shelf verifiers work. Refuse a delivery whose signature does not match, or whose timestamp is more than five minutes old. Answer with any 2xx status once the event is stored.

Retries, duplicates and order

If your endpoint does not answer 2xx, Fianto tries again after about 1 minute, 5 minutes, 30 minutes, 2 hours, 5 hours, 10 hours and 10 hours, each varied by up to a fifth so retries do not arrive in step: eight attempts over about 28 hours. The same event can arrive more than once and out of order, so deduplicate on webhook-id and compare timestamps before you overwrite newer state.

Missed something? GET /v1/events lists the last 90 days of events, and GET /v1/orders/lookup finds an order by your own order ID.

The transaction is the record

A webhook reports a payment; the Solana transaction is the payment. Each payment event carries its signature, so you can check any of them on a Solana explorer before acting on a large amount. Before going live, verify your endpoint in the dashboard and send it a signed test.event.

Sources

Questions

Webhook questions.

How do I know a webhook came from Fianto?

Each delivery carries an HMAC-SHA256 signature in Standard Webhooks format. Verify it, and refuse anything older than five minutes.

Should I grant access on the success redirect?

No. The customer can close the page after approving. Grant access from the webhook, which arrives either way.

Can I test without real money?

Send your endpoint a signed test event from the dashboard. There is no test mode, so the first real check is a small real payment.

Get your first webhook today.

Verify your endpoint, send a test event, then take a small real payment.