Skip to main content
HomeLanding pagesAI agent payment not confirming: the fix
LANDING PAGE

AI agent payment not confirming: the fix

7 min read·Last updated June 2, 2026

If an AI agent payment is not confirming, the issue is usually the confirmation path, not the payment. Use the payment.received or payment.sent webhook as durable confirmation, and verify each delivery with webhooks.verify. To check a specific payment, call transactions.get or look it up on the block explorer. Note that settle can return a transient 503 during the chain-adapter rollout, which is not a final failure, so re-check.

The problem

Your agent made a payment, or you think it did, but you cannot confirm it. The expected confirmation has not arrived: no webhook event registered, the agent's task is waiting on a signal that did not come, or you simply cannot tell whether the money moved. The payment may well have settled on chain, but your system has no confirmation of it, so you are stuck in uncertainty about a transaction that may already be complete.

This is the not-confirming problem, and it is important to recognize that it is usually a confirmation-path issue, not a payment failure. The payment and your awareness of it are separate things: a payment can settle while your confirmation never registers, because the webhook did not arrive, was not verified, or was dropped. The symptom is uncertainty rather than a clear failure, and the fix is to repair and rely on the confirmation path so you know, durably, what actually happened.

Why it happens

Confirmation of an agent payment is event-driven, and the gap usually opens somewhere in that event flow. The most common cause is the webhook: your endpoint may be unreachable, your code may be failing to verify the signature and therefore dropping valid events, or the event may fall outside the replay window and be rejected. In any of these, the payment settled but the confirming event never registered on your side, so you see no confirmation.

A second cause is a transient settlement error. During the chain-adapter rollout, the settle step can return a 503 that is not a final failure but a temporary unavailability, which can leave a payment's status ambiguous if you treat the 503 as definitive. A third is simply looking in the wrong place, expecting a synchronous result when confirmation is meant to come asynchronously via webhook. In all cases, the payment itself may be fine; what is broken is how you learn about it, which is what the fix addresses.

The fix

The fix is to rely on the payment webhook as your durable confirmation, set up correctly. Listen for the payment.received or payment.sent event, which fires when a payment settles, and verify each delivery with webhooks.verify against your signing secret before trusting it. Treat the verified event as the source of truth for confirmation: when it arrives and verifies, the payment is confirmed; your system records it and the agent's task can proceed.

This makes confirmation reliable because the webhook pushes settled events to you durably, rather than you guessing from a synchronous call that may not reflect final state. Get the webhook path right, reachable endpoint, correct verification, respect for the replay window, and the not-confirming problem largely disappears, because every settled payment produces a confirmation you actually receive. For the broader practice of building a transaction record from these events, see how-to-track-ai-agent-transactions.

Confirm a specific payment

When you need to confirm one particular payment rather than rely on the stream, look it up directly. Call transactions.get with the payment's id to retrieve its current status, which tells you whether that specific payment settled. You can also find the transaction on the block explorer for the chain, Base, to see it confirmed on chain independently of any webhook.

This direct lookup is the right tool for spot checks and for reconciling a payment you suspect you missed. If a confirmation did not arrive but transactions.get or the explorer shows the payment settled, you know it was a confirmation-path issue, not a payment failure, and you can record it and move on. Use the webhook stream as the backbone for confirmation at scale, and transactions.get plus the explorer for checking or reconciling individual payments. Note there is no single list-all-transactions endpoint, so build the broad record from the event stream and use the lookup for specifics.

The transient 503 case

The transient 503 deserves its own handling, because it is easy to misread. During the chain-adapter rollout, the settle step can return a 503 that means settlement is temporarily unavailable, not that the payment failed. If you treat a single 503 as a final failure, you may conclude a payment failed when it did not, or retry blindly in a way that double-pays.

