# Estafeta

# 1. Cotizar envío

POST /api/shipping/price

Devuelve un array con los servicios disponibles.

REQUEST

# provider_data
  • provider Estafeta. Campo obligatorio.

  • API_KEY: (Tipo de dato: string). Api key provista por Estafeta. Campo obligatorio.

  • API_SECRET: (Tipo de dato: string). Api secret provista por Estafeta. Campo obligatorio.

# shippment_data
  • idusuario: (Tipo de dato: integer). Id del usuario con el que se realizará la consulta a la base de datos, Proporcionado por Estafeta. Campo obligatorio.

  • usuario: (Tipo de dato: string). Usuario con el que se realizará la consulta a la base de datos. Proporcionado por Estafeta. Campo obligatorio.

  • contra: (Tipo de dato: string). Contraseña con la que que se realizará la consulta a la base de datos. Proporcionado por Estafeta. Campo obligatorio.

  • esFrecuencia: (Tipo de dato: boolean). Indica si los resultados de salida son solo frecuencia o frecuencia y cotización. esFrecuencia=true, devolverá solo frecuencia de servicios. esfrecuencia=false, devolverá frecuencia y cotización. Campo obligatorio. Campo obligatorio.

  • esLista: (Tipo de dato: boolean). Indica si el parámetro de códigos postales origen y destino son un rango o una lista. esLista=true, indica que el parámetro de códigos postales de origen o destino puede ser uno o varios. EsLista= false, indica que el parámetro de códigos postales origen y destino al menos uno de ellos es un rango. Campo obligatorio.

  • tipoEnvio.Alto: (Tipo de dato: integer). Alto en cm. Campo obligatorio.

  • tipoEnvio.Ancho: (Tipo de dato: integer). Ancho en cm. Campo obligatorio.

  • tipoEnvio.Largo: (Tipo de dato: integer). Largo en cm. Campo obligatorio.

  • tipoEnvio.Peso: (Tipo de dato: float). Peso en kg. Campo obligatorio.

  • datosOrigen.string: (Tipo de dato: string). Código postal de origen. Campo obligatorio.

  • datosDestino.string: (Tipo de dato: string). Código postal de destino. Campo obligatorio.

{
    "provider_data":{
        "provider": "Estafeta",
        "API_KEY": "l714b88f56f47a49498a78f741ac8e1411",
        "API_SECRET": "597da01f468742488ee823a6e5091bb7"
    },
    "shippment_data": {
        "datosOrigen": {
            "string": "03940"
        },
        "datosDestino":{
           "string": "03940"
        },
        "idusuario": "",
        "usuario": "",
        "contra": "",
        "esFrecuencia": false,
        "esLista": false,
        "tipoEnvio":{
            "Alto": 10,
            "Ancho": 10,
            "Largo": 10,
            "Peso": 10.0
        }
    }
}

RESPONSE

  • CostoReexpedicion: Costo del envío.
  • ModalidadEntrega: Devuelve la modalidad de entrega.
  • DiasEntrega: Devuelve los días de entrega.
{
    response: "Success",
    providerStatus: "Creado",
    CostoReexpedicion: "",
    ModalidadEntrega: "",
    DiasEntrega: ""
}

# 2. Generar envío / etiqueta

POST /api/shipping/create

Permite crear un envío y devuelve también la etiqueta asignada en formato base 64.

REQUEST

# provider_data
  • provider: Estafeta. Campo obligatorio.

  • API_KEY: (Tipo de dato: string). Api key provista por Estafeta. Campo obligatorio.

  • API_SECRET: (Tipo de dato: string). Api secret provista por Estafeta. Campo obligatorio.

