Documentación Polpoo

API · SFTP · Excel
Documentación técnica oficial · Integraciones Polpoo

Documentación de Integración Polpoo

Esta web sustituye la documentación operativa anterior y consolida todos los bloques de integración: envíos, devoluciones, tracking y plantillas.

APIRutas, albaranes, facturas, cobros, tracking
SFTPIntercambio JSON por carpetas
ExcelCarga de clientes y plantillas operativas

Novedades

Registro incremental de campos y endpoints incorporados en la integración. Añadir una fila por cada cambio nuevo.

FechaTipoMóduloCambioAcción integrador
2026-05-18 Nuevos campos API y SFTP · Envío de albaranes (línea de producto) Nuevos campos deliveryNotes.products.residualWeight y deliveryNotes.products.residualImport (number). Residuo plástico: peso e importe por unidad. Cálculo: residualWeight × quantity × residualImport. Aparece/oculta según configuración de la empresa. Opcional.
2026-05-15 Nuevo campo API y SFTP · Envío de rutas Nuevo campo deliveryPoints.deliveryTypeService (string). Tipo de servicio: P Pedido, I Instalación, D Desinstalación, O Otros. Opcional.
2026-05-15 Nuevos campos + cambio validación API y SFTP · Envío de albaranes (cabecera) Nuevos campos deliveryNotes.isOrder y deliveryNotes.isDispatchNote (boolean). Mutuamente excluyentes con isBill. Si ninguno está a true, se trata como albarán. Opcional. No combinar varios tipos a la vez.
2026-05-15 Nuevo campo API y SFTP · Envío de albaranes (cabecera) Nuevo campo deliveryNotes.methodOfPayment (string). Forma de pago, solo informativo. Opcional.
2026-05-15 Nuevo campo API y SFTP · Envío de albaranes (línea de producto) Nuevo campo deliveryNotes.products.serviceType (string): E entrega, R recogida. Opcional.
2026-05-15 Nuevos valores API y SFTP · Envío de albaranes (línea de producto) Valores específicos para deliveryNotes.products.productType usado con envases: EE envase entrega, ER envase recogida. Opcional.

Reglas Globales de Integración

  • Codificación de ficheros: UTF-8.
  • No incluir un campo opcional si no hay valor real.
  • No usar comillas dobles dentro de textos de datos.
  • En SFTP, si subes un fichero con el mismo nombre, se sobrescribe.
  • Obligatorio si aplica: el campo es obligatorio solo cuando usas ese módulo o caso de negocio (ejemplo: Paquetería, Almacenes o compañía asociada).
  • En los bloques API Tester, los campos con fondo resaltado y etiqueta Editable se pueden modificar antes de lanzar la prueba.
  • Antes de probar un endpoint API, revisa siempre la URL, el Bearer Token y el JSON Body editable.
Obligatorio Recomendado Opcional Obligatorio si aplica
EstadoSignificado exacto
ObligatorioSiempre debe enviarse.
RecomendadoNo bloquea la integración, pero mejora planificación, trazabilidad o UX.
OpcionalSe puede omitir sin impacto funcional crítico.
Obligatorio si aplicaEs obligatorio cuando se da la condición indicada en la descripción del campo.

Validador de ficheros

Sube un fichero .json y comprueba antes de enviarlo a Polpoo: codificación UTF-8, sintaxis, estructura, campos obligatorios, tipos y reglas (exclusividad isBill/isOrder/isDispatchNote, valores enumerados, etc.).

La validación se ejecuta localmente en tu navegador. El fichero no se sube a ningún servidor.

Autenticación API

Token técnico para llamadas API.

URLPOST https://v2.restapi.polpoo.com/api/oauth/token_integrator
Content-Typeapplication/json

En el API Tester, los campos marcados como Editable son de prueba y puedes sustituirlos por tus credenciales y valores reales antes de ejecutar.

Probar token (API Tester)
Sin ejecutar
{
  "client_id": 1,
  "client_secret": "...",
  "username": "integration@company.com",
  "password": "secret_password",
  "grant_type": "password"
}

Usar cabecera Authorization: Bearer <token>.

API · Envío de Rutas

Endpoint (acumulativo)POST /api/integration_session/delivery_point
Endpoint (independiente)POST /api/integration
Payloadname, description, dateSession, deliveryPoints[]

Existen dos modos de envío con el mismo payload:

  • /api/integration_session/delivery_pointacumulativo: todos los envíos del mismo día se agrupan en la misma entrega planificada en Polpoo.
  • /api/integrationindependiente: cada envío crea una entrega planificada nueva.

Los campos del formulario inferior están preparados para editarse rápido en pruebas manuales. Cambia el token y el JSON antes de enviar a producción o sandbox.