The right response is to not treat a 503 as definitive. Re-check the payment's actual status via the webhook or transactions.get before concluding anything, and for the transient case use a bounded, careful retry rather than an immediate blind one. This is the only failure kind where a retry is appropriate, and even then only after confirming the payment did not already settle. Handling the 503 correctly, re-check rather than assume, prevents the most confusing version of the not-confirming problem, where the payment is fine but a misread transient error makes it look broken. The full failure taxonomy is in how-to-handle-failed-agent-payments.

Fix webhook delivery

If confirmations are not arriving at all, repair webhook delivery specifically. Confirm your endpoint is publicly reachable and responding, since an unreachable endpoint means no events land. Verify the signature correctly with webhooks.verify, because verification that is implemented wrong will reject valid events and you will drop confirmations you actually received. Respect the replay window, events outside roughly 300 seconds are rejected, so process promptly and do not rely on very delayed handling.

To test the path end to end, send a test event and confirm it arrives and verifies. If you have missed events during an outage, reconcile by looking up the affected payments with transactions.get rather than assuming they failed. A correctly wired, verified, promptly-handled webhook endpoint is the foundation of reliable confirmation, so fixing delivery here resolves the root of most not-confirming cases. Once the path is solid, confirmations arrive as they should, and the uncertainty that defined the problem is gone.

A quick diagnostic order

When a confirmation does not arrive, work through a short order rather than guessing. First, ask whether the payment actually settled: look it up with transactions.get or on the block explorer. If it settled, the problem is your confirmation path, not the payment, so move to the webhook checks. If it did not settle, the problem is the payment, and you turn to the failure taxonomy instead.

Second, if it settled but you got no event, check webhook delivery: is the endpoint reachable, is the signature verifying, was the event within the replay window. Third, if you saw a 503 from settle, do not conclude failure; re-check status, since it may be the transient case. Following this order, settled or not, then delivery, then transient errors, keeps you from the two common mistakes: assuming a settled payment failed because no event arrived, and assuming a transient 503 is final. A minute of structured diagnosis usually pinpoints whether you are looking at a confirmation-path issue or a genuine payment problem, which then tells you which fix above to apply.

If your agent's payments are not confirming, the adjacent material helps. The full failure taxonomy and how to respond per kind is in how-to-handle-failed-agent-payments, and building a durable transaction record from webhook events is in how-to-track-ai-agent-transactions. Together they take you from uncertainty to reliable confirmation. Pricing is on the pricing page.

FAQ

Frequently asked questions.

My agent's payment is not confirming. Did it fail?

Not necessarily. A payment not confirming often means the payment settled but your confirmation path did not register it, the webhook did not arrive or was not verified, rather than that the payment failed. Before assuming failure, check the durable record: the payment webhook and a direct lookup with transactions.get. The payment and your awareness of it are separate things.

How should I confirm an agent payment?

Use the payment webhook as the durable confirmation. Listen for payment.received or payment.sent, verify each delivery with webhooks.verify against your signing secret, and treat the verified event as the source of truth. For a specific payment, call transactions.get with its id, or look it up on the block explorer. The webhook is the backbone; the lookup is for checking one payment.

What does a 503 from settle mean?

It can be a transient error during the chain-adapter rollout, not a final failure. So a 503 does not necessarily mean the payment failed; it may mean settlement is temporarily unavailable and should be re-checked. Do not treat a single 503 as definitive, re-check the payment's status via the webhook or transactions.get before concluding it failed, and use a bounded retry for the transient case.

Why is my payment webhook not arriving?

Common causes are an unreachable endpoint, a failed signature verification causing you to drop valid events, or the event falling outside the replay window. Confirm your endpoint is reachable, verify the signature correctly with webhooks.verify, and respect the 300-second replay window. You can also send a test event to confirm delivery and use transactions.get to reconcile any events you may have missed.

Can I confirm a payment without webhooks?

Yes, for a specific payment, by calling transactions.get with its id or checking the block explorer, but webhooks are the right backbone for confirmation at scale because they push settled events to you durably. There is no single list-all-transactions endpoint, so build your record from the webhook stream and use transactions.get for spot checks rather than polling.

Create your free agent wallet in 5 minutes.

First payment confirmed in under ten minutes. Free to start.