The FTP Reply Codes Reference is a searchable lookup for the three-digit
reply codes an FTP server returns on its control connection. Whether you are
reading a client log, scripting an automated transfer, or debugging a stuck
passive-mode connection, this tool decodes any code from 110 to 553 with its
category and a plain-English description.
How it works
FTP, defined in RFC 959, answers every command with a three-digit code whose digits each carry meaning:
First digit — completion status
1yz Positive preliminary (action started, expect another reply)
2yz Positive completion (action succeeded)
3yz Positive intermediate (need more input, e.g. PASS after USER)
4yz Transient negative (temporary failure, retry later)
5yz Permanent negative (hard failure, do not retry)
Second digit — functional group
x0z Syntax x1z Information x2z Connections
x3z Auth/account x5z File system
So 530 is a permanent (5) authentication (3) failure, while 227 is a
successful (2) connection (2) reply. The tool keeps the full table in your
browser and filters by number, text or message.
A typical FTP session decoded
A normal file download follows this exact sequence of codes on the control connection:
| Code | Direction | Meaning |
|---|---|---|
220 | Server → Client | Service ready — greeting |
331 | Server → Client | Username accepted, need password |
230 | Server → Client | Logged in, proceed |
257 | Server → Client | Current directory returned (PWD) |
227 | Server → Client | Entering passive mode, here is the port |
150 | Server → Client | Opening data connection |
226 | Server → Client | Transfer complete, closing data connection |
When a transfer hangs after 227 or 150, the control session is healthy but the data connection cannot be established — the most common culprits are a NAT gateway, a stateful firewall blocking the ephemeral port, or the server advertising an internal IP (like 192.168.x.x) that the client cannot reach. Switching to EPSV (code 229) often resolves this because it only returns a port number, avoiding the IP embedding issue entirely.
Common codes and what they mean for debugging
421 — Service not available. The server is shutting down or the connection has been idle too long. Reconnect and retry; this is a transient condition.
425 — Cannot open data connection. The data port was refused or timed out. Switch from active to passive mode (PASV/EPSV) or verify the firewall allows connections back to the client.
426 — Connection closed, transfer aborted. The data connection dropped mid-transfer — often a network interruption or a disk-full condition on the server. Check server logs.
530 — Not logged in. Either the credentials are wrong or the server requires AUTH TLS before accepting a USER command. This is permanent for that attempt; fix credentials or enable TLS.
550 — Requested action not taken. File not found, permission denied, or path does not exist on the server side. Verify the remote path, case sensitivity, and permissions.
553 — File name not allowed. The filename contains characters the server’s operating system or configuration rejects. Rename the file before sending.
Passive vs active mode — the most common FTP confusion
In active mode the server opens a data connection back to the client, which fails through NAT and most modern firewalls because the inbound port is blocked. In passive mode (PASV / EPSV) the client opens the data connection to the server using a port the server advertises, so NAT works naturally. Almost all modern clients use passive mode by default, but legacy automation scripts sometimes force active mode — look for 227 vs 200 PORT command in your logs to identify which mode is in use.