# Razorpay payment_id belongs to a different order: order id mismatch

## TL;DR
This error means the payment you are acting on was created against a different Razorpay order than the one your code thinks it belongs to. Stop and reconcile: fetch the payment, read its actual order id, and compare it to your records. The usual cause is a stale or replayed checkout on the client, or your server mixing up two orders. Never force the capture; fix the mismatch first.

```text
razorpay payment_id belongs to a different order: order id mismatch
```

## Steps

1. Fetch the payment by its payment id and read the order id attached to it. Success check: you have the payment's real order id from Razorpay, not from your client.

2. Compare it to the order id your code expected. Identify which side is wrong: a stale checkout page, a cached order id, or two orders created for one cart. Success check: you can name the source of the wrong id.

3. If the client sent a stale order id, create a fresh Razorpay order for the current cart and have the shopper pay against it. Success check: the new payment's order id matches your records.

4. Verify the payment signature on your handler before trusting any client-sent payment id or order id. Success check: unsigned or badly signed callbacks are rejected before they reach capture logic.

5. Add a server-side check before capture: the payment's order id must equal your open order's id, or the flow stops with a clear error. Success check: mismatches are caught before any capture attempt.

## When this applies

- Razorpay reports that a payment id belongs to a different order.
- Capture or fetch calls fail right after a checkout that "looked fine" on the client.
- An agent wired payment ids and order ids through client-side state.

## When it doesn't

- "Already captured" errors; the order linkage is fine, the capture ran twice.
- Signature verification failures on their own; those are a separate check.
- Payments that failed outright; there is no order to mismatch.

## Tool + version compatibility

Razorpay Orders API, Razorpay Checkout (all current versions), payment signature verification on your backend.

### "razorpay order id mismatch payment"
Same error. The payment is real; it is just attached to a different order than you expected.

### "razorpay payment belongs to different order"
Fetch the payment to see which order it actually belongs to, then reconcile.

### "razorpay wrong order id on capture"
Your capture call is using an order id that does not own this payment. Fix the linkage, not the capture.

## Why it happens

Razorpay binds every payment to exactly one order at creation. Client-side checkouts commonly cache an order id (back button, tab restore, double-click creating two orders), so the payment completes against order A while your server tries to capture it as order B. Agent-built flows that pass order ids through browser state are especially prone to this.

## Edge cases / pitfalls

- Do not capture a mismatched payment "to be safe"; capture it against the wrong order and your accounting is wrong in a way that is hard to unwind.
- A mismatch can also indicate tampering: always verify the signature before assuming it is an innocent stale page.
- If both orders belong to the same shopper and cart, cancel the duplicate order to keep records clean.
- Log both ids on every mismatch; patterns (same page, same browser) point at the client bug fast.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_CVWJljpXIk9g1TvQzWfUDw
