Saltar al contenido

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

python
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 usuario

Express

javascript
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
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

Ver todos los códigos de estado HTTP