# 303 See Other

> https://http-status.org/docs/303

**Family:** 3xx Redirection

## Rationale

Redirects the client to a different URI for a follow-up retrieval using GET or HEAD.

## In Plain Terms

You submitted something successfully. Now go fetch this other page to see the result.

## Description

The HTTP 303 See Other status code indicates that the server is redirecting the client to a different resource identified by the Location header. The follow-up request should use GET or HEAD, which makes 303 a clean fit for post/redirect/get flows and indirect result pages.

## Server Perspective

### Usage
- Return 303 for post/redirect/get flows after form submissions or write operations
- Use it when the redirect target is an indirect result, confirmation page, or status resource
- After POST, PUT, or DELETE when the next step should be a safe retrieval
- Redirecting to a confirmation page, status page, or canonical read view of the result
- Preventing accidental form resubmission with a browser refresh
- Returning a resource URI after an action without repeating the original method

### Implementation
- Include a Location header naming the retrieval URI
- Design the target resource to be safely fetched with GET or HEAD

### Common Headers
- Location

### Body
- A short explanatory body is optional, but the redirect target should be unambiguous from Location

### Pitfalls
- Do not use 303 when the redirected request must keep the original method
- Do not confuse 303 with a generic temporary redirect; its value is the forced switch to retrieval semantics
- When the redirected request must preserve the original method and body; use 307 or 308
- When you are simply moving a GET page temporarily or permanently; use the usual redirect codes instead
- When the original request should directly return its own final representation

## Client Perspective

### Pitfalls
- Do not treat 303 like 307 or 308; the follow-up request is meant to switch to GET or HEAD

## Examples

### Post/redirect/get user creation flow

The write request succeeds, then the client fetches the created user's page with GET.

**Request:**
```
POST https://api.example.test/users
```

**Response:**
```
303 See Other
Location: https://api.example.test/users/123
```

### Submit job and inspect status page

The client is redirected to a safe retrieval URI rather than repeating the POST.

**Request:**
```
POST https://api.example.test/exports
```

**Response:**
```
303 See Other
Location: https://api.example.test/exports/jobs/abc
```

## Related Codes

- [200 OK](/docs/200.md)
- [202 Accepted](/docs/202.md)
- [302 Found](/docs/302.md)
- [307 Temporary Redirect](/docs/307.md)

