2xx · Éxito
Código HTTP 201 Created: qué significa
El código 201 Created indica que la petición ha creado un recurso nuevo en el servidor. Es la respuesta correcta a un POST que da de alta un usuario, un pedido o un fichero, y debería incluir la cabecera Location con la URL del recurso creado.
Qué significa el código 201
En una API REST bien diseñada, crear algo devuelve 201 y no 200. La diferencia ayuda a los clientes: con 201 saben que se ha creado algo nuevo y, gracias a Location, dónde encontrarlo sin tener que adivinar el identificador.
El cuerpo suele traer la representación del recurso recién creado (con su id, fechas, etc.), para evitar una segunda petición GET.
Cuándo aparece
- POST a una colección (/api/usuarios) que crea un elemento nuevo.
- PUT a una URL que todavía no existía.
Qué tener en cuenta
- Incluye la cabecera Location con la URL del recurso creado.
- Si la creación es asíncrona (se encola y se procesa después), usa 202 Accepted en su lugar.
Configuración y comandos
FastAPI
from fastapi import FastAPI, Response, status
app = FastAPI()
@app.post("/api/usuarios", status_code=status.HTTP_201_CREATED)
async def crear_usuario(datos: dict, response: Response):
usuario = await guardar(datos)
response.headers["Location"] = f"/api/usuarios/{usuario['id']}"
return usuarioExpress
app.post('/api/usuarios', async (req, res) => {
const usuario = await guardar(req.body);
res.status(201).location('/api/usuarios/' + usuario.id).json(usuario);
});Ejemplo de respuesta
HTTP/1.1 201 Created
Location: /api/usuarios/8f3a2c
Content-Type: application/json
{"id": "8f3a2c", "email": "ana@ejemplo.com", "created_at": "2026-10-24T10:00:00Z"}Herramientas para comprobarlo
Preguntas frecuentes
¿Es un error devolver 200 al crear algo?
No rompe nada, pero 201 es más preciso y permite a los clientes distinguir entre "he creado algo" y "he hecho algo".
Códigos relacionados
- 200 OKLa petición se ha procesado correctamente. Es la respuesta estándar de éxito.
- 202 AcceptedLa petición se ha aceptado pero se procesará más tarde.
- 204 No ContentÉxito, pero no hay contenido que devolver (típico tras un DELETE).
- 409 ConflictLa petición entra en conflicto con el estado actual del recurso (por ejemplo, un duplicado).