300 Multiple Choices means the requested resource has several possible representations, and the client or user must pick one. The server sends it when content negotiation alone cannot automatically choose a single option, so it presents a list of candidates.
For example, when a document exists in multiple languages, formats (HTML/PDF), or resolutions, the server lists the choices in the body or Link headers and lets the user select.
GET /manual HTTP/1.1
Host: docs.example.com
Accept: text/htmlHTTP/1.1 300 Multiple Choices
Content-Type: text/html
Link: </manual.en.html>; rel=alternate; hreflang=en
Link: </manual.ko.html>; rel=alternate; hreflang=ko
<ul><li><a href="/manual.en.html">English</a></li><li><a href="/manual.ko.html">한국어</a></li></ul>app.get('/manual', (req, res) => {
res.status(300).json({
choices: ['/manual.en.html', '/manual.ko.html']
});
});