FTP Reply Codes Reference

All FTP three-digit reply codes with category and description.

Searchable FTP reply code reference from RFC 959. Look up any three-digit code, decode what its first and second digits mean, and read the plain-English description and category. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

How are FTP reply codes structured?

Every FTP reply is three digits. The first digit is the completion status: 1 preliminary, 2 success, 3 intermediate, 4 transient failure, 5 permanent failure. The second digit is the functional group such as syntax, information, connections, authentication or file system. The third digit gives a finer-grained meaning within that group.

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:

CodeDirectionMeaning
220Server → ClientService ready — greeting
331Server → ClientUsername accepted, need password
230Server → ClientLogged in, proceed
257Server → ClientCurrent directory returned (PWD)
227Server → ClientEntering passive mode, here is the port
150Server → ClientOpening data connection
226Server → ClientTransfer 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.