Probar endpoint acumulativo (API Tester)
Sin ejecutar
Probar endpoint independiente (API Tester)
Sin ejecutar
CampoTipoEstadoDescripción
namestringObligatorioNombre de la importación.
descriptionstringObligatorioDescripción de la importación.
dateSessiondatetimeObligatorioFecha de generación / sesión.
asignationDatedatetimeOblig. en automatizaciónFecha de asignación automática.
deliveryPoints.idstringObligatorioIdentificador único del cliente.
deliveryPoints.namestringObligatorioNombre del cliente.
deliveryPoints.addressstringObligatorioDirección de entrega.
deliveryPoints.deliveryZoneIdstringObligatorioZona/ruta de reparto.
deliveryPoints.nifstringRecomendadoNIF del cliente.
deliveryPoints.populationstringRecomendadoPoblación del cliente.
deliveryPoints.postalCodestringRecomendadoCódigo postal del cliente.
deliveryPoints.coordinates.latitudedecimalRecomendadoLatitud del punto.
deliveryPoints.coordinates.longitudedecimalRecomendadoLongitud del punto.
deliveryPoints.phoneNumberstringRecomendadoTeléfono de contacto.
deliveryPoints.emailstringRecomendadoEmail de contacto.
deliveryPoints.deliveryWindow.startintegerRecomendadoInicio de la ventana horaria en segundos.
deliveryPoints.deliveryWindow.endintegerRecomendadoFin de la ventana horaria en segundos.
deliveryPoints.demandintegerRecomendadoCarga prevista por peso (>=0).
deliveryPoints.volumetricdecimalRecomendadoVolumen previsto en metros cúbicos.
deliveryPoints.deliveryTypestringRecomendadoshipment (entrega) o pickup (recogida). Por defecto shipment.
deliveryPoints.deliveryDescriptionstringRecomendadoshipmentWithPay (entrega con cobro) o onlyPay (solo cobro).
deliveryPoints.deliveryTypeServicestringOpcionalTipo de servicio (primera letra): P = Pedido, I = Instalación, D = Desinstalación, O = Otros.
deliveryPoints.orderNumberstringRecomendadoNúmero de pedido.
deliveryPoints.deliveryNotesstringRecomendadoObservaciones de entrega.
deliveryPoints.deliveryIdentifierstringRecomendadoIdentificador de entrega (vincula con albaranes).
deliveryPoints.phoneWhatsappstringOblig. si módulo WhatsAppTeléfono WhatsApp del cliente.
deliveryPoints.service.codestringOblig. si envías servicioCódigo del servicio.
deliveryPoints.service.namestringOblig. si envías servicioNombre del servicio.
deliveryPoints.deliveryZoneSpecification.codestringOblig. si envías esp. rutaCódigo de la especificación de ruta.
deliveryPoints.deliveryZoneSpecification.namestringOblig. si envías esp. rutaNombre de la especificación de ruta.
deliveryPoints.deliveryZoneNamestringOpcionalNombre legible de la zona de entrega.
deliveryPoints.boxintegerOpcionalNúmero total de cajas.
deliveryPoints.boxes.namestringOpcionalTipo de caja.
deliveryPoints.boxes.countintegerOpcionalCantidad del tipo de caja.
deliveryPoints.demands.codestringOpcionalCódigo del compartimento del vehículo.
deliveryPoints.demands.demandintegerOpcionalCarga específica del compartimento (>=0). Distinto de demand (peso total).
deliveryPoints.companyCifstringOblig. si multiempresaCIF de la empresa facturadora.
deliveryPoints.delegationCodestringOblig. si multiempresaCódigo de delegación interna.
deliveryPoints.useHoursbooleanOpcionalSi true usa las horas del payload; si false usa la configuración de Polpoo.
deliveryPoints.leadTimeintegerOpcionalTiempo de adelanto permitido antes de la apertura del cliente (segundos).
deliveryPoints.allowDelayTimebooleanOpcionalActiva la lógica de retrasos para el cliente.
deliveryPoints.delayTypestringOpcionalNombre del tipo de retraso configurado.
deliveryPoints.activateDeliverySchedulebooleanOpcionalActiva las especificaciones por día/franja.
deliveryPoints.deliveryScheduleDay.isActivebooleanOpcionalDía abierto/cerrado.
deliveryPoints.deliveryScheduleDay.intDayintegerOpcionalDía de la semana (1=Lunes, 2=Martes…).
deliveryPoints.deliveryScheduleDay.fixedDeliverybooleanOpcionalDía de reparto fijo.
deliveryPoints.deliveryScheduleDay.hours.timeStartintegerOpcionalInicio de la franja horaria del día.
deliveryPoints.deliveryScheduleDay.hours.timeEndintegerOpcionalFin de la franja horaria del día.
deliveryPoints.warehouseCodestringOblig. si usas almacenesCódigo del almacén de destino.
deliveryPoints.useAddressbooleanOpcionalSi true usa la dirección del payload; si false usa la de Polpoo.
deliveryPoints.particularintegerOpcional1 no guarda al cliente en BBDD; 0 cliente normal.
deliveryPoints.serviceTimeintegerOpcionalTiempo estimado de descarga (segundos).
deliveryPoints.sendDeliveryNoteMailbooleanOpcionalEnvía albarán por email si true (requiere email informado).
deliveryPoints.travelIdintegerOblig. si multi-viajeIdentificador del viaje en rutas multi-viaje.
deliveryPoints.idERPstringOblig. en automatizaciónID ERP del vehículo (cuando se preasigna).
deliveryPoints.importExtraintegerOpcionalImporte extra a cobrar/abonar al cliente.
deliveryPoints.commercialERPstringOblig. si módulo comunicaciónIdentificador del comercial.
vehicle.idERPstringOblig. en automatizaciónIdentificador ERP del vehículo.
vehicle.userERPstringOblig. en automatizaciónIdentificador ERP del chófer/usuario.
vehicle.addressstringOpcionalDirección de salida del chófer (origen de la ruta).
vehicle.addressEndstringOpcionalDirección de llegada del chófer (final de la ruta).

Ejemplo mínimo

{
  "name": "Rutas 2026-04-07",
  "description": "Carga diaria ERP",
  "dateSession": "2026-04-07",
  "deliveryPoints": [
    {
      "id": "CL-1001",
      "name": "Cliente Demo",
      "address": "Calle Mayor 1, Sevilla",
      "deliveryZoneId": "SEV-01",
      "orderNumber": "PED-260407-001",
      "deliveryType": "shipment"
    }
  ]
}

API · Envío de Albaranes

EndpointPOST /api/route/route_planning_route/albaran_file
Payload raízdateDeliveryStart, deliveryPoints[].deliveryNotes[]
Probar endpoint (API Tester)
Sin ejecutar
CampoTipoEstadoDescripción
dateDeliveryStartdateObligatorioFecha de asignación de los albaranes.
deliveryPoints.idstringObligatorioIdentificador único del cliente.
deliveryPoints.companyCifstringOblig. si multiempresaCIF de la empresa facturadora a nivel de punto de entrega.
deliveryPoints.delegationCodestringOblig. si multiempresaCódigo de delegación interna a nivel de punto de entrega.
deliveryNotes.deliveryNoteCodestringObligatorioNúmero o código del albarán.
deliveryNotes.kgfloatRecomendadoCarga en kilos.
deliveryNotes.volumenfloatRecomendadoCarga en metros cúbicos.
deliveryNotes.packageintegerRecomendadoNúmero de bultos.
deliveryNotes.deliveryNoteObservationstringRecomendadoObservaciones del albarán.
deliveryNotes.deliveryNoteOrderCodestringRecomendadoNúmero del pedido referente.
deliveryNotes.promptPayDiscountPercentfloatRecomendadoDescuento por pronto pago (% sobre el total).
deliveryNotes.isDevolutionbooleanRecomendadotrue = recogida; false/omitido = entrega.
deliveryNotes.totalPricefloatRecomendadoPrecio total del albarán (suma de productos).
deliveryNotes.paletsintegerOpcionalNúmero de palets.
deliveryNotes.sendDeliveryNoteCompanyIdintegerOpcionalID de la compañía destino (multialmacén).
deliveryNotes.showDeliveryNotePricebooleanOpcionalMostrar precios en el albarán.
deliveryNotes.managementCostfloatOpcionalCoste de gestión asociado.
deliveryNotes.managementCostTaxPercentfloatOpcionalIVA aplicado al coste de gestión.
deliveryNotes.scannedCodestringOblig. si usas paqueteríaCódigo de escaneo (módulo Paquetería).
deliveryNotes.isBillbooleanOpcionaltrue = factura. Mutuamente excluyente con isOrder y isDispatchNote.
deliveryNotes.isOrderbooleanOpcionaltrue = pedido. Mutuamente excluyente con isBill e isDispatchNote.
deliveryNotes.isDispatchNotebooleanOpcionaltrue = nota de entrega. Mutuamente excluyente con isBill e isOrder. Si ninguno de los tres está a true, el registro se trata como albarán.
deliveryNotes.billTypeintegerOpcionalTipo de factura asociado.
deliveryNotes.datedateOpcionalFecha que aparecerá en el albarán.
deliveryNotes.barCodestringOpcionalImagen base64 del código de barras.
deliveryNotes.deliveryIdentifierstringOpcionalIdentificador de entrega (vincula con rutas).
deliveryNotes.documentStorestringOpcionalAlmacén del documento (informativo).
deliveryNotes.documentTypestringOpcionalTipo de documento (informativo).
deliveryNotes.documentTypeIntstringOpcionalTipo de documento int (informativo).
deliveryNotes.documentSeriesstringOpcionalSerie del documento (informativo).
deliveryNotes.documentExercisestringOpcionalEjercicio del documento (informativo).
deliveryNotes.payTypestringOpcionalCódigo de periodicidad / forma de pago.
deliveryNotes.payByDefaultbooleanOpcionaltrue = marcado el cobro por defecto.
deliveryNotes.methodOfPaymentstringOpcionalForma de pago (solo informativo).
deliveryNotes.companyAssociated.codestringOblig. si comp. asociadaCódigo de la compañía asociada.
deliveryNotes.companyAssociated.namestringOblig. si comp. asociadaNombre de la compañía asociada.
deliveryNotes.companyAssociated.nifstringOblig. si comp. asociadaNIF de la compañía asociada.
deliveryNotes.companyAssociated.streetAddressstringOblig. si comp. asociadaDirección de la compañía asociada.
deliveryNotes.companyAssociated.citystringOblig. si comp. asociadaCiudad de la compañía asociada.
deliveryNotes.companyAssociated.provincestringOblig. si comp. asociadaProvincia de la compañía asociada.
deliveryNotes.companyAssociated.zipCodestringOblig. si comp. asociadaCódigo postal de la compañía asociada.
deliveryNotes.companyAssociated.phonestringOblig. si comp. asociadaTeléfono de la compañía asociada.
deliveryNotes.companyAssociated.billingEmailstringOblig. si comp. asociadaEmail de facturación de la compañía asociada.
deliveryNotes.products.codestringObligatorioIdentificador del producto.
deliveryNotes.products.namestringObligatorioNombre del producto.
deliveryNotes.products.quantityfloatObligatorioCantidad del producto.
deliveryNotes.products.pricefloatObligatorioPrecio por medida.
deliveryNotes.products.taxPercentintegerObligatorioIVA del producto (%).
deliveryNotes.products.measurestringObligatorioFormato/unidad del producto.
deliveryNotes.products.lotCodestringRecomendadoIdentificador del lote.
deliveryNotes.products.discountPercentfloatRecomendadoDescuento aplicado en porcentaje.
deliveryNotes.products.measureQuantityfloatRecomendadoCantidad referente a la medida.
deliveryNotes.products.equivalencePercentfloatOpcionalRecargo de equivalencia (%).
deliveryNotes.products.grossMassfloatOpcionalPeso bruto.
deliveryNotes.products.tarefloatOpcionalTara.
deliveryNotes.products.netMassfloatOpcionalPeso neto.
deliveryNotes.products.greenPointfloatOpcionalImporte de punto verde.
deliveryNotes.products.ibeefloatOpcionalImporte de bebidas azucaradas envasadas (IBEE).
deliveryNotes.products.ibeeTaxPercentfloatOpcionalIVA aplicado al IBEE.
deliveryNotes.products.observationstringOpcionalObservaciones del producto.
deliveryNotes.products.supplierReferencestringOpcionalReferencia del proveedor.
deliveryNotes.products.expirationDatedateOpcionalFecha de caducidad.
deliveryNotes.products.scannedCodestringOblig. si usas paqueteríaCódigo escaneado del producto.
deliveryNotes.products.scanCodeArraysarrayOblig. si usas paqueteríaLista de códigos escaneados.
deliveryNotes.products.serviceTypestringOpcionalE = entrega; R = recogida.
deliveryNotes.products.productTypestringOpcionalTipo de producto. Para envases: EE = envase entrega; ER = envase recogida.
deliveryNotes.products.compensationNumberstringOpcionalNúmero de compensación.
deliveryNotes.products.residualWeightnumberOpcionalPeso del residuo plástico por unidad. Se muestra/oculta en el documento según configuración de la empresa.
deliveryNotes.products.residualImportnumberOpcionalImporte del residuo plástico por unidad. Cálculo: residualWeight × quantity × residualImport.

Ejemplo mínimo

{
  "dateDeliveryStart": "2026-04-07",
  "deliveryPoints": [
    {
      "id": "CL-1001",
      "deliveryNotes": [
        {
          "deliveryNoteCode": "ALB-260407-001",
          "deliveryNoteOrderCode": "PED-260407-001",
          "products": [
            {
              "code": "PRD-001",
              "name": "Producto 1",
              "quantity": 2,
              "price": 4.5,
              "taxPercent": 21,
              "measure": "UNITS"
            }
          ]
        }
      ]
    }
  ]
}

API · Envío de Cobros

EndpointPOST /api/company_bill_upload
Payloadbills[]
Probar endpoint (API Tester)
Sin ejecutar
CampoTipoEstadoDescripción
bills.deliveryPointIdstringObligatorioId cliente.
bills.codestringObligatorioCódigo factura.
bills.totalfloatObligatorioImporte total.
bills.archiveUrlstringObligatorioURL externa del PDF.
bills.statusintegerObligatorio1 por cobrar, 2 cobrada.
bills.companyCifstringOblig. si multiempresaCIF de la empresa facturadora. Solo en cuentas multiempresa.
bills.delegationCodestringOblig. si multiempresaCódigo de delegación interna. Solo en cuentas multiempresa.

Ejemplo mínimo

{
  "bills": [
    {
      "deliveryPointId": "CL-1001",
      "code": "FAC-260407-001",
      "total": 145.25,
      "archiveUrl": "https://erp.midominio.com/facturas/FAC-260407-001.pdf",
      "status": 1
    }
  ]
}

API · Envío de Motivos

EndpointPOST /api/company_custom_incident_reason_integration
Payloaddata[]

Sincroniza el catálogo de motivos de incidencia (causas predefinidas que el chófer puede seleccionar en la app al registrar una incidencia o modificación).

Probar endpoint (API Tester)
Sin ejecutar
CampoTipoEstadoDescripción
data[].codestringObligatorioIdentificador único del motivo en tu ERP.
data[].namestringObligatorioNombre/descripción del motivo que verá el chófer en la app.
data[].isActivebooleanObligatoriotrue si el motivo está disponible para selección; false para desactivarlo sin borrarlo.

No usar comillas dobles dentro del valor de name (rompen el JSON). El resto de caracteres especiales son válidos.

Ejemplo mínimo

{
  "data": [
    {
      "code": "1",
      "name": "Roto",
      "isActive": false
    },
    {
      "code": "2",
      "name": "Mal estado",
      "isActive": true
    }
  ]
}

API · Devolución de Cobros

EndpointPOST /api/payments
FiltrodeliveryPointId, code o ambos
Probar endpoint (API Tester)
Sin ejecutar

Debe enviarse al menos uno de los dos filtros: deliveryPointId o code.

Campos de consulta

CampoTipoEstadoDescripción
deliveryPointIdstringOpcionalCódigo cliente.
codestringOpcionalCódigo factura.

Campos devueltos

CampoTipoDescripción
namestringNombre del cliente.
codestringCódigo de la factura.
paymentDatedatetimeFecha de cobro.
paymentTypestringTipo o canal de cobro.
userChargedBystringUsuario que registró el cobro.
totalfloatTotal cobrado.
billPaymentStatusNamestringNombre del estado de pago.
billPaymentStatusIdintegerIdentificador del estado de pago.
vehiclestringMatrícula del vehículo cobrador.
documentStorestringAlmacén o ubicación documental.
documentTypestringTipo de documento.
documentSeriesstringSerie documental.
documentExercisestringEjercicio documental.
dniDeliveryNotestringDNI de la persona que cobra o firma.
nameDeliveryNotestringNombre de la persona que cobra o firma.

Ejemplo petición

{
  "deliveryPointId": "CL-1001",
  "code": "FAC-260407-001"
}

Ejemplo respuesta

[
  {
    "name": "Cliente Demo",
    "code": "FAC-260407-001",
    "paymentDate": "2026-04-07 10:15:00",
    "paymentType": "Tarjeta de crédito o débito",
    "userChargedBy": "Chofer 01",
    "total": 145.25,
    "billPaymentStatusName": "Cobrado",
    "billPaymentStatusId": 2,
    "vehicle": "1234ABC"
  }
]

API · Devolución Orden de Rutas