# shippment_data
  • identification.suscriberId: (Tipo de dato: string). Identificador único de Grupo Cliente Proporcionado por Estafeta. Campo obligatorio.

  • identification.customerNumber: (Tipo de dato: string). Número de cliente con el cual Estafeta identifica sus clientes. Campo obligatorio.

  • systemInformation.id: (Tipo de dato: string). Identificador del aplicativo que consume EL.

  • systemInformation.name:(Tipo de dato: string). Nombre del aplicativo que consume EL. Campo obligatorio.

  • destinatario.telefonos: (Tipo de dato: string). Campo obligatorio.

  • bultos.kilos: (Tipo de dato: float). Peso del envío con dos decimales (Ejemplo: 10.50) Campo obligatorio.

  • bultos.altoCm: (Tipo de dato: integer). Valor máximo: 190 cms. Campo obligatorio.

  • bultos.largoCm: (Tipo de dato: integer). Valor máximo: 240 cms. Campo obligatorio.

  • bultos.anchoCm: (Tipo de dato: integer). Valor máximo: 120 cms. Campo obligatorio.

  • bultos.cantidad: (Tipo de dato: float). Cantidad de los bienes o mercancías que se trasladan en los distintos medios de transporte. Campo opcional.

  • serviceConfiguration.quantityOfLabels: (Tipo de dato: integer). Cantidad de etiquetas a crear o imprimir. Campo obligatorio.

  • serviceConfiguration.serviceTypeId: (Tipo de dato: string). Identificador del servicio Estafeta. Dicho servicio deberá tener rangos de folios asignados al No. de Cliente.

  • serviceConfiguration.salesOrganization: (Tipo de dato: string). Identificador de la oficina Estafeta a la cual pertenece la cuenta cliente. Campo obligatorio.

  • origen.postal.codigoPostal: (Tipo de dato: string). Campo obligatorio.

  • remitente.nombreCompleto: (Tipo de dato: string). Razón social de la empresa. Campo obligatorio.

  • remitente.telefonos:(Tipo de dato: string). Campo obligatorio.

  • remitente.celular:(Tipo de dato: string). Campo opcional.

  • remitente.email: (Tipo de dato: string). Campo opcional.

  • origen.postal.calle: (Tipo de dato: string). Campo obligatorio.

  • origen.postal.numero: (Tipo de dato: string). Campo obligatorio.

  • origen.postal.localidad: (Tipo de dato: string). Campo obligatorio.

  • origen.postal.region: (Tipo de dato: string). Campo obligatorio.

  • origen.postal.codigoPostal: (Tipo de dato: string). Campo obligatorio.

  • origen.postal.pais: (Tipo de dato: string). Código del país. Para México es "MX". Campo obligatorio.

  • PickUp: (Tipo de dato: boolean). Indica si la entrega será en un PUDO. Campo obligatorio.

  • codigoPickUp: (tipo de dato: string). Indica el PUDO donde se hace la entrega, es obligatorio cuando isDeliveryPUDO es TRUE.

  • destinatario.nombreCompleto: (Tipo de dato: string). Campo obligatorio.

  • destinatario.email: (Tipo de dato: string). Campo opcional.

  • destinatario.telefonos: (Tipo de dato: string). Campo obligatorio.

  • destinatario.celular: (Tipo de dato: string). Campo opcional.

  • destino.postal.calle: (Tipo de dato: string). Campo obligatorio.

  • destino.postal.localidad: (Tipo de dato: string). Campo obligatorio.

  • destino.postal.region: (Tipo de dato: string). Campo obligatorio.

  • destino.postal.codigoPostal: (Tipo de dato: string). Campo obligatorio.

  • destino.postal.pais: (Tipo de dato: string). Código del país. Para México es "MX". Campo obligatorio.

  • destino.postal.numero: (Tipo de dato: string). Campo obligatorio.

  • currency: (Tipo de dato: string). Código de la moneda utilizada(Si en en méxico enviar "MXN"). Campo obligatorio.

NOTA: si el envío es con Carta Porte se deben agregar los siguientes campos al request.

  • documento_envio: (Tipo de dato: string). Identificador de que se envía la información de Carta Porte. En caso afirmativo colocar "carta_porte", sino ""(string vacío). Campo obligatorio si se envía Carta Porte.

  • items: (Tipo de dato: string). Array de productos enviados. Campo obligatorio.

  • item.cantidad: (Tipo de dato: integer). Cantidad de ese item. Campo obligatorio.

  • item.codigo: (Tipo de dato: string). Clave de producto. (Ver: http://pys.sat.gob.mx/PyS/catPyS.aspx). Campo obligatorio.

  • item.tipo_producto: (Tipo de dato: integer). Clave de unidad de medida aplicable a la cantidad de bienes o mercancías. (Ver: http://pys.sat.gob.mx/PyS/catUnidades.aspx). Campo obligatorio

  • item.valorDeclaradoConImpuestos: (Tipo de dato: double). Precio del producto hasta con dos decimales separados por un punto. Campo obligatorio.

  • item.descripcion: (Tipo de dato: integer). Título o descripción del producto. Campo obligatorio.

{"provider_data": 
    {
    "provider": "Estafeta",
    "API_KEY": "l7f3023288161d4b57ad0679b0adffe1e2",
    "API_SECRET": "ec5371f3703b42c688ddff9fb7c2a0e3"
    },
    
    "shippment_data": {
        "identification": {
            "suscriberId": "01",
            "customerNumber": "0000000"
				},
		"systemInformation": {
            "id": "AP01",
            "name": "AP01",
            "version": "1.10.20"
				},
        "serviceConfiguration": {
            "quantityOfLabels": 1,
            "serviceTypeId": "70",
            "salesOrganization": "112",
            "originZipCodeForRouting": "1407",
           "isReturnDocument": "false",
            "returnDocument": {
					  "type": "DRID",
					  "serviceId": "60"
					}
		        },
        "origen": {
            "postal": {
                "codigoPostal": "62250",
                "calle": "Domingo Diez",
                "numero": "120",
                "piso": "1",
                "depto": "C",
                "localidad": "El Empleado",
                "region": "Monterrey",
                "pais": "MEX",
                "entreCalle": ""
            }
        },
        "tipoServicio": "",
        "remito": "",
        "documento_envio": "carta_porte"
        "id_externo": "",
        "destino": {
            "sucursal": {
                "id": ""
            },
            "postal": {
                "codigoPostal": "03940",
                "calle": "AV INSURGENTES SUR",
                "numero": "1602",
                "piso": "1",
                "depto": "C",
                "localidad": "Benito Juárez",
                "colonia": "Crédito Constructor",
                "region": "CDMX",
                "pais": "MEX",
                "entreCalle": "Entre estas calles"
            }
        },
        "remitente": { 
            "nombreCompleto": "Alberto Lopez",
            "email": "remitente@andreani.com",
            "documentoTipo": "",
            "documentoNumero": "",
            "telefonos": "1512345678",
            "celular": "123456789012"
        },
        "destinatario": {
            "nombreCompleto": "Juana Gonzalez",
            "email": "destinatario@andreani.com",
            "documentoTipo": "",
            "documentoNumero": "",
            "telefonos": "1512345678",
            "celular": "123456789012"
        },
        "productoAEntregar": "Aire Acondicionado",
        "PickUp": false,
        "codigoPickUp": "567",
        "bultos": {
            "kilos": 2,
            "largoCm": 1,
            "altoCm": 5,
            "anchoCm": 1,
            "volumenCm": "",
            "cantidad": 2.5,
            "valorDeclaradoSinImpuestos": "",
            "valorDeclaradoConImpuestos": "",
            "detalle": "",
            "idCliente": ""
        },
        "items": [{
            "cantidad": 2,
            "codigo": "31181701",
            "tipo_producto": "H87",
            "kilos": "",
            "largoCm": "",
            "altoCm": "",
            "anchoCm":" ",
            "volumenCm": "",
            "valorContraReembolso": "",
            "valorDeclaradoConImpuestos": 400.00,
            "sku": "",
            "descripcion": "Bermuda"
        }, 
        {
            "cantidad": 2,
            "codigo": "31181701",
            "tipo_producto": "H87",
            "kilos": "",
            "largoCm": "",
            "altoCm": "",
            "anchoCm":" ",
            "volumenCm": "",
            "valorContraReembolso": "",
            "valorDeclaradoConImpuestos": 500.00,
            "sku": "",
            "descripcion": "Camisa"
        }]
    }
}

RESPONSE

  • wayBill: Número del envío.
  • etiqueta: Etiqueta en formato Base 64.
{
    "response": "Success",
    "providerStatus": "Creado",
    "numeroDeEnvio": {
        "wayBill": "1100000000112700193862",
        "trackingCode": "1322174421"
    },
    "numeroDeWaybill": "1100000000112700193862",
    "hash": null,
    "sucursalDeDistribucion": {
        "id": "",
        "descripcion": ""
    },
    "sucursalDeRendicion": null,
    "sucursalDeImposicion": null,
    "numeroDePermisionaria": null,
    "descripcionServicio": {"carta_porte_status": "success"},
    "etiqueta": "JVBERi0xLjQKJeLjz9MKMyAw..."
}

# 3. Tracking

GET /api/shipping/:id

Este método devuelve el estado del envío.

REQUEST

  • id: Número de envío. Va en el id de la url como ruta parametrizada. Campo obligatorio.

Este campo van en el header:

  • provider: Jipink. Campo obligatorio.

  • apiKey: (Tipo de dato: string). Api key provista por Estafeta. Campo obligatorio.

  • apiSecret: (Tipo de dato: string). Api secret provista por Estafeta. Campo obligatorio.

  • type: Indica si el envío se rastreará por waybill o tracking number. Valores posibles: 0 (para bsucar por número de guía), 1 (para buscar por tracking number). Campo obligatorio.

provider: Estafeta
apiKey: l7b5b451b26ce9447886d6f5b3c280cff7
apiSecret: 7e62be3e4c2f40419d412537629f58e2
type: 1

RESPONSE

  • providerStatus: Estado del envío.

  • numeroDeEnvio: Número del envío.

{
    "response": "Success",
    "providerStatus":  "Entregado en sucursal Estafeta",
    "numeroDeEnvio": "3487694811",
    "sucursalDeDistribucion": {
        "id": null,
        "descripcion": null
    },
    "sucursalDeRendicion": null,
    "sucursalDeImposicion": null,
    "numeroDePermisionaria": null,
    "descripcionServicio": ""
}

# 4. Pickup

POST /api/pickup/create_pickup

Para hacer uso de esta funcionalidad se debe primero generar un envío con "PickUp" en valor true.

REQUEST

# provider_data
  • provider Estafeta. Campo obligatorio.

  • API_KEY: (Tipo de dato: string). Api key provista por Estafeta. Campo obligatorio.

  • API_SECRET: (Tipo de dato: string). Api secret provista por Estafeta. Campo obligatorio.

# shippment_data
  • AccountNumber: (Tipo de dato: string). Número de cliente. Debe ser un número de cliente válido ya registrado en Mi Estafeta. Campo obligatorio.

  • RequesterName: (Tipo de dato: string). Persona que solicita la recolección. Campo obligatorio.

  • RequesterEmail: (Tipo de dato: string). Campo obligatorio.

  • PickupType: (Tipo de dato: string). Tipo de Recolección (MP, LTL). Campo obligatorio.

  • PickupDate: (Tipo de dato: string). Fecha de la recolección, formato YYYY--MM-DD. Campo obligatorio.

  • PickupAddress.ShortName: (Tipo de dato: string). Nombre corto de la dirección de recolección. Campo obligatorio.

  • PickupAddress.Country: (Tipo de dato: string). País de la recolección. Va siempre "México". Campo obligatorio.

  • PickupAddress.PostalCode: (Tipo de dato: string). Código postal. Campo obligatorio.

  • PickupAddress.State: (Tipo de dato: string). Estado o entidad federativa. Campo obligatorio.

  • PickupAddress.City: (Tipo de dato: string). Ciudad o municipio. Campo obligatorio.

  • PickupAddress.Neighborhood: (Tipo de dato: string). Colonia del domicilio de la recolección. Campo obligatorio.

  • PickupAddress.Address1: (Tipo de dato: string). Calle. Campo obligatorio.

  • PickupAddress.ExternalNumber: (Tipo de dato: string). Número de direción. Campo obligatorio.

  • PickupPackageList[0].Quantity: (Tipo de dato: integer). Cantidad de ítems. Campo obligatorio.

  • PickupPackageList[0].Waybills[0].WaybillNumber

  • PickupPackageList[0].Waybills[0].State: (Tipo de dato: string). País de la recolección. Va siempre "México". Campo obligatorio.

  • PickupPackageList[0].Waybills[0].City: (Tipo de dato: string). Ciudad. Campo obligatorio.

  • PickupPackageList[0].Waybills[0].Municipality (Tipo de dato: string). Municipio. Campo obligatorio.

  • PickupPackageList[0].Waybills[0].Neighborhood: (Tipo de dato: string). Colonia. Campo obligatorio.

  • PickupPackageList[0].Waybills[0].Address1: (Tipo de dato: string). Calle y Número de direción. Campo obligatorio.

  • PickupAlert_Primary.Name: (Tipo de dato: string). Nombre de contacto. Campo obligatorio.

  • PickupAlert_Primary.EmailAddress (Tipo de dato: string). Email de contacto. Campo obligatorio.

{"provider_data": 
    {
    "provider": "Estafeta",
    "API_KEY": "l7da1b70f4a5224782b1b1b070232ea5ff",
    "API_SECRET": "9e976e2db5804daa9c8548d50bada5b4"
    },
   "pickup_data":
            {
                "AccountNumber": "8541467",
                "RequesterName": "Enrique",
                "RequesterEmail": "correoEjemploRequested@estafeta.com",
                 "PickupType": "MP",
                 "PickupDate": "2022-09-17",
                "PickupAddress": {
                    "ShortName": "Av De Los Montes Urales",
                    "Country": "Mexico",
                    "PostalCode": "62250",
                    "State": "MORELOS",
                    "City": "JALA",
                    "Neighborhood": "SAN FRANCISCO",
                    "Address1": "La Venta",
                    "ExternalNumber": "29"
                    },
                "PickupPackageList": [
                    {       
                        "PackageType": "PKG",
                        "Length": 1,
                        "Width": 2,
                        "Height": 3,
                        "Weight": 4,
                        "Quantity": "1",
                        "Waybills": [
                        {
                            "WaybillNumber": "6050000000112700126330",
                            "DestinationAddress":{
                                "Country": "Mexico",
                                "PostalCode": "03940",
                                "State": "CDMX",
                                "City": "CDMX",
                                "Municipality": "CDMX",
                                "Neighborhood": "CDMX",
                                "Address1": "AV INSURGENTES SUR1602" 
                            }
                        }
                        ]
                    }],
                "PickupAlert_Primary": {
                "Name": "jorge",
                "EmailAddress": "emailExampleDos@estafeta.com",
                "PhoneNumber": "string"
                     }
                
            }
}

RESPONSE

  • PickupNumber: Número con el que se registró el pedido de recolección.
{
    "response": "Success",
    "providerStatus": "Creado",
    "numeroDeEnvio": {
        "Success": true,
        "PickupNumber": "1000628905",
        "ScheduleDate": "2023-06-29",
        "NumberOfItems": 1,
        "ErrorList": []
    },
    "hash": null,
    "sucursalDeDistribucion": {
        "id": {
            "Success": true,
            "PickupNumber": "1000628905",
            "ScheduleDate": "2023-06-29",
            "NumberOfItems": 1,
            "ErrorList": []
        },
        "descripcion": ""
    }
}

# 5. Obtener sucursales

GET /api/subsidiary

El método permite obtener los distintos tipos de centro de atención al cliente de Estafeta (incluyendo sucursales) para un determinado código postal.

REQUEST

Los datos van en el header.

  • provider Estafeta. Campo obligatorio.

  • apiKey: (Tipo de dato: string). Api key provista por Estafeta. Campo obligatorio.

  • apiSecret: (Tipo de dato: string). Api secret provista por Estafeta. Campo obligatorio.

  • codigoPostal: (Tipo de dato: string). Campo obligatorio.

  • distancia: (Tipo de dato: string).Distancia en Kilometros desde el punto de búsqueda hacia la ubicación. Campo obligatorio.

  • tipoSucursal: (Tipo de dato: string).Tipo de centro de atención. Campo obligatorio. Los valores posibles son:

    • PDV: Sucursal Estafeta
    • PDVC: Concesionario Estafeta
    • ASOCTDA: Tienda de conveniencia
    • ASOCPDC: Punto de Contacto
provider: Estafeta
apiKey: ""
apiSecret: ""
codigoPostal: 02300
distancia: 10

RESPONSE

  • ActivityType: Tipo de actividad del centro de atención. Valores a tener en cuenta:

    • OCURR - Entrega a Ocurre: Entrega del envío al cliente final.
    • RECO - Recolecciones: Cliente puede depositar un envio en sucursal (Proceso de devolución).
  • LocationTypeCode: tipo de centro. Ver "tipoSucursal" en REQUEST.

{
    "Result": {
        "Success": true
    },
    "LocationList": [
        {
            "LocationCode": "1303",
            "EquivalentCode": "525",
            "Shortname": "Sucursal Camarones",
            "OwnerCode": "EME",
            "OwnerName": "Estafeta Mexicana",
            "LocationTypeCode": "PDV",
            "TypeLocationName": "Sucursal Estafeta",
            "SpaceOwnerName": "Estafeta Mexicana",
            "Address": "C Norte 79-A 286 , Col Sector Naval, Azcapotzalco, Ciudad De Mexico, 02080",
            "RoadTypeCode": "C",
            "RoadTypeAbbName": "C",
            "RoadName": "Norte 79-A",
            "BetweenRoadName1": "Calz. Camarones",
            "BetweenRoadName2": "Salónica",
            "ExternalNumber": "286",
            "SettlementTypeAbbName": "Col",
            "SettlementName": "Sector Naval",
            "CountryName": "MEX",
            "TownshipName": "Azcapotzalco",
            "AddressReference": "Fte. a la gasolineria",
            "Latitude": "19.469923",
            "Longitude": "-99.177457",
            "Schedule": {
                "MFWorkSchedule": "10:00 - 19:00",
                "SatWorkSchedule": "10:00 - 14:00"
            },
            "Telephone": "8003782338",
            "IsParking": true,
            "IsHandicapHandling": false,
            "IsCOD": true,
            "DistanceFromSearchPoint": "1.96880676141989",
            "IsActive": true,
            "AddressDetail": {
                "Address1": "C Norte 79-A 286",
                "Neighborhood": "Col Sector Naval",
                "City": "Azcapotzalco",
                "State": "Ciudad De Mexico",
                "ZipCode": "02080"
            },
            "ActivityType": [
                {
                    "Code": "OCURR",
                    "Name": "Entrega a Ocurre"
                },
                {
                    "Code": "RECO",
                    "Name": "Recolecciones"
                },
                {
                    "Code": "VSERV",
                    "Name": "Venta de Servicios"
                }
            ],
            "OperationSchedule": [
                {
                    "Weekday": "Domingo"
                },
                {
                    "Weekday": "Lunes",
                    "StartHourDay": "10:00",
                    "FinishHourDay": "19:00",
                    "StartHourLunchDay": "00:00",
                    "FinishHourLunchDay": "00:00"
                },
                {
                    "Weekday": "Martes",
                    "StartHourDay": "10:00",
                    "FinishHourDay": "19:00",
                    "StartHourLunchDay": "00:00",
                    "FinishHourLunchDay": "00:00"
                },
                {
                    "Weekday": "Miércoles",
                    "StartHourDay": "10:00",
                    "FinishHourDay": "19:00",
                    "StartHourLunchDay": "00:00",
                    "FinishHourLunchDay": "00:00"
                },
                {
                    "Weekday": "Jueves",
                    "StartHourDay": "10:00",
                    "FinishHourDay": "19:00",
                    "StartHourLunchDay": "00:00",
                    "FinishHourLunchDay": "00:00"
                },
                {
                    "Weekday": "Viernes",
                    "StartHourDay": "10:00",
                    "FinishHourDay": "19:00",
                    "StartHourLunchDay": "00:00",
                    "FinishHourLunchDay": "00:00"
                },
                {
                    "Weekday": "Sábado",
                    "StartHourDay": "10:00",
                    "FinishHourDay": "14:00",
                    "StartHourLunchDay": "00:00",
                    "FinishHourLunchDay": "00:00"
                }
            ]
        }
    ]
}