Owner does not match
The signer of the token instruction is not the owner of the source token account.
Common causes
- Wrong signer. You are signing the transaction with wallet A, but the token account is owned by wallet B.
- Confused authority. The token account’s
ownerfield (the wallet that controls it) differs from the account’s on-chainownerfield (which is the Token Program). The error refers to the wallet authority, not the program owner. - Delegate authority used incorrectly. A delegate can spend tokens up to the approved amount, but the delegate must be passed as the authority — not the token account owner.
How to fix
- Check the token account’s authority. Use getAccountInfo and decode the token account data. The
ownerfield in the decoded data is the wallet that controls this account. - Sign with the correct wallet. Ensure the transaction signer matches the token account’s authority.
- For delegated transfers: pass the delegate as the
authorityand setownerto the delegate’s pubkey in the transfer instruction.
Token account data fields
| Field | Meaning |
|---|---|
mint | The token mint this account holds |
owner | The wallet pubkey authorized to transfer from this account |
amount | Token balance |
delegate | Optional delegate authorized to spend up to delegatedAmount |
state | Initialized, Frozen, or Uninitialized |
FAQ
What is custom program error: 0x4?
Hex 0x4 is decimal 4, which maps to OwnerMismatch in the SPL Token error enum.
Can I change a token account’s owner?
Yes. Use the setAuthority instruction with AuthorityType.AccountOwner to transfer control to a different wallet. The current owner must sign.
Is this the same as IncorrectProgramId?
No. IncorrectProgramId is about the on-chain account ownership (which program owns the account). OwnerMismatch is about the token-level authority (which wallet can transfer tokens).
Error text variants
-
Owner does not match -
OwnerMismatch -
custom program error: 0x4
Sources
Updated: