Skip to main content

Payment Verification Failed

payment_verification_failed400

Billing · Payment provider webhook only

A payment provider webhook arrived with a signature that did not verify, so it was ignored. Only the webhook sender sees it.

What this means​

Dodo, our payment provider, tells us about payments and subscription changes by calling our webhook. Every call is signed. This error means the signature on a call did not match our webhook secret, so the event was not trusted and not processed: no plan, payment or key was changed. The response is HTTP 400.

When you'll see this​

  • Something other than Dodo sent a request to the webhook URL.
  • The signature headers were missing or altered on the way.
  • The webhook secret configured on our side does not match the one in Dodo.

You will not see this error in the dashboard or from the API: the only caller of the webhook is the payment provider.

Learn more about how this works

Dodo signs each webhook with the standard webhook headers (webhook-id, webhook-timestamp, webhook-signature). We verify the signature against the raw request body before reading the event. A call that fails the check gets this error and is dropped. If the webhook secret is missing on our side, the request fails with a server error instead, so the provider keeps retrying until it is fixed.

Example response​

{
"success": false,
"error": "payment_verification_failed",
"message": "Payment signature verification failed.",
"details": [],
"retry_after": null,
"doc_url": "https://docs.asterwise.com/reference/errors/payment_verification_failed/",
"request_id": "req_01HXYZABCDEFGH",
"timestamp": "2026-05-25T12:34:56Z"
}
NEW TO APIS?
Quick fix
  1. There is nothing to do as a customer. Payments are confirmed only from verified webhooks.
  2. If your plan did not update after a payment, email [email protected] with the payment date and amount.
PRODUCTION ENGINEER
Recovery pattern

No integration calls this endpoint. Do not send requests to the payment webhook; an unsigned or wrongly signed request is always refused with this error.

Production handler​

No code example provided.

Avoid this error by​

  • Nothing on the customer side. On our side, the webhook secret must match the one set in the Dodo dashboard after any rotation.