Contrato técnico para conectar Prestashop u otra tienda con Prodatos. Un pedido pagado puede convertirse en factura electrónica (inventario al enviar + DIAN) o en entrega (inventario, sin DIAN). No use la misma referencia externa para ambos.
Cada empresa genera su clave en el ERP: Configuraciones → API de tienda. La clave se muestra una sola vez.
Authorization: Bearer pk_live_xxxxxxxx_…
Las rutas canónicas no llevan index.php.
| Entorno | URL base |
|---|---|
| Evaluación (sandbox) | https://prodatossas.com/desarrollo2/api/v1 |
| Producción (clientes pagos) | https://prodatossas.com/produccion/api/v1 |
desarrollo2 por produccion. La API key no cruza de sandbox a producción: cada instancia genera la suya.Lab local (opcional): http://localhost/repos/desarrollo2/api/v1.
Fallback si Apache no reescribe: .../api/v1/index.php/salud.
ENVIADO_DIAN.ENTR, visible en Entregas, descuenta inventario al crear, no envía DIAN.Un mismo pedido de tienda debe ir a uno u otro, nunca a los dos con la misma referencia_externa.
No requiere autenticación. Comprueba que el servicio responde.
{
"ok": true,
"servicio": "api_tienda",
"version": "1"
}
Catálogo para mapear el SKU de la tienda al codigo o plu del ERP. Query: q, page, per_page (máximo 100).
{
"ok": true,
"page": 1,
"per_page": 50,
"total": 1,
"productos": [
{
"product_id": 12,
"codigo": "ABC-01",
"plu": "ABC-01",
"nombre": "Camiseta",
"descripcion": "Camiseta algodón",
"marca": "Marca",
"precio_con_iva": 45000,
"iva": 19,
"cantidad": 8,
"activo": "A"
}
]
}
Detalle de un producto y existencias (bodega de la API key si está configurada).
{
"ok": true,
"producto": {
"product_id": 12,
"codigo": "ABC-01",
"plu": "ABC-01",
"nombre": "Camiseta",
"descripcion": "Camiseta algodón",
"marca": "Marca",
"precio_con_iva": 45000,
"iva": 19,
"cantidad": 8,
"activo": "A"
}
}
{
"ok": false,
"error": "Producto no encontrado."
}
Alta o actualización por numero_documento. Si omite el documento, se usa consumidor final 222222222222. Para facturas electrónicas prefiera enviar el cliente completo en el body de POST /facturas.
{
"numero_documento": "123456789",
"razon_social": "Ana Pérez",
"email": "ana@correo.com",
"telefono": "3001234567",
"direccion": "Cra 1 #2-3",
"departamento": "11",
"municipio": "11001"
}
{
"ok": true,
"numero_documento": "123456789",
"razon_social": "ANA PÉREZ",
"creado": true,
"actualizado": false
}
Alias: las mismas rutas existen bajo /invoices.
El cliente fiscal es obligatorio (documento, razón social, email, dirección, teléfono, municipio). El inventario no se descuenta al crear el borrador; se descuenta al intentar DIAN.
{
"referencia_externa": "PS-12345",
"medio_pago": "transferencia",
"nota": "Pedido Prestashop #12345",
"cliente": {
"numero_documento": "123456789",
"razon_social": "Ana Pérez",
"email": "ana@correo.com",
"telefono": "3001234567",
"direccion": "Cra 1 #2-3",
"departamento": "11",
"municipio": "11001",
"tercero": "3"
},
"lineas": [
{ "codigo": "ABC-01", "cantidad": 2, "precio_con_iva": 45000 }
]
}
{
"ok": true,
"idempotente": false,
"prefijo_factura": "SETT",
"numero_factura": "990000123",
"estado": "ENVIADO_DIAN",
"tipo": "API_TIENDA_FE",
"cufe": "a1b2c3d4e5f6…",
"medio_pago": "transferencia",
"referencia_externa": "PS-12345",
"numero_documento_cliente": "123456789",
"valor_sin_iva": 75630.25,
"valor_con_iva": 90000,
"iva": 14369.75,
"nota": "Pedido Prestashop #12345",
"lineas": [
{
"product_id": 12,
"codigo": "ABC-01",
"nombre": "Camiseta",
"cantidad": 2,
"precio_unitario_con_iva": 45000,
"precio_con_iva": 90000,
"precio_sin_iva": 75630.25,
"iva": 14369.75
}
]
}
{
"ok": true,
"prefijo_factura": "SETT",
"numero_factura": "990000123",
"estado": "EN_PROCESO_DIAN",
"cufe": "a1b2c3d4e5f6…",
"referencia_externa": "PS-12345"
}
{
"ok": false,
"error": "Timeout al contactar Apidian. El consecutivo SETT-990000123 quedo reservado. Reintente este mismo documento; no envie otra factura.",
"referencia_externa": "PS-12345",
"identidad_reservada": true,
"prefijo_factura": "SETT",
"numero_factura": "990000123",
"reintentar": "/facturas/SETT/990000123/reintentar"
}
{
"ok": false,
"error": "cliente.email valido es obligatorio para factura electronica."
}
Alternativa: GET /facturas?referencia_externa=PS-12345.
{
"ok": true,
"prefijo_factura": "SETT",
"numero_factura": "990000123",
"estado": "ENVIADO_DIAN",
"cufe": "a1b2c3d4e5f6…",
"referencia_externa": "PS-12345",
"valor_con_iva": 90000,
"lineas": []
}
Reenvía el mismo par prefijo/número. No crea otra factura ni vuelve a restar inventario.
{}
{
"ok": true,
"prefijo_factura": "SETT",
"numero_factura": "990000123",
"estado": "ENVIADO_DIAN",
"cufe": "a1b2c3d4e5f6…",
"referencia_externa": "PS-12345"
}
Crea la venta: documento ENTR, estado POS, visible en Entregas, con descuento de inventario. referencia_externa debe ser el id del pedido en la tienda (idempotente: reenviar el mismo id no duplica).
precio_con_iva es el precio unitario con IVA. Si se omite, se usa el precio de venta del ERP.
{
"referencia_externa": "PS-12345",
"medio_pago": "transferencia",
"nota": "Pedido Prestashop #12345",
"cliente": {
"numero_documento": "123456789",
"razon_social": "Ana Pérez",
"email": "ana@correo.com",
"telefono": "3001234567",
"direccion": "Cra 1 #2-3"
},
"lineas": [
{ "codigo": "ABC-01", "cantidad": 2, "precio_con_iva": 45000 }
]
}
{
"ok": true,
"idempotente": false,
"prefijo_factura": "ENTR",
"numero_factura": "15",
"estado": "POS",
"tipo": "API_TIENDA",
"medio_pago": "transferencia",
"referencia_externa": "PS-12345",
"numero_documento_cliente": "123456789",
"valor_sin_iva": 75630.25,
"valor_con_iva": 90000,
"iva": 14369.75,
"nota": "Pedido Prestashop #12345",
"lineas": [
{
"product_id": 12,
"codigo": "ABC-01",
"nombre": "Camiseta",
"cantidad": 2,
"precio_unitario_con_iva": 45000,
"precio_con_iva": 90000,
"precio_sin_iva": 75630.25,
"iva": 14369.75
}
]
}
{
"ok": false,
"error": "Stock insuficiente.",
"stock": [
{ "codigo": "ABC-01", "solicitado": 2, "disponible": 0 }
]
}
Consulta una entrega. Alternativa: GET /entregas?referencia_externa=PS-12345.
{
"ok": true,
"idempotente": false,
"prefijo_factura": "ENTR",
"numero_factura": "15",
"estado": "POS",
"referencia_externa": "PS-12345",
"valor_con_iva": 90000,
"lineas": []
}
Anula la entrega y reintegra el inventario. Útil si el pedido se cancela en la tienda.
{}
{
"ok": true,
"prefijo_factura": "ENTR",
"numero_factura": "15",
"estado": "ANULADA",
"referencia_externa": "PS-12345",
"ya_anulada": false
}
401 — falta o es inválida la API key403 — empresa inactiva404 — producto, entrega o factura no encontrada409 — stock insuficiente, o la misma referencia_externa ya se usó en una entrega422 — validación (productos inexistentes, cliente FE incompleto, líneas vacías)502 / 504 — fallo Apidian/DIAN; si identidad_reservada es true, use /reintentar{ "ok": false, "error": "API key invalida o revocada." }
{ "ok": false, "error": "Stock insuficiente.", "stock": [] }
codigo o plu de productos. Use GET /productos?q= para verificar.POST /facturas con los mismos datos y cliente fiscal completo.POST /entregas con referencia_externa = id del pedido.referencia_externa en factura y entrega.POST /facturas/{prefijo}/{numero}/reintentar.POST /entregas/ENTR/{numero}/anular.Ejemplo cURL (evaluación):
curl -X POST "https://prodatossas.com/desarrollo2/api/v1/facturas" \
-H "Authorization: Bearer pk_live_…" \
-H "Content-Type: application/json" \
-d '{"referencia_externa":"PS-1","cliente":{"numero_documento":"123456789","razon_social":"Ana Pérez","email":"ana@correo.com","telefono":"3001234567","direccion":"Cra 1 #2-3","municipio":"11001"},"lineas":[{"codigo":"ABC-01","cantidad":1}]}'
El mismo llamado en producción:
curl -X POST "https://prodatossas.com/produccion/api/v1/facturas" \
-H "Authorization: Bearer pk_live_…" \
-H "Content-Type: application/json" \
-d '{"referencia_externa":"PS-1","cliente":{"numero_documento":"123456789","razon_social":"Ana Pérez","email":"ana@correo.com","telefono":"3001234567","direccion":"Cra 1 #2-3","municipio":"11001"},"lineas":[{"codigo":"ABC-01","cantidad":1}]}'