EndpointPOST /api/integration/route/planified
Request{ "date": "YYYY-MM-DD" }
Probar endpoint (API Tester)
Sin ejecutar
Campo de respuestaTipoDescripción
rutastringNombre de la ruta.
deliveryZoneIdstringIdentificador de la zona o ruta.
totalKgnumberPeso total de la carga.
totalVolumennumberVolumen total de la carga.
departureDayTimeintegerHora de salida planificada.
vehicle.idintegerIdentificador interno del vehículo.
vehicle.registrationstringMatrícula del vehículo.
vehicle.idERPstringIdentificador ERP del vehículo.
vehicle.user.idintegerIdentificador interno del chófer.
vehicle.user.namestringNombre del chófer.
vehicle.user.surnamestringApellidos del chófer.
vehicle.user.idERPstringIdentificador ERP del chófer.
deliveryPoints.idstringIdentificador del punto.
deliveryPoints.namestringNombre del punto o cliente.
deliveryPoints.orderintegerOrden de entrega.
deliveryPoints.estimatedArrivalTimeintegerETA por parada.
deliveryPoints.orderNumberstringPedido asociado.
deliveryPoints.coordinates.latitudedecimalLatitud del punto.
deliveryPoints.coordinates.longitudedecimalLongitud del punto.
deliveryPoints.addressstringDirección del punto.
deliveryPoints.deliveryTypestringTipo de servicio.
deliveryPoints.travelIdintegerIdentificador de viaje.
deliveryPoints.companyCifstringCIF de la compañía.
deliveryPoints.delegationCodestringCódigo de delegación.

Ejemplo petición

{
  "date": "2026-04-07"
}

Ejemplo respuesta

{
  "data": [
    {
      "ruta": "RUTA-1",
      "vehicle": {
        "id": 100,
        "registration": "1234ABC"
      },
      "deliveryPoints": [
        {
          "id": "CL-1001",
          "order": 1,
          "estimatedArrivalTime": 32400,
          "orderNumber": "PED-260407-001"
        }
      ]
    }
  ]
}

API · Seguimiento de Rutas (consulta)

EndpointGET /api/route/route_planning_route/date/YYYY-MM-DD/delivery_points
FiltrosorderNumber, routeId, id
Probar endpoint (API Tester)
Sin ejecutar

La respuesta es extensa. Campos más usados en integración ERP:

CampoTipoDescripción
totalPendingDeliveryPointsintegerTotal de puntos pendientes.
totalDelayedPointsintegerTotal de puntos con retraso.
totalDevolutionintegerTotal de devoluciones.
totalBoxesintegerTotal de cajas.
totalRetornableBoxintegerTotal de cajas retornables.
dateDeliveryStartdateFecha de la ruta.
driverStartTimedatetimeHora de inicio del chófer.
statusRoute.idintegerIdentificador del estado de ruta.
statusRoute.namestringNombre del estado de ruta.
data._idstringIdentificador interno del registro.
data.deliveryPointIdstringIdentificador del cliente o punto.
data.identifierstringIdentificador externo de entrega.
data.orderintegerOrden de visita.
data.orderNumberstringNúmero de pedido.
data.deliveryTypestringTipo de servicio.
data.signaturestringFirma en base64.
data.signaturaTimedatetimeFecha y hora de firma.
data.incident.observationstringObservación de la incidencia.
data.deliveryNotesstringObservaciones de entrega.
data.coordinates.latitudedecimalLatitud del punto.
data.coordinates.longitudedecimalLongitud del punto.
data.deliveryWindow.startintegerInicio de la ventana horaria del cliente.
data.deliveryWindow.endintegerFin de la ventana horaria del cliente.
data.arrivalTimeintegerETA prevista.
data.arrivalDayTimeWithDelayintegerETA prevista con retraso.
data.delayTimeintegerRetraso estimado.
data.delayTimeOnDeliveryintegerRetraso en la entrega.
data.delayAccumulatedintegerRetraso acumulado.
data.statusDeliveryPoints.*objectHistórico de estados por cliente.
data.listDevolutionarrayListado de devoluciones.
data.albaransarrayListado de albaranes asociados.
driver.*objectDatos del chófer.
vehicle.*objectDatos del vehículo.

API · Maestro de Clientes (consulta)

EndpointGET /api/delivery_point_datatables
Filtrosid, name

Consulta el maestro de clientes de Polpoo. Sin parámetros devuelve la base completa; con id o name filtra el resultado.

Probar endpoint (API Tester)
Sin ejecutar

Filtros de consulta

ParámetroTipoEstadoDescripción
idstringOpcionalIdentificador único del cliente. Ej.: ?id=1054.
namestringOpcionalNombre o fragmento de nombre del cliente. Ej.: ?name=carniceria.

Campos devueltos

CampoTipoEstadoDescripción
data.idstringObligatorioIdentificador único del cliente.
data.companyIdintegerObligatorioIdentificador único de la empresa a la que pertenece el cliente.
data.namestringObligatorioNombre del cliente.
data.nifstringOpcionalNIF/CIF del cliente.
data.addressstringOpcionalDirección principal del cliente.
data.serviceTimeintegerOpcionalTiempo medio de servicio en segundos.
data.deliveryZoneIdstringOpcionalRuta de reparto predefinida del cliente.
data.coordinatesLatitudestringOpcionalLatitud de la dirección de entrega.
data.coordinatesLongitudestringOpcionalLongitud de la dirección de entrega.
data.deliveryWindowStartintegerOpcionalHora de apertura del cliente en segundos.
data.deliveryWindowEndintegerOpcionalHora de cierre del cliente en segundos.
data.postalCodestringOpcionalCódigo postal del cliente.
data.phoneNumberstringOpcionalTeléfono de contacto.
data.emailstringOpcionalEmail de contacto.
data.sendDeliveryNoteMailbooleanOpcionalSi true, el albarán firmado se envía por email al cliente.
data.companyAssociatedIdstringOpcionalIdentificador de la empresa asociada.
data.isActivebooleanOpcionalEstado activo del cliente.
data.populationstringOpcionalMunicipio/población del cliente.
data.showDeliveryNotePricebooleanOpcionalSi true, los albaranes del cliente muestran precio.

Ejemplo petición

GET https://v2.restapi.polpoo.com/api/delivery_point_datatables?id=1054

API · Tracking (devolución de estado a Polpoo)

EndpointPOST /api/integration/tracking
Eventos10 inicio, 11 fin, 1 entrega, 2 anulación
Probar endpoint (API Tester)
Sin ejecutar
EventoCampos requeridosEjemplo
Inicio de ruta (event=10)event, routeId{ "event": 10, "routeId": 1 }
Fin de ruta (event=11)event, routeId{ "event": 11, "routeId": 1 }
Entrega (event=1)event, routeId, clientId, comment, signatureTime, driverArrivalTime{ "event": 1, "routeId": "...", "clientId": "...", ... }
Anulación (event=2)event, routeId, clientId, comments, detail{ "event": 2, "routeId": "...", "clientId": "...", ... }

No todos los campos se envían en todos los eventos. La obligatoriedad depende del event.

API · Geolocalización de Chóferes

EndpointPOST · consultar con un técnico de Polpoo
FiltrosorderNumber, name, userName

Devuelve la última posición GPS registrada del chófer durante el reparto, filtrada por número de pedido, nombre o usuario del chófer. Está pensada para consulta puntual del estado, no para tracking continuo.

El endpoint exacto no se publica en la documentación pública — solicítalo a un técnico de Polpoo. Requiere un usuario con rol técnico para generar el token.

Parámetros de petición

CampoTipoEstadoDescripción
orderNumberstringOpcionalNúmero de pedido asociado a la entrega.
namestringOpcionalNombre del chófer.
userNamestringOpcionalUsuario del chófer en Polpoo.

Ejemplo petición

{
  "orderNumber": "12345678",
  "name": "Vic",
  "userName": "vicenc.sierra@polpoo.com"
}

Campos devueltos

CampoTipoDescripción
namestringNombre del chófer.
surnamestringApellidos del chófer.
userNamestringUsuario del chófer en Polpoo.
localizationLastUpdatedatetimeFecha y hora de la última posición registrada.
latitudedecimalLatitud GPS.
longitudedecimalLongitud GPS.

El chófer debe estar activo y en reparto para que exista posición. Si no, la respuesta vendrá vacía.

SFTP · Envío de Rutas

Fichero: delivery_points.json en la raíz del SFTP de la compañía (./company_X/).

Para verificar la carga: Planificador → + Rutas → Entregas planificadas.

Codificación UTF-8. Si subes un fichero con el mismo nombre, se sobrescribe. Los valores de los campos no pueden contener comillas dobles. Los campos opcionales sin valor deben omitirse (no enviar la clave en el JSON).

CampoTipoEstadoDescripción
namestringObligatorioNombre de la importación.
descriptionstringObligatorioDescripción de la importación.
dateSessiondatetimeObligatorioFecha de generación / sesión.
asignationDatedatetimeOblig. en automatizaciónFecha de asignación automática.
deliveryPoints.idstringObligatorioIdentificador único del cliente.
deliveryPoints.namestringObligatorioNombre del cliente.
deliveryPoints.addressstringObligatorioDirección de entrega.
deliveryPoints.deliveryZoneIdstringObligatorioZona/ruta de reparto.
deliveryPoints.nifstringRecomendadoNIF del cliente.
deliveryPoints.populationstringRecomendadoPoblación del cliente.
deliveryPoints.postalCodestringRecomendadoCódigo postal del cliente.
deliveryPoints.coordinates.latitudedecimalRecomendadoLatitud del punto.
deliveryPoints.coordinates.longitudedecimalRecomendadoLongitud del punto.
deliveryPoints.phoneNumberstringRecomendadoTeléfono de contacto.
deliveryPoints.emailstringRecomendadoEmail de contacto.
deliveryPoints.deliveryWindow.startintegerRecomendadoInicio de la ventana horaria en segundos.
deliveryPoints.deliveryWindow.endintegerRecomendadoFin de la ventana horaria en segundos.
deliveryPoints.demandintegerRecomendadoCarga prevista por peso (>=0).
deliveryPoints.volumetricdecimalRecomendadoVolumen previsto en metros cúbicos.
deliveryPoints.deliveryTypestringRecomendadoshipment (entrega) o pickup (recogida). Por defecto shipment.
deliveryPoints.deliveryDescriptionstringRecomendadoshipmentWithPay (entrega con cobro) o onlyPay (solo cobro).
deliveryPoints.deliveryTypeServicestringOpcionalTipo de servicio (primera letra): P = Pedido, I = Instalación, D = Desinstalación, O = Otros.
deliveryPoints.orderNumberstringRecomendadoNúmero de pedido.
deliveryPoints.deliveryNotesstringRecomendadoObservaciones de entrega.
deliveryPoints.deliveryIdentifierstringRecomendadoIdentificador de entrega (vincula con albaranes).
deliveryPoints.phoneWhatsappstringOblig. si módulo WhatsAppTeléfono WhatsApp del cliente.
deliveryPoints.service.codestringOblig. si envías servicioCódigo del servicio.
deliveryPoints.service.namestringOblig. si envías servicioNombre del servicio.
deliveryPoints.deliveryZoneSpecification.codestringOblig. si envías esp. rutaCódigo de la especificación de ruta.
deliveryPoints.deliveryZoneSpecification.namestringOblig. si envías esp. rutaNombre de la especificación de ruta.
deliveryPoints.deliveryZoneNamestringOpcionalNombre legible de la zona de entrega.
deliveryPoints.boxintegerOpcionalNúmero total de cajas.
deliveryPoints.boxes.namestringOpcionalTipo de caja.
deliveryPoints.boxes.countintegerOpcionalCantidad del tipo de caja.
deliveryPoints.demands.codestringOpcionalCódigo del compartimento del vehículo.
deliveryPoints.demands.demandintegerOpcionalCarga específica del compartimento (>=0). Distinto de demand (peso total).
deliveryPoints.companyCifstringOblig. si multiempresaCIF de la empresa facturadora.
deliveryPoints.delegationCodestringOblig. si multiempresaCódigo de delegación interna.
deliveryPoints.useHoursbooleanOpcionalSi true usa las horas del fichero; si false usa la configuración de Polpoo.
deliveryPoints.leadTimeintegerOpcionalTiempo de adelanto permitido antes de la apertura del cliente (segundos).
deliveryPoints.allowDelayTimebooleanOpcionalActiva la lógica de retrasos para el cliente.
deliveryPoints.delayTypestringOpcionalNombre del tipo de retraso configurado.
deliveryPoints.activateDeliverySchedulebooleanOpcionalActiva las especificaciones por día/franja.
deliveryPoints.deliveryScheduleDay.isActivebooleanOpcionalDía abierto/cerrado.
deliveryPoints.deliveryScheduleDay.intDayintegerOpcionalDía de la semana (1=Lunes, 2=Martes…).
deliveryPoints.deliveryScheduleDay.fixedDeliverybooleanOpcionalDía de reparto fijo.
deliveryPoints.deliveryScheduleDay.hours.timeStartintegerOpcionalInicio de la franja horaria del día.
deliveryPoints.deliveryScheduleDay.hours.timeEndintegerOpcionalFin de la franja horaria del día.
deliveryPoints.warehouseCodestringOblig. si usas almacenesCódigo del almacén de destino.
deliveryPoints.useAddressbooleanOpcionalSi true usa la dirección del fichero; si false usa la de Polpoo.
deliveryPoints.particularintegerOpcional1 no guarda al cliente en BBDD; 0 cliente normal.
deliveryPoints.serviceTimeintegerOpcionalTiempo estimado de descarga (segundos).
deliveryPoints.sendDeliveryNoteMailbooleanOpcionalEnvía albarán por email si true (requiere email informado).
deliveryPoints.travelIdintegerOblig. si multi-viajeIdentificador del viaje en rutas multi-viaje.
deliveryPoints.idERPstringOblig. en automatizaciónID ERP del vehículo (cuando se preasigna).
deliveryPoints.importExtraintegerOpcionalImporte extra a cobrar/abonar al cliente.
deliveryPoints.commercialERPstringOblig. si módulo comunicaciónIdentificador del comercial.
vehicle.idERPstringOblig. en automatizaciónIdentificador ERP del vehículo.
vehicle.userERPstringOblig. en automatizaciónIdentificador ERP del chófer/usuario.
vehicle.addressstringOpcionalDirección de salida del chófer (origen de la ruta).
vehicle.addressEndstringOpcionalDirección de llegada del chófer (final de la ruta).

Ejemplo

{
  "name": "Lunes",
  "description": "Rutas del lunes",
  "dateSession": "2020-11-9",
  "deliveryPoints": [
    {
      "id": "119029",
      "name": "Empresa SL",
      "address": "Pg. Sant Joan 6, 08009, Barcelona",
      "deliveryZoneId": "BCN-02",
      "deliveryWindow": { "start": 17700, "end": 28000 },
      "population": "Barcelona",
      "demand": 12,
      "volumetric": 0.89,
      "postalCode": "08009",
      "nif": "F62789012",
      "phoneNumber": "34666555666",
      "email": "prueba@empr.com",
      "deliveryType": "shipment",
      "orderNumber": "P-4234",
      "coordinates": { "latitude": 41.3250913, "longitude": 2.0148042 },
      "deliveryNotes": "Pedir llaves"
    }
  ]
}

Conexión SFTP (usuario, contraseña, servidor, puerto): solicítala al equipo técnico de Polpoo. La empresa debe configurar un email de soporte en Configuración > Integraciones.

SFTP · Envío de Albaranes

Fichero: albarans.json en la raíz del SFTP de la compañía (./company_X/).

En un mismo fichero deben venir todos los albaranes del día; si un cliente tiene más de un albarán, se añade como nuevo registro en el array deliveryNotes. Las rutas de los clientes deben estar previamente asignadas en Polpoo antes de cargar el fichero.

Codificación UTF-8. Si subes un fichero con el mismo nombre, se sobrescribe. Los valores de los campos no pueden contener comillas dobles. Los campos opcionales sin valor deben omitirse.

CampoTipoEstadoDescripción
deliveryPoints.idstringObligatorioIdentificador único del cliente.
deliveryPoints.companyCifstringOblig. si multiempresaCIF de la empresa facturadora a nivel de punto de entrega.
deliveryPoints.delegationCodestringOblig. si multiempresaCódigo de delegación interna a nivel de punto de entrega.
deliveryNotes.deliveryNoteCodestringObligatorioNúmero o código del albarán.
deliveryNotes.kgfloatRecomendadoCarga en kilos.
deliveryNotes.volumenfloatRecomendadoCarga en metros cúbicos.
deliveryNotes.packageintegerRecomendadoNúmero de bultos.
deliveryNotes.deliveryNoteObservationstringRecomendadoObservaciones del albarán.
deliveryNotes.deliveryNoteOrderCodestringRecomendadoNúmero del pedido referente.
deliveryNotes.promptPayDiscountPercentfloatRecomendadoDescuento por pronto pago (% sobre el total).
deliveryNotes.isDevolutionbooleanRecomendadotrue = recogida; false/omitido = entrega.
deliveryNotes.totalPricefloatRecomendadoPrecio total del albarán (suma de productos).
deliveryNotes.paletsintegerOpcionalNúmero de palets.
deliveryNotes.sendDeliveryNoteCompanyIdintegerOpcionalID de la compañía destino (multialmacén).
deliveryNotes.showDeliveryNotePricebooleanOpcionalMostrar precios en el albarán.
deliveryNotes.managementCostfloatOpcionalCoste de gestión asociado.
deliveryNotes.managementCostTaxPercentfloatOpcionalIVA aplicado al coste de gestión.
deliveryNotes.scannedCodestringOblig. si usas paqueteríaCódigo de escaneo (módulo Paquetería).
deliveryNotes.isBillbooleanOpcionaltrue = factura. Mutuamente excluyente con isOrder y isDispatchNote.
deliveryNotes.isOrderbooleanOpcionaltrue = pedido. Mutuamente excluyente con isBill e isDispatchNote.
deliveryNotes.isDispatchNotebooleanOpcionaltrue = nota de entrega. Mutuamente excluyente con isBill e isOrder. Si ninguno de los tres está a true, el registro se trata como albarán.
deliveryNotes.billTypeintegerOpcionalTipo de factura asociado.
deliveryNotes.datedateOpcionalFecha que aparecerá en el albarán.
deliveryNotes.barCodestringOpcionalImagen base64 del código de barras.
deliveryNotes.deliveryIdentifierstringOpcionalIdentificador de entrega (vincula con rutas).
deliveryNotes.documentStorestringOpcionalAlmacén del documento (informativo).
deliveryNotes.documentTypestringOpcionalTipo de documento (informativo).
deliveryNotes.documentTypeIntstringOpcionalTipo de documento int (informativo).
deliveryNotes.documentSeriesstringOpcionalSerie del documento (informativo).
deliveryNotes.documentExercisestringOpcionalEjercicio del documento (informativo).
deliveryNotes.payTypestringOpcionalCódigo de periodicidad / forma de pago.
deliveryNotes.payByDefaultbooleanOpcionaltrue = marcado el cobro por defecto.
deliveryNotes.methodOfPaymentstringOpcionalForma de pago (solo informativo).
deliveryNotes.companyAssociated.codestringOblig. si comp. asociadaCódigo de la compañía asociada.
deliveryNotes.companyAssociated.namestringOblig. si comp. asociadaNombre de la compañía asociada.
deliveryNotes.companyAssociated.nifstringOblig. si comp. asociadaNIF de la compañía asociada.
deliveryNotes.companyAssociated.streetAddressstringOblig. si comp. asociadaDirección de la compañía asociada.
deliveryNotes.companyAssociated.citystringOblig. si comp. asociadaCiudad de la compañía asociada.
deliveryNotes.companyAssociated.provincestringOblig. si comp. asociadaProvincia de la compañía asociada.
deliveryNotes.companyAssociated.zipCodestringOblig. si comp. asociadaCódigo postal de la compañía asociada.
deliveryNotes.companyAssociated.phonestringOblig. si comp. asociadaTeléfono de la compañía asociada.
deliveryNotes.companyAssociated.billingEmailstringOblig. si comp. asociadaEmail de facturación de la compañía asociada.
deliveryNotes.products.codestringObligatorioIdentificador del producto.
deliveryNotes.products.namestringObligatorioNombre del producto.
deliveryNotes.products.quantityfloatObligatorioCantidad del producto.
deliveryNotes.products.pricefloatObligatorioPrecio por medida.
deliveryNotes.products.taxPercentintegerObligatorioIVA del producto (%).
deliveryNotes.products.measurestringObligatorioFormato/unidad del producto.
deliveryNotes.products.lotCodestringRecomendadoIdentificador del lote.
deliveryNotes.products.discountPercentfloatRecomendadoDescuento aplicado en porcentaje.
deliveryNotes.products.measureQuantityfloatRecomendadoCantidad referente a la medida.
deliveryNotes.products.equivalencePercentfloatOpcionalRecargo de equivalencia (%).
deliveryNotes.products.grossMassfloatOpcionalPeso bruto.
deliveryNotes.products.tarefloatOpcionalTara.
deliveryNotes.products.netMassfloatOpcionalPeso neto.
deliveryNotes.products.greenPointfloatOpcionalImporte de punto verde.
deliveryNotes.products.ibeefloatOpcionalImporte de bebidas azucaradas envasadas (IBEE).
deliveryNotes.products.ibeeTaxPercentfloatOpcionalIVA aplicado al IBEE.
deliveryNotes.products.observationstringOpcionalObservaciones del producto.
deliveryNotes.products.supplierReferencestringOpcionalReferencia del proveedor.
deliveryNotes.products.expirationDatedateOpcionalFecha de caducidad.
deliveryNotes.products.scannedCodestringOblig. si usas paqueteríaCódigo escaneado del producto.
deliveryNotes.products.scanCodeArraysarrayOblig. si usas paqueteríaLista de códigos escaneados.
deliveryNotes.products.serviceTypestringOpcionalE = entrega; R = recogida.
deliveryNotes.products.productTypestringOpcionalTipo de producto. Para envases: EE = envase entrega; ER = envase recogida.
deliveryNotes.products.compensationNumberstringOpcionalNúmero de compensación.
deliveryNotes.products.residualWeightnumberOpcionalPeso del residuo plástico por unidad. Se muestra/oculta en el documento según configuración de la empresa.
deliveryNotes.products.residualImportnumberOpcionalImporte del residuo plástico por unidad. Cálculo: residualWeight × quantity × residualImport.

