Qaynaq LABS · TOOLS

HTTP · 3xx Redirection

300 Multiple Choices

The request has multiple possible responses; client should choose one.

When you see this status

  • Server offers multiple representations for the requested resource
  • Resource has multiple formats or languages available
  • Client's Accept header allows multiple content types

Common causes

  • Server-side resource ambiguity
  • Missing or ambiguous Accept header
  • Content negotiation failure

How to debug it

  1. Inspect the response body for available choices
  2. Check the response's Link headers for alternatives
  3. Review client's Accept headers for mismatches

Return this code in your framework

Express (Node.js)
res.status(300).json({ choices: ['/path1', '/path2'] });
FastAPI (Python)
return JSONResponse(status_code=300, content={'choices': ['/path1', '/path2']})
NestJS
@Get() @HttpCode(300) getMultipleChoices() { return { choices: ['/path1', '/path2'] }; }
Go (net/http)
w.WriteHeader(http.StatusMultipleChoices); w.Write([]byte(`{"choices":["/path1","/path2"]}`))

About HTTP 300

HTTP status code 300 Multiple Choices is part of the 3xx Redirection family. The request has multiple possible responses; client should choose one. Understanding it is essential for backend engineers, API designers, and anyone debugging integrations between services.

The Qaynaq Labs HTTP Status Code Explainer covers all standard codes with practical guidance: what triggers them, how to debug them in production, and exactly how to return them from common frameworks. Each code page is hand-curated and verified.

Frequently asked

Should I use 300 for API versioning?

No. Use 301/302 for versioned endpoints. 300 is for ambiguous resource representations.

Can 300 responses include a Location header?

Yes, but it's non-standard. Prefer 301/302 for single redirects. 300 typically uses Link headers.

Is 300 commonly used in practice?

Rarely. Most frameworks default to 301/302. 300 is niche for complex content negotiation.