Skip to main content
POST
/
api
/
productos
Crear Producto
curl --request POST \
  --url https://api.example.com/api/productos \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: <content-type>' \
  --data '
{
  "nombre": "<string>",
  "descripcion": "<string>",
  "codigo": "<string>",
  "cod_barra": "<string>",
  "categoria_id": 123,
  "unidad_id": 123,
  "almacen": "<string>",
  "precio": 123,
  "precio_unidad": 123,
  "precio_mayor": 123,
  "precio_menor": 123,
  "costo": 123,
  "moneda": "<string>",
  "cantidad": 123,
  "stock_minimo": 123,
  "stock_maximo": 123,
  "codsunat": "<string>",
  "usar_barra": true,
  "usar_multiprecio": true,
  "replicar_empresas": true
}
'
{
  "422": {},
  "500": {},
  "success": true,
  "message": "<string>",
  "data": {
    "id_producto": 123,
    "codigo": "<string>",
    "nombre": "<string>",
    "precio": 123,
    "costo": 123,
    "cantidad": 123,
    "almacen": "<string>",
    "categoria": {},
    "unidad": {}
  }
}
Crea un nuevo producto en el almacén especificado. Opcionalmente puede replicarse automáticamente a todas las empresas del sistema.

Autenticación

Requiere token Bearer y permiso productos.create.

Headers

Authorization
string
required
Token de autenticación Bearer
Content-Type
string
required
multipart/form-data (si se incluye imagen) o application/json
X-Empresa-Activa
integer
ID de la empresa activa (opcional, usa la empresa del usuario por defecto)

Body Parameters

Información Básica

nombre
string
required
Nombre del producto (máx 255 caracteres)
descripcion
string
Descripción detallada del producto
codigo
string
Código interno del producto. Si no se proporciona, se genera automáticamente con formato PROD-A{almacen}-{numero}
cod_barra
string
Código de barras del producto

Categorización

categoria_id
integer
ID de la categoría del producto (debe existir en tabla categorias)
unidad_id
integer
ID de la unidad de medida (debe existir en tabla unidades)
  • Ejemplo: NIU (Unidad), KGM (Kilogramo), MTR (Metro)
almacen
string
required
Almacén donde se registra el producto: 1 o 2

Precios

precio
decimal
required
Precio de venta unitario (incluye IGV)
precio_unidad
decimal
Precio por unidad de medida
precio_mayor
decimal
Precio para distribuidores/mayoristas
precio_menor
decimal
Precio minorista
costo
decimal
required
Costo de adquisición del producto
moneda
string
default:"PEN"
Moneda: PEN (Soles) o USD (Dólares)

Stock

cantidad
integer
default:"0"
Stock inicial del producto
stock_minimo
integer
Stock mínimo de alerta
stock_maximo
integer
Stock máximo recomendado

Configuración

codsunat
string
default:"51121703"
Código del catálogo SUNAT de productos
usar_barra
boolean
default:"false"
Si el producto utiliza código de barras
usar_multiprecio
boolean
default:"false"
Si el producto tiene múltiples niveles de precio (mayor/menor)
imagen
file
Imagen del producto (formatos: jpg, png, gif; máx 2MB)

Replicación Multi-Empresa

replicar_empresas
boolean
default:"false"
Si es true, el producto se replica automáticamente a todas las empresas activas del sistema (excepto la actual). Solo se crea si no existe un producto con el mismo nombre en cada empresa.

Generación Automática de Código

Si no se proporciona codigo, se genera automáticamente:
  • Formato: PROD-A{almacen}-{numero}
  • Ejemplo para almacén 1: PROD-A1-00001, PROD-A1-00002, etc.
  • Ejemplo para almacén 2: PROD-A2-00001, PROD-A2-00002, etc.
  • El número es secuencial por almacén y empresa

Respuesta Exitosa

success
boolean
true si el producto se creó exitosamente
message
string
Mensaje de confirmación. Si replicar_empresas = true: “Producto creado y replicado a todas las empresas”
data
object
Producto creado con sus relaciones (categoría y unidad)

Ejemplo de Solicitud

{
  "nombre": "Mouse Inalámbrico Logitech M720",
  "descripcion": "Mouse inalámbrico multidispositivo con 3 botones personalizables",
  "categoria_id": 15,
  "unidad_id": 3,
  "almacen": "1",
  "precio": 118.00,
  "precio_unidad": 118.00,
  "precio_mayor": 110.00,
  "precio_menor": 115.00,
  "costo": 85.00,
  "cantidad": 50,
  "stock_minimo": 10,
  "stock_maximo": 100,
  "moneda": "PEN",
  "codsunat": "51121703",
  "usar_barra": false,
  "usar_multiprecio": true,
  "replicar_empresas": false
}

Ejemplo de Respuesta

{
  "success": true,
  "message": "Producto creado exitosamente en ambos almacenes",
  "data": {
    "id_producto": 456,
    "codigo": "PROD-A1-00123",
    "nombre": "Mouse Inalámbrico Logitech M720",
    "descripcion": "Mouse inalámbrico multidispositivo con 3 botones personalizables",
    "precio": 118.00,
    "precio_unidad": 118.00,
    "precio_mayor": 110.00,
    "precio_menor": 115.00,
    "costo": 85.00,
    "cantidad": 50,
    "stock_minimo": 10,
    "stock_maximo": 100,
    "moneda": "PEN",
    "almacen": "1",
    "codsunat": "51121703",
    "usar_barra": false,
    "usar_multiprecio": true,
    "estado": "1",
    "imagen": null,
    "id_empresa": 1,
    "fecha_registro": "2026-03-06T15:30:45.000000Z",
    "categoria": {
      "id": 15,
      "nombre": "PERIFÉRICOS"
    },
    "unidad": {
      "id": 3,
      "nombre": "UNIDAD",
      "codigo": "NIU"
    }
  }
}

Códigos de Error

422
error
Errores de validación (campos requeridos, tipos incorrectos, etc.)
500
error
Error interno al crear el producto

Notas de Implementación

  • El campo fecha_registro se establece automáticamente con la fecha/hora actual
  • Si se sube una imagen, se guarda en storage/app/public/productos/ con formato: {timestamp}_{nombre_original}
  • El estado del producto se establece automáticamente en 1 (Activo)
  • La replicación multi-empresa omite productos con el mismo nombre en las empresas destino
  • Para crear productos masivamente desde Excel, usa: POST /api/productos/importar-lista

Build docs developers (and LLMs) love