Ejemplo

{
  "deliveryPoints": [
    {
      "id": "119029",
      "deliveryNotes": [
        {
          "deliveryNoteCode": "45466770",
          "kg": 1450.5,
          "volumen": 300.6,
          "package": 2,
          "deliveryNoteObservation": "Observaciones",
          "deliveryNoteOrderCode": "2013",
          "promptPayDiscountPercent": 33,
          "isDevolution": false,
          "products": [
            {
              "code": "PX-34",
              "name": "Manzana Pink Pearl",
              "quantity": 23,
              "price": 0.67,
              "taxPercent": 21,
              "measure": "KGS",
              "lotCode": "11297090",
              "discountPercent": 20
            }
          ]
        }
      ]
    }
  ]
}

Conexión SFTP (usuario, contraseña, servidor, puerto): solicítala al equipo técnico de Polpoo. La empresa debe configurar un email de soporte en Configuración > Integraciones.

SFTP · Envío de Cobros

Fichero: bills.json en la raíz del SFTP de la compañía (./).

Polpoo no almacena el PDF de la factura — únicamente el enlace (archiveUrl) al documento que debe vivir en un servidor accesible del integrador.

Si subes un fichero con el mismo nombre, se sobrescribe. Codificación UTF-8. No incluir comillas dobles ni caracteres especiales dentro del valor de los campos.

CampoTipoEstadoDescripción
bills.deliveryPointIdstringObligatorioIdentificador único del cliente.
bills.codestringObligatorioCódigo o número de factura.
bills.totalfloatObligatorioImporte total de la factura.
bills.archiveUrlstringObligatorioURL externa del PDF de la factura.
bills.statusintegerObligatorio1 por cobrar, 2 cobrada.

Ejemplo

{
  "bills": [
    {
      "deliveryPointId": "1054",
      "code": "119029",
      "total": 221.30,
      "archiveUrl": "https://via.placeholder.com/119029.pdf",
      "status": 1
    }
  ]
}

Conexión SFTP (usuario, contraseña, servidor, puerto): solicítala al equipo técnico de Polpoo. Cada empresa tiene un directorio propio.

SFTP · Envío de Envases

Fichero: envases.json en la raíz del SFTP.

CampoTipoEstadoDescripción
idstringObligatorioCliente.
products.codestringObligatorioCódigo envase.
products.namestringObligatorioNombre envase.
products.quantityintegerObligatorioCantidad.
products.importfloatObligatorioImporte por unidad.

Ejemplo

[
  {
    "id": "CL-1001",
    "products": [
      {
        "code": "ENV-001",
        "name": "Caja retornable",
        "quantity": 10,
        "import": 0
      }
    ]
  }
]

SFTP · Envío de Clientes

Fichero: clients.json.

CampoTipoEstadoDescripción
idstringObligatorioId cliente.
namestringObligatorioNombre.
addressstringObligatorioDirección principal.
serviceTimeintegerObligatorioTiempo de servicio o descarga.
demandintegerObligatorioCapacidad o demanda del punto.
nifstringOpcionalNIF del cliente.
emailstringOpcionalEmail del cliente.
populationstringOpcionalPoblación del cliente.
deliveryWindow.startintegerOpcionalInicio de la ventana horaria.
deliveryWindow.endintegerOpcionalFin de la ventana horaria.
addresses[].*objectOpcionalDirecciones secundarias con coordenadas.
phones[].*objectOpcionalTeléfonos secundarios.
service.codestringOblig. si envías servicioCódigo del servicio.
service.namestringOblig. si envías servicioNombre del servicio.
showDeliveryNotePricebooleanOpcionalAlbaranes con/sin precio.

Ejemplo mínimo

{
  "deliveryPoints": [
    {
      "id": "CL-1001",
      "name": "Cliente Demo",
      "address": "Calle Mayor 1, Sevilla",
      "serviceTime": 600,
      "demand": 0
    }
  ]
}

SFTP · Devolución de Rutas

Polpoo devuelve planificación y optimización en ficheros:

  • evaluation_YYYYMMDD.json
  • optimization_YYYYMMDD.json
CampoTipoDescripción
vehicleIdintegerIdentificador del vehículo asignado.
vehicles[].registrationstringMatrícula del vehículo asignado.
vehicles[].idERPstringIdentificador ERP del vehículo asignado.
vehicles[].user.idintegerIdentificador del chófer.
vehicles[].user.namestringNombre del chófer.
vehicles[].user.surnamestringApellidos del chófer.
vehicles[].user.idERPstringIdentificador ERP del chófer.
deliveryZoneIdstringRuta principal.
associatedRoutestringRuta asociada.
deliveryPoints.idstringCliente.
deliveryPoints.orderintegerOrden de visita.
deliveryPoints.estimatedArrivalTimeintegerETA por punto.
deliveryPoints.orderNumberstringPedido.
deliveryPoints.coordinates.longitudedecimalLongitud del punto.
deliveryPoints.coordinates.latitudedecimalLatitud del punto.
deliveryPoints.travelIdintegerViaje en rutas multiviaje.

Ejemplo devolución

{
  "routes": [
    {
      "deliveryZoneId": "RUTA-1",
      "deliveryPoints": [
        {
          "id": "CL-1001",
          "order": 1,
          "estimatedArrivalTime": 32400
        }
      ]
    }
  ]
}

SFTP · Devolución de Albaranes

Fichero: route_NombreDeLaRuta_YYYYMMDD.json en las carpetas de retorno del SFTP.

Polpoo genera el fichero al cerrar la ruta, con la firma, las cajas entregadas/devueltas, las modificaciones de líneas y las incidencias.

Campos clave de devolución

CampoTipoDescripción
idstringCliente.
signaturestringFirma base64 (caso albarán único).
deliveredBoxesintegerCajas entregadas.
devolutionBoxesintegerCajas recogidas o devueltas.
devolutionDeliveryNotestringMotivo de devolución.
observationstringObservación general.
deliveryNoteObservationstringObservación del albarán.
dniDeliveryNotestringDNI del firmante.
nameDeliveryNotestringNombre del firmante.
deliveryNoteStatusintegerEstado albarán (según configuración Polpoo).
deliveryNotes[].deliveryNoteCodestringDetalle por albarán cuando hay varios.
deliveryNotes[].signaturestringFirma por albarán.
deliveryNotes[].products[].quantity_newintegerCantidad final tras modificación.
deliveryNotes[].products[].modifybooleanMarca que hubo modificación.
deliveryNotes[].products[].import_newfloatImporte recalculado tras modificación.
deliveryNotes[].products[].predefine.*objectMotivo predefinido de incidencia/modificación.

Ejemplo devolución (resumen)

[
  {
    "id": "CL-1001",
    "deliveredBoxes": 3,
    "devolutionBoxes": 1,
    "deliveryNotes": [
      {
        "deliveryNoteCode": "ALB-260407-001",
        "deliveryNoteStatus": 3,
        "signature": "data:image/jpeg;base64,..."
      }
    ]
  }
]

SFTP · Devolución de Cobros

Fichero: bill_XXXX.json (donde XXXX = código de factura) en la carpeta ./bills/ del SFTP.

Polpoo genera el fichero automáticamente cada vez que cambia el estado de cobro de una factura.

Si la factura se devuelve sin cobrar, todos los campos vienen a null excepto code.

CampoTipoDescripción
codestringCódigo o número de factura.
paymentDatedatetimeFecha y hora del cobro.
paymentTypestringMétodo de cobro (Efectivo, Tarjeta de crédito o débito…).
chargeTypestringCanal del cobro (App, Comercial).
userChargedBystringUsuario que registró el cobro.
totalfloatImporte cobrado.
billPaymentStatusNamestringNombre del estado de cobro.
billPaymentStatusIdintegerIdentificador del estado de cobro.
vehicle.idintegerIdentificador interno del vehículo.
vehicle.namestringNombre del vehículo.
vehicle.registrationstringMatrícula del vehículo.
vehicle.idERParrayIdentificador(es) ERP del vehículo.
deliveryNotes.documentStorestringAlmacén o ubicación documental.
deliveryNotes.documentTypestringTipo de documento.
deliveryNotes.documentSeriesstringSerie documental.
deliveryNotes.documentExercisestringEjercicio documental.
userERParrayIdentificador(es) ERP del chófer/operador que cobró.

Ejemplo devolución

{
  "code": "2261212-122024",
  "paymentDate": "2025-01-10 09:12:55",
  "paymentType": "Efectivo",
  "chargeType": "Comercial",
  "userChargedBy": "Joel Digon Martinez",
  "total": 55.9,
  "billPaymentStatusName": "Cobrado",
  "billPaymentStatusId": 2,
  "vehicle": {
    "id": 1613,
    "name": "iveco daily 2",
    "registration": "1056GKD",
    "idERP": ["2"]
  },
  "deliveryNotes": {
    "documentStore": "2",
    "documentType": "1",
    "documentSeries": "201",
    "documentExercise": "2023"
  },
  "userERP": ["5"]
}

SFTP · Devolución de Envases

Fichero: _YYYY_MM_DD_XXXX.json en la carpeta de retorno del SFTP. Polpoo lo genera al cerrar la ruta con el detalle de envases entregados/recogidos.

CampoTipoEstadoDescripción
idstringObligatorioCliente.
products.codestringObligatorioCódigo envase.
products.namestringObligatorioNombre envase.
products.quantityintegerObligatorioCantidad final entregada o recogida.
products.typestringObligatoriodelivery (entregado) o pickup (recogido del cliente).

Excel · Carga de clientes

Plantilla para alta/actualización del maestro de clientes en Polpoo.

CampoTipoEstadoDescripción
idstringObligatorioIdentificador del cliente.
namestringObligatorioNombre del cliente.
nifstringObligatorioNIF del cliente.
addressstringObligatorioDirección del cliente.
deliveryZoneIdstringObligatorioZona de reparto.
coordinatesLatitudenumberOpcionalLatitud del cliente.
coordinatesLongitudenumberOpcionalLongitud del cliente.
postalCodestringOpcionalCódigo postal.
provincestringOpcionalProvincia.
emailstringOpcionalEmail de contacto.
phoneNumberstringOpcionalTeléfono de contacto.
deliveryWindowStartintegerOpcionalInicio del horario de entrega en segundos.
deliveryWindowEndintegerOpcionalFin del horario de entrega en segundos.
serviceTimeintegerOpcionalTiempo de descarga.
demandnumberOpcionalDemanda o capacidad.
requiredSignaturebooleanOpcionalFirma obligatoria en app.
leadTimestringOpcionalMargen de adelanto permitido.
delayTimestringOpcionalMargen de retraso permitido.
sendDeliveryNoteMailbooleanOpcionalEnvío de albarán por correo.

Excel · Envío de rutas

Plantilla para envío puntual de rutas sin pasar por el ERP.

Si usas CSV debe ir separado por ; y codificado en UTF-8.

CampoTipoEstadoDescripción
idstringObligatorioIdentificador único del cliente.
addressstringObligatorioDirección de envío.
namestringObligatorioNombre del cliente.
deliveryZoneIdstringObligatorioZona/ruta de reparto.
populationstringOblig. si concatenas direcciónPoblación del cliente.
postalCodeintegerOblig. si concatenas direcciónCódigo postal del cliente.
startintegerRecomendadoInicio de la ventana horaria en segundos.
endintegerRecomendadoFin de la ventana horaria en segundos.
phoneNumberstringRecomendadoTeléfono de contacto.
emailstringRecomendadoEmail de contacto.
demandinteger/floatRecomendadoCarga por peso.
volumetricinteger/floatRecomendadoCarga por volumen.
deliveryNotesstringRecomendadoObservaciones de entrega.
orderNumberstringRecomendadoNúmero de pedido.
particularintegerOpcional1 no se guarda en BBDD / 0 cliente normal.
deliveryIdentifierstringOpcionalVinculación con albaranes.
roadTypestringOpcionalTipo de vía.

Excel · Envío de albaranes

Plantilla para envío puntual de albaranes con sus líneas de producto.

Si usas CSV debe ir separado por ; y codificado en UTF-8.

CampoTipoEstadoDescripción
idstringObligatorioIdentificador del cliente.
deliveryNoteCodestringObligatorioNúmero/código de albarán.
codestringObligatorioIdentificador de producto.
namestringObligatorioNombre de producto.
quantityfloatObligatorioCantidad del producto.
pricefloatObligatorioPrecio por medida.
taxPercentintegerObligatorioIVA del producto.
measurestringObligatorioFormato/medida del producto.
deliveryNotesObservationstringOpcionalObservaciones del producto.
promptPayDiscountPercentfloatOpcionalDescuento por pronto pago.
discountPercentfloatOpcionalDescuento en porcentaje.
grossMassfloatOpcionalPeso bruto.
netMassfloatOpcionalPeso neto.
ObservationstringOpcionalObservaciones del albarán.
lotCodestringOpcionalLote del producto.
equivalencePercentfloatOpcionalRecargo de equivalencia.
deliveryIdentifierstringOpcionalVinculación con rutas.

Excel · Carga de productos

Plantilla para alta/actualización del catálogo de productos en Polpoo. Las columnas se importan tal cual están escritas en la cabecera.

CampoTipoEstadoDescripción
codestringObligatorioCódigo del producto. Polpoo admite espacios al inicio/final (ej. "27102011 "); se almacena tal cual viene en el Excel.
namestringObligatorioNombre del producto.
measurestringObligatorioUnidad de medida (Litros, Kg, UNITS, etc.).
pricenumberObligatorioPrecio unitario por measure. 0 si el producto no tiene precio fijo.
taxnumberObligatorioIVA aplicado en porcentaje (ej. 21).
weigthnumberRecomendadoPeso unitario por measure. ⚠️ Cabecera con typo intencional (weigth en lugar de weight) — debe escribirse exactamente así.

Checklist de Producción

  1. Validar token técnico y permisos del usuario de integración.
  2. Probar envío de rutas (API o SFTP) con casos de ventana horaria y multiviaje.
  3. Probar envío de albaranes con productos, con modificaciones y con firma.
  4. Probar envío de facturas y consulta/devolución de cobros.
  5. Probar tracking en tiempo real (event 10, 11, 1, 2).
  6. Probar devolución de rutas a ERP (orden, chofer, ETA).
  7. Probar envases y devoluciones si aplica logística retornable.
  8. Activar alertas de errores, reintentos y trazabilidad de IDs externos.