Postman
Postman
  • Documentación

    • Información general
    • Entornos
    • Primeros pasos
    • Listar CFDI's
    • Buscar CFDI
    • Crear CFDI 4.0
    • Crear CFDI Global 4.0
    • Borradores CFDI 4.0
    • Descargar CFDI
    • Cancelar CFDI 4.0
    • Descargar acuse CFDI 4.0
    • Enviar CFDI
    • Consultar estatus de cancelación de un CFDI
    • Grupos de empleados
    • Empleados
    • Nóminas
    • Complementos
    • Retenciones
    • Complementos de retenciones
    • Carta porte v3.1
    • Catálogos
    • Clientes
    • Empresas
    • Migraciones
    • Series
    • Productos
    • Addendas
    • Fundamentos legales del SAT

Addendas

A continuación se explica como agregar una addenda a uno de nuestros CFDI, para crear una addenda son necesarios los siguientes puntos:

  • Tener un CFDI creado previamente
  • Conocer el UID que corresponde al CFDI que se le agregara esta addenda

Importante

Las addendas disponibles pueden tener algunas similitudes, pero varían en cuanto a información o construcción dependiendo de la marca a la que pertenece por lo que recomendamos revisar con cuidado la sección de la addenda en la que estás interesado.

Mabe

Asi podremos crear una addenda de Mabe, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de Mabe seran necesarios los siguientes parametros:

ParámetroTipoRequeridoDetalles
 invoice String Requerido Es el identificador del CFDI al cual se le agregara la addenda
 mabe Arreglo Requerido Contiene la informacion que se añade a la addenda de Mabe
 Factura Arreglo Requerido Es el arreglo que contiene la informacion de la factura
 tipoDocumento String Requerido Asignado a Factura corresponde a el tipo de documento del que se trata
 folio String Opcional Corresponde al folio de la factura
 fecha String Opcional La fecha de creación
 ordenCompra String Opcional Indica el numero de la orden de compra
 referencia1 String Opcional Opcionales se puede añadir una referencia en este campo
 referencia2 String Opcional Opcionales se puede añadir una referencia en este campo
 Moneda Arreglo Opcional Contiene la informacion de la moneda con la que se realizo el CFDI
 tipoMoneda String Opcional Indica el tipo de moneda que se utiliza
 tipoCambio String Opcional Indica el tipo de cambio para la moneda
 importeConLetra String Opcional Campo para especificar con letra el importe
 Proveedor Arreglo Opcional Ccontiene la informacion del proveedor
 codigo String Opcional Indica el codigo con el cual identificar al proveedor
 Entrega Arreglo Opcional Contiene la informacion de donde sera entregado el producto de la factura
 plantaEntrega String Opcional Indica la planta donde se realizara la entrega
 calle String Opcional Indica la calle donde se localiza la planta
 noExterior String Opcional El numero exterior del domicilio de entrega
 noInterior String Opcional El numero interiro del domicilio de entrega
 codigoPostal String Opcional Codigo postal del domicilio de entrega
 Detalles Arreglo Opcional Contiene los campos para dar mas detalles sobre la mercancia
 noLineaArticulo String Opcional Linea a la que pertenece el articulo
 codigoArticulo String Opcional Codigo con el cual se identifica el articulo
 descripcion String Opcional Descripcion de el articulo
 unidad String Opcional Indica la unidad correspondiente a los articulos
 cantidad String Opcional Indica la cantidad de articulos correspondientes a la factura
 precioSinIva String Opcional Indica el precio sin IVA
 importeConIva String Opcional Indica el precio con IVA
 Descuentos Arreglo Opcional Contiene los campos que especifican si contienen algun descuento los articulos
 tipo String Opcional Indica de que tipo de descuento se trata
 descripcion String Opcional Espacio para incluir una descripcion del descuento
 importe String Opcional Indica el importe del descuento
 Subtotal Arreglo Opcional Contiene los campos del subtotal
 importe String Opcional Indica el subtotal de los articulos
 Traslados Arreglo Opcional Contiene la informacion del costo del traslado
 tipo String Opcional Indica el tipo de impuesto que incluye el traslado
 tasa String Opcional La tasa con la cual se evalua el porcentaje de impuesto al traslado
 importe String Opcional El importe del traslado
 Retenciones Arreglo Opcional Contiene los campos de las retenciones que se aplican a los articulos
 tipo String Opcional Indica el tipo de impuesto que incluye la retencion
 tasa String Opcional La tasa con la cual se evalua el porcentaje de impuesto de la retencion
 importe String Opcional El importe de la retencion
 Total Arreglo Opcional Contiene los campos del total de los cargos
 importe String Opcional Indica el total de los cargos de nuestra addenda

Construcción de la URL

Importante

Importante el metodo para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/mabe/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/mabe/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Mabe
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/mabe/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "6206cc43d36fe",
    "mabe": {
        "Factura":{
            "tipoDocumento":"FACTURA",
            "folio":"D3912",
            "fecha":"2020-07-02",
            "ordenCompra":"9500000700",
            "referencia1":"D3932",
            "referencia2":"NA"
       },
       "Moneda":{
        "tipoMoneda":"MXN",
        "tipoCambio":"0.00",
        "importeConLetra":"UN PESO 16/100 M.N."
       },
       "Proveedor":{
            "codigo":"4000000"
       },
       "Entrega":{
            "plantaEntrega":"A090",
            "calle":"INDUSTRIAS",
            "noExterior":"3835",
            "noInterior":"NA",
            "codigoPostal":"78395"
       },
       "Detalles":[
        {
            "noLineaArticulo":"1",
            "codigoArticulo":"NA",
            "descripcion":"SER DE PRUEBA PROV INDIRECTO",
            "unidad":"UN",
            "cantidad":"1",
            "precioSinIva":"1.00",
            "precioConIva":"2.00",
            "importeSinIva":"1.16",
            "importeConIva":"1.00"
        }
       ],
       "Descuentos":{
            "tipo":"CARGO",
            "descripcion":"NA",
            "importe":"0.00"
       },
       "Subtotal":{
            "importe":"1.00"
       },
       "Traslados":[
        {
            "tipo":"IVA",
            "tasa":"0.16",
            "importe":"0.16"
        }
       ],
       "Retenciones":[
        {
            "tipo":"IVA",
            "tasa":"0.16",
            "importe":"0.16"
        }
       ],
       "Total":{
            "importe":"1.16"
       }
    }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/mabe/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "6206cc43d36fe",
    "mabe": {
      "Factura": {
        "tipoDocumento": "FACTURA",
        "folio": "D3912",
        "fecha": "2020-07-02",
        "ordenCompra": "9500000700",
        "referencia1": "D3932",
        "referencia2": "NA"
      },
      "Moneda": {
        "tipoMoneda": "MXN",
        "tipoCambio": "0.00",
        "importeConLetra": "UN PESO 16/100 M.N."
      },
      "Proveedor": {
        "codigo": "4000000"
      },
      "Entrega": {
        "plantaEntrega": "A090",
        "calle": "INDUSTRIAS",
        "noExterior": "3835",
        "noInterior": "NA",
        "codigoPostal": "78395"
      },
      "Detalles": [
        {
          "noLineaArticulo": "1",
          "codigoArticulo": "NA",
          "descripcion": "SER DE PRUEBA PROV INDIRECTO",
          "unidad": "UN",
          "cantidad": "1",
          "precioSinIva": "1.00",
          "precioConIva": "2.00",
          "importeSinIva": "1.16",
          "importeConIva": "1.00"
        }
      ],
      "Descuentos": {
        "tipo": "CARGO",
        "descripcion": "NA",
        "importe": "0.00"
      },
      "Subtotal": {
        "importe": "1.00"
      },
      "Traslados": [
        {
          "tipo": "IVA",
          "tasa": "0.16",
          "importe": "0.16"
        }
      ],
      "Retenciones": [
        {
          "tipo": "IVA",
          "tasa": "0.16",
          "importe": "0.16"
        }
      ],
      "Total": {
        "importe": "1.16"
      }
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/mabe/store"

payload = json.dumps({
  "invoice": "6206cc43d36fe",
  "mabe": {
    "Factura": {
      "tipoDocumento": "FACTURA",
      "folio": "D3912",
      "fecha": "2020-07-02",
      "ordenCompra": "9500000700",
      "referencia1": "D3932",
      "referencia2": "NA"
    },
    "Moneda": {
      "tipoMoneda": "MXN",
      "tipoCambio": "0.00",
      "importeConLetra": "UN PESO 16/100 M.N."
    },
    "Proveedor": {
      "codigo": "4000000"
    },
    "Entrega": {
      "plantaEntrega": "A090",
      "calle": "INDUSTRIAS",
      "noExterior": "3835",
      "noInterior": "NA",
      "codigoPostal": "78395"
    },
    "Detalles": [
      {
        "noLineaArticulo": "1",
        "codigoArticulo": "NA",
        "descripcion": "SER DE PRUEBA PROV INDIRECTO",
        "unidad": "UN",
        "cantidad": "1",
        "precioSinIva": "1.00",
        "precioConIva": "2.00",
        "importeSinIva": "1.16",
        "importeConIva": "1.00"
      }
    ],
    "Descuentos": {
      "tipo": "CARGO",
      "descripcion": "NA",
      "importe": "0.00"
    },
    "Subtotal": {
      "importe": "1.00"
    },
    "Traslados": [
      {
        "tipo": "IVA",
        "tasa": "0.16",
        "importe": "0.16"
      }
    ],
    "Retenciones": [
      {
        "tipo": "IVA",
        "tasa": "0.16",
        "importe": "0.16"
      }
    ],
    "Total": {
      "importe": "1.16"
    }
  }
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/mabe/store")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "6206cc43d36fe",
  "mabe": {
    "Factura": {
      "tipoDocumento": "FACTURA",
      "folio": "D3912",
      "fecha": "2020-07-02",
      "ordenCompra": "9500000700",
      "referencia1": "D3932",
      "referencia2": "NA"
    },
    "Moneda": {
      "tipoMoneda": "MXN",
      "tipoCambio": "0.00",
      "importeConLetra": "UN PESO 16/100 M.N."
    },
    "Proveedor": {
      "codigo": "4000000"
    },
    "Entrega": {
      "plantaEntrega": "A090",
      "calle": "INDUSTRIAS",
      "noExterior": "3835",
      "noInterior": "NA",
      "codigoPostal": "78395"
    },
    "Detalles": [
      {
        "noLineaArticulo": "1",
        "codigoArticulo": "NA",
        "descripcion": "SER DE PRUEBA PROV INDIRECTO",
        "unidad": "UN",
        "cantidad": "1",
        "precioSinIva": "1.00",
        "precioConIva": "2.00",
        "importeSinIva": "1.16",
        "importeConIva": "1.00"
      }
    ],
    "Descuentos": {
      "tipo": "CARGO",
      "descripcion": "NA",
      "importe": "0.00"
    },
    "Subtotal": {
      "importe": "1.00"
    },
    "Traslados": [
      {
        "tipo": "IVA",
        "tasa": "0.16",
        "importe": "0.16"
      }
    ],
    "Retenciones": [
      {
        "tipo": "IVA",
        "tasa": "0.16",
        "importe": "0.16"
      }
    ],
    "Total": {
      "importe": "1.16"
    }
  }
})

response = http.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

Kuehne + Nagel

Asi podremos crear una addenda de Kuehne + Nagel, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de Kuehne + Nagel seran necesarios los siguientes parametros:

ParámetroTipoRequeridoDetalles
 invoice String Requerido Es el identificador del CFDI al cual se le agregara la addenda
 PurchaseOrder String Opcional Indica el numero o nombre de la orden de los productos
 FileNumber String Opcional Indica el numero identificador de la addenda
 BranchCentre String Opcional Indica el nombre de o identificador de la sucursal
 TransportRef String Opcional Indica el identificador del transporte para la mercancia

Construcción de la URL

Importante

Importante el metodo para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/kv/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/kv/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Kuehne + Nagel
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/kv/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice":"620ad7851a684",
    "PurchaseOrder":"XRS1230KL",
    "FileNumber":"A700",
    "BranchCentre":"PR0333",
    "TransportRef":"09367CDCA"
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/kv/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "620ad7851a684",
    "PurchaseOrder": "XRS1230KL",
    "FileNumber": "A700",
    "BranchCentre": "PR0333",
    "TransportRef": "09367CDCA"
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/kv/store"

payload = json.dumps({
  "invoice": "620ad7851a684",
  "PurchaseOrder": "XRS1230KL",
  "FileNumber": "A700",
  "BranchCentre": "PR0333",
  "TransportRef": "09367CDCA"
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/kv/store")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "620ad7851a684",
  "PurchaseOrder": "XRS1230KL",
  "FileNumber": "A700",
  "BranchCentre": "PR0333",
  "TransportRef": "09367CDCA"
})

response = http.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

Soriana

Asi podremos crear una addenda de Soriana, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de Soriana seran necesarios los siguientes parametros:

ParámetroTipoRequeridoDetalles
 invoice String Requerido Es el identificador del CFDI al cual se le agregara la addenda
 Remision Arreglo Opcional Contiene los datos de Remision del pedido
 Proveedor String Opcional El proveedor de la mercancia
 Remision String Opcional Identificador para la remision
 Consecutivo String Opcional Indica el folio para la remision
 FechaRemision String Opcional Indica la fecha de remision
 Tienda String Opcional Indica la tienda de remision
 TipoMoneda String Opcional El tipo de moneda con el que se llevo la transacción
 TipoBulto String Opcional La forma en la que viene empaquetada la mercancia
 EntregaMercancia String Opcional Indica detalles sobre la entrega de la mercancia
 CumpleReqFiscales String Opcional Indica si cumple con los requerimentos fiscales
 CantidadBultos String Opcional Indica el numero de bultos
 Subtotal String Opcional El subtotal de la mercancia
 Descuentos String Opcional Indica si aplica algun descuento
 IEPS String Opcional Indica el porcentaje de IEPS que aplica
 IVA String Opcional Indica el porcentaje de IVA que aplica
 OtrosImpuestos String Opcional Indica si aplical algun impuesto adicional
 Total String Opcional El total de la mercancia
 CantidadPedidos String Opcional Indica el numero de pedidos
 FechaEntregaMercancia String Opcional La fecha en la que se entrega la mercancia
 Cita String Opcional Apartado para el numero de cita para la entrega
 Pedidos Arreglo Opcional Contiene la informacion de los pedidos
 Proveedor String Opcional El nombre del proveedor del pedido
 Remision String Opcional Folio de remisión que corresponde
 FolioPedido String Opcional El folio del pedio
 Tienda String Opcional Indica la tienda de remision del pedido
 CantidadArticulos String Opcional Indica la cantidad de articulos que incluye el pedido
 Articulos Arreglo Opcional Contiene la informaición de los articulos
 Proveedor String Opcional Indica el proveedor de los articulos
 Remision String Opcional Indentificador de la remisión
 FolioPedido String Opcional El folio del pedido
 Tienda String Opcional Indica la tienda de remision del articulo
 Codigo String Opcional El codigo identificador de el articulo
 CantidadUnidadCompra String Opcional Cantidad de compra
 CostoNetoUnidadCompra String Opcional Costo neto de compra
 PorcentajeIEPS String Opcional Porcentaje de IEPS que aplica
 PorcentajeIVA String Opcional Porcentaje de IVA que aplica

Construcción de la URL

Importante

El metodo para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/soriana/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/soriana/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Soriana
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/soriana/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "620c0b4af0799",
    "Remision": {
        "Proveedor": "HH&H",
        "Remision": "",
        "Consecutivo": "",
        "FechaRemision": "",
        "Tienda": "",
        "TipoMoneda": "",
        "TipoBulto": "",
        "EntregaMercancia": "",
        "CumpleReqFiscales": "",
        "CantidadBultos": "",
        "Subtotal": "",
        "Descuentos": "",
        "IEPS": "",
        "IVA": "",
        "OtrosImpuestos": "",
        "Total": "",
        "CantidadPedidos": "",
        "FechaEntregaMercancia": "",
        "Cita": ""
    },
    "Pedidos": [
        {
            "Proveedor": "",
            "Remision": "",
            "FolioPedido": "",
            "Tienda": "",
            "CantidadArticulos": ""
        }
    ],
    "Articulos": [
        {
            "Proveedor": "",
            "Remision": "",
            "FolioPedido": "",
            "Tienda": "",
            "Codigo": "",
            "CantidadUnidadCompra": "",
            "CostoNetoUnidadCompra": "",
            "PorcentajeIEPS": "",
            "PorcentajeIVA": ""
        }
    ]
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/soriana/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "620c0b4af0799",
    "Remision": {
      "Proveedor": "HH&H",
      "Remision": "",
      "Consecutivo": "",
      "FechaRemision": "",
      "Tienda": "",
      "TipoMoneda": "",
      "TipoBulto": "",
      "EntregaMercancia": "",
      "CumpleReqFiscales": "",
      "CantidadBultos": "",
      "Subtotal": "",
      "Descuentos": "",
      "IEPS": "",
      "IVA": "",
      "OtrosImpuestos": "",
      "Total": "",
      "CantidadPedidos": "",
      "FechaEntregaMercancia": "",
      "Cita": ""
    },
    "Pedidos": [
      {
        "Proveedor": "",
        "Remision": "",
        "FolioPedido": "",
        "Tienda": "",
        "CantidadArticulos": ""
      }
    ],
    "Articulos": [
      {
        "Proveedor": "",
        "Remision": "",
        "FolioPedido": "",
        "Tienda": "",
        "Codigo": "",
        "CantidadUnidadCompra": "",
        "CostoNetoUnidadCompra": "",
        "PorcentajeIEPS": "",
        "PorcentajeIVA": ""
      }
    ]
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/soriana/store"

payload = json.dumps({
  "invoice": "620c0b4af0799",
  "Remision": {
    "Proveedor": "HH&H",
    "Remision": "",
    "Consecutivo": "",
    "FechaRemision": "",
    "Tienda": "",
    "TipoMoneda": "",
    "TipoBulto": "",
    "EntregaMercancia": "",
    "CumpleReqFiscales": "",
    "CantidadBultos": "",
    "Subtotal": "",
    "Descuentos": "",
    "IEPS": "",
    "IVA": "",
    "OtrosImpuestos": "",
    "Total": "",
    "CantidadPedidos": "",
    "FechaEntregaMercancia": "",
    "Cita": ""
  },
  "Pedidos": [
    {
      "Proveedor": "",
      "Remision": "",
      "FolioPedido": "",
      "Tienda": "",
      "CantidadArticulos": ""
    }
  ],
  "Articulos": [
    {
      "Proveedor": "",
      "Remision": "",
      "FolioPedido": "",
      "Tienda": "",
      "Codigo": "",
      "CantidadUnidadCompra": "",
      "CostoNetoUnidadCompra": "",
      "PorcentajeIEPS": "",
      "PorcentajeIVA": ""
    }
  ]
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/soriana/store")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "620c0b4af0799",
  "Remision": {
    "Proveedor": "HH&H",
    "Remision": "",
    "Consecutivo": "",
    "FechaRemision": "",
    "Tienda": "",
    "TipoMoneda": "",
    "TipoBulto": "",
    "EntregaMercancia": "",
    "CumpleReqFiscales": "",
    "CantidadBultos": "",
    "Subtotal": "",
    "Descuentos": "",
    "IEPS": "",
    "IVA": "",
    "OtrosImpuestos": "",
    "Total": "",
    "CantidadPedidos": "",
    "FechaEntregaMercancia": "",
    "Cita": ""
  },
  "Pedidos": [
    {
      "Proveedor": "",
      "Remision": "",
      "FolioPedido": "",
      "Tienda": "",
      "CantidadArticulos": ""
    }
  ],
  "Articulos": [
    {
      "Proveedor": "",
      "Remision": "",
      "FolioPedido": "",
      "Tienda": "",
      "Codigo": "",
      "CantidadUnidadCompra": "",
      "CostoNetoUnidadCompra": "",
      "PorcentajeIEPS": "",
      "PorcentajeIVA": ""
    }
  ]
})

response = http.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

Soriana simplificada

Asi podremos crear una addenda de Soriana simplificada, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de Soriana simplificada seran necesarios los siguientes parametros:

ParámetroTipoRequeridoDetalles
invoiceStringRequeridoEs el identificador del CFDI al cual se le agregara la addenda
ProveedorStringOpcionalIndentificador del proveedor de la mercancia
FolioPedidoStringOpcionalIndica el folio correspondiente a el pedido al que se genera el CFDI

Construcción de la URL

Importante

El método para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/sorianasimp/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/sorianasimp/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Soriana simplificada
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/sorianasimp/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "620c0b4af0799",
    "Proveedor": "nombre Proveedor",
    "FolioPedido": "numero de pedido"
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/sorianasimp/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "620c0b4af0799",
    "Proveedor": "nombre Proveedor",
    "FolioPedido": "numero de pedido"
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/sorianasimp/store"

payload = json.dumps({
  "invoice": "620c0b4af0799",
  "Proveedor": "nombre Proveedor",
  "FolioPedido": "numero de pedido"
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/sorianasimp/store")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "620c0b4af0799",
  "Proveedor": "nombre Proveedor",
  "FolioPedido": "numero de pedido"
})

response = http.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

City Fresko

Asi podremos crear una addenda de City Fresko, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de City Fresko seran necesarios los siguientes parametros:

 Parametro Tipo Requerido Detalles
 Invoice String Requerido Es el identificador del CCFDI al cual se le agregara la addenda
 cityFresko Arreglo Requerido Es el arreglo principal de la addenda y contiene toda la informacion relacionada a esta
 requestForPayment Arreglo Requerido Es el arreglo que contiene la informacion del tipo de documento
 documentStatus String Requerido

 Indica el tipo de documento que generamos, puede ser:

ORIGINAL

DELETE

COPY

REEMPLAZA

 DeliveryDate String Requerido

 Se utiliza para indicar la fecha en la que se entrega el documento, utiliza el siguiente formato:

"2023-01-23"

 requestForPaymentIdentification Arreglo Requerido Es el arreglo que contiene la informacion que especcifica el tipo de transaccion
 entityType String Requerido

 Se utiliza para indicar el tipo de documento que se genero

ejemplo:

"INVOICE" para las Facturas

 uniqueCreatorIdentification String Requerido Lo utilizamos para ingresar un identificador para nuestro documento
 specialInstruction Arreglo Requerido Arreglo que contiene la informacion para señalar instrucciones especiales
 code String Requerido

 Pertenece a "specialInstruction" y se utilliza para indicar las condiciones para estas instrucciones, acepta las siguientes opciones:

"AAB" - Condiciones de pago

"DUT" - Informacion de impuestos (Pedimentos)

"PUR" - Informacion de compras

"ZZZ" - Importe con letra

 text String Requerido Pertenece a "specialInstruction" y se utiliza para ingresar la descripcion relacionada al codigo que creamos anteriormente
 orderIdentification Arreglo Requerido Es el arreglo que contiene la informacion que especifica
 referenceIdentification String Requerido Indica el numero de oden de compra(comprador) a la que hace referencia la factura
 ReferenceDate String Opcional

 Indica la feca de la orden de compra(comprador) a la que hace referencia la factura, utiliza el siguiente formato:

"2023-01-13"

 AdditionalInformation Arreglo Requerido Arreglo que contiene las referencias adicionales a nivel global de la factura
 referenceIdentification String Requerido Indica el numero de referencia global
 type String Requerido

 Es el tipo al que corresponde la referencia adicional de acuerdo al tipo de documento

 buyer Arreglo Requerido Es el arreglo que contiene la informacion correspondiente a el comprado
 gln String Requerido Dentro de buyer especifica el numero global de localizacion (GLN) del comprador
 text String Requerido Dentro de buyer especifica el nombre del contacto de compras
 seller Arreglo Requerido Es el arreglo que contiene la informacion correspondiente a el proveedor
 gln String Requerido Dentro de seller especifica el numero global de localizacion (GLN) del proveedor
 alternatePartyIdentification String Requerido Dentro de seller especifica el ccodigo para identificar que tipo de dentificacion secundaria se le asigno al proveedor
 type String Requerido Dentro de seller especifica el tipo a el que pertenece el proveedor
 shipTo Arreglo Requerido Es el arreglo que contiene la ubicacion donde debe realizarse la entrega de la mercancia
 gln String Requerido Dentro de shipTo especifica el numero global de localizacion (GLN) de la ubicacion a entregar la mercancia
 address Arreglo Opcional Dentro de shipTo es el arreglo que cotiene la informacion con el nombre y direccion de la ubicacion donde debe realizarse la entrega
 name String Opcional Dentro de address especifica la razon social de la empresa donde se va a embarcar en caso de ser diferente al comprado, o el nombre de la bodega o cento de distribucion
 streetAddressOne String Opcional Dentro de address especifica el domicilio a donde se embarcara la mercancia: Calle, numero exterior, numero interior y colonias
 city String Opcional Dentro de address especifiica la ciudad donde se encuentra el ddomicilio a donde se embarcara la mercancia
 postalCode String Opcional Dentro de address especifica el codigo postal del domicilio a donde se embarcara la mercancia
 currency Arreglo Requerido Es el arreglo que contiene la informacion relacionada al tipo de divisa utilizada
 currencyFunction String Requerido

 Dentro de currency especifica el uso de la divisa para el documento, admite los siguienntes valores:

"BILLING_CURRENCY"

"PRICE_CURRENCY"

"PAYMENT_CURRENCY"

 paymentTerms Arreglo Opcional Arreglo que contiene los terminos de pago de la factura
 paymentTermsEvent String Opcional

 Dentro de paymentTerms especifica como se realizara el evento del pago, admite los siguientes valores:

"DATE_OF_INVOICE"

"EFFECTIVE_DATE"

 PaymentTermsRelationTime String Opcional Dentro de paymentTerms especifica la relacion tiempo de los terminos de pago
 netPaymentTermsType String Opcional Dentro de paymentTerms especifica las condiciones de pago
 days String Opcional Dentro de paymentTerms especifica
 allowanceCharge Arreglo Opcional Arreglo que contiene la informacion de los cargos o descuentos globales mercantiles por factura
 settlementType String Opcional

 Dentro de allowanceCharge especifica la imputacion del descuento o cargo, dmite los siguienntes valores:

"BILL_BACK"
"OFF_INVOICE"

 allowanceChargeTypeString Opcional 

 Dentro de allowanceCharge indica el atributo de cargo o descuento, admite los siguientes valores:

"ALLOWANCE_GLOBAL"
"CHARGE_GLOBAL"

 specialServicesType String Opcional

 Dentro de allowanceCharge especifica el tipo de descuento o cargo este elemento se utiliza si el comprador conoce los descuentos,admite los siguientes valore:

“AA”, “AJ”, “ADO”, “ADT”, “ADS”, “ABZ”, “DA”, “EAA”, “EAB”, “PI”, “TAE”, “SAB”, “RAA”, “PAD”, “FG”, “FA”, “TD”, “TS”, “TX”, “TZ”, “ZZZ”, “VAB”, “UM”, “DI”, “CAC”, “COD”, “EAB”, “FC”, “FI”, “HD”, “QD”

 monetaryAmountOrPercentage Arreglo Opcional Aarreglo que contiene la informacion de la cantidad monetaria o porcentaje del descuento
 rate String Opcional Dentro de monetaryAmountOrPercentage este elemento especifica la tarifa
 percentage String  Opcional Dentro de monetaryAmountOrPercentage especifica el porcentaje de descuento que se esta aplicando segun se ha indicado en el campo anterior a toda la factura
 lineItems Arreglo Opcional Es el arreglo qu contiene la informacion de la linea de detalle de la factura
 type String Requerido dentro de lineItems especifica el tipo de linea de detalle
 number String Requerido Dentro de lineItems especifica el numero secuencial que se asigna a cada linea de detalle
 tradeItemIdentification String  Requerido Dentro de lineItems especifica la identificacion de cada articulo
 alternateTradeItemIdentification Arreglo Opcional Dentro de lineItems es el arreglo que contiene la informacion del numero de iddentificacion adicional para el articulo
 type String Requerido Dentro de alternateTradeItemIdentification es el atributo que especifica el tipo de identiificacion adicional
 value String Requerido Dentro de alternateTradeItemIdentification contiene el valor del indentificador adicional
 tradeItemDescriptionInformation Arreglo Opcional Dentro de lineItems es el arreglo que contiene la informacion de la descripcion del articulo
 language String Requerido

 Dentro de tradeItemDescriptionInformation es el atributo para especificar el ccodigo del idioma en que esta la descripcion del articulo, admite los siguientes valores

"ES"

"EN"

 longtext String Requerido Dentro de tradeItemDescriptionInformation es el atributo que especifica la descripcion del articulo solicitado
 invoicedQuantity String Requerido Dentro de lineItems especifica la cantidad facturada del producto en la linea de articulo actual
 unitOfMeasure String Requerido Dentro de lineItems especifica la unidad de medida, solo si el articulo es de unidad variable
 aditionalQuantity String Requerido Dentro de lineItems especifica la ccantiddad facturada del producto en la lina de articulo actual
 grossPrice String Requerido Dentro de lineItems especifica la declaracion del precio bruto
 netPrice String Requerido Dentro de lineItems especifica la declaracion del precio neto
 AdditionalInformation Arreglo Opcional Dentro de lineItems es el arreglo que contiene la informacion adicional de referencia en el detalle de productos
 referencceIdentification String Requerido Dentro de AdditionalInformation especifica la referencia adicional de los productos
 type String Requerido Dentro de AdditionalInformation especifica el tipo de referencia
 tradeItemTaxInformation Arreglo Opcional Dentro de lineItems es el arreglo que contiene la informacion de los impuestos por cadda linea de articulo
 taxTypeDescription String Requerio Dentro de tradeItemTaxInformation especifica el tipo dde arancel, impuesto o cutoa
 tradeItemTaxAmount Arreglo Opcional Dentro de tradeItemTaxInformation es el arreglo que contiene la informacion del importe o porcentaje del descuento
 taxPercentage String Requerido Dentro de tradeItemTaxAmount especifica el porcentaje del impuesto
 taxAmount String Requerido Dentro de tradeItemTaxAmount especifica el monto del impuesto
 totalLineAmount Arreglo Requerido Dentro de lineItems es el arreglo que contiene la informacion de los importes monetarios por linea de articulo
 grossAmount String Opccional Dentro de totalLineAmount especifica el importe bruto
 netAmount String Requerido Dentro de totalLineAmount specifica el importe neto
 totalAmount String Opcional Especifica el monto total de las lineas de articulos
 baseAmount String Requerido  Especifica el monto
 tax Arreglo Requerido Es el arreglo que contiene la informacion de de los impuestos aplicados a el documento
 type String Requerido Dentro de tax especifica el tipo de impuesto aplicado a el documento
 taxPercentage String Requerido Dentro de tax especifica el porcentaje del impuesto que se selecciono en el campo anterior
 taxAmount String Requerido Dentro de tax especifica el importe del impuesto basado en el porcentaje anterior
 taxCategory String  Requerido Dentro de tax especifica la categoria a la que pertenece el impuesto declarado
 payableAmount String Requerido Especifica el total pagable de la factura

Construcción de la URL

Importante

El método para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/cityfresko/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/cityfresko/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de City Fresko
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/cityfresko/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "bef24401-05e6-4ccb-b3aa-4a0343f1c0a6",
    "cityFresko":{
       "requestForPayment": {
           "documentStatus": "ORIGINAL",
           "DeliveryDate": "2023-01-13"
       },
       "requestForPaymentIdentification": {
           "entityType": "INVOICE",
           "uniqueCreatorIdentification": "UNIQUEIDAAPI123"
       },
       "specialInstruction": [
           {
             "code": "AAB",
             "text": "PAGO A 5 DIAS"
           },
           {
             "code": "PUR",
             "text": "CLIENNTE FRECUENTE"
           },
           {
             "code": "DUT",
             "text": "IMPUESTOS RELACIONADOS"
           },
           {
             "code": "ZZZ",
             "text": "QUINIENTOS CINCUENTA Y CINCO"
           }
       ],
       "orderIdentification": {
           "referenceIdentification": "CUSTOMORDER API 12345",
           "ReferenceDate": "2023-01-13"
       },
       "AdditionalInformation": [
           {
               "referenceIdentification": "REFERENCIA NUMERO DDE FACTURA123",
               "type": "IV"
           },
           {
               "referenceIdentification": "REFERENCIA NUMERO DOC123",
               "type": "ACE"
           },
           {
               "referenceIdentification": "REFERENCIA CHEQUE123",
               "type": "CK"
           },
           {
               "referenceIdentification": "REFERENCIA PREDIAL123",
               "type": "AAE"
           }
       ],
       "buyer": {
           "gln": "BUYERGLN123456",
           "text": "LUIS QUINTERO"
       },
       "seller": {
           "gln": "SELLERGLN123456",
           "alternatePartyIdentification": "ALTPARTYIDD123",
           "type": "IEPS_REFERENCE"
       },
       "shipTo": {
           "gln": "GLNSHIPMENT1234",
           "address": {
               "name": "LUIS QUINTERO CO.",
               "streetAddressOne": "CALLE CORAL AZUL",
               "city": "GUADALAJARA",
               "postalCode": "44790"
           }
        },
        "currency": {
            "currencyFunction": "PRICE_CURRENCY"
        },
        "paymentTerms": {
            "paymentTermsEvent": "EFECTIVE_DATE",
            "PaymentTermsRelationTime": "REFERENCE_BEFORE",
            "netPaymentTermsType":"END_OF_MONTH",
            "days": "2"
        },
        "allowanceCharge": {
            "settlementType": "OFF_INVOICE",
            "allowanceChargeType": "ALLOWANCE_GLOBAL",
            "specialServicesType": "ZZZ",
            "monetaryAmountOrPercentage": {
                "rate": "INVOICE_VALUE",
                "percentage": "2345.67"
            }
        },
        "lineItems": [
            {
                "type": "SimpleInvoiceLineItemType",
                "number": "0",
                "tradeItemIdentification": "GTINPROD1",
                "alternateTradeItemIdentification": {
                    "type": "SUPPLIER_ASSIGNED",
                    "value": "NUMALTPROD1"
                },
                "tradeItemDescriptionInformation": {
                    "language": "ES",
                    "longText": "DESCRIPCION PRODUCTO 0"
                },
                "invoicedQuantity": "10",
                "unitOfMeasure": "1.0",
                "aditionalQuantity": "10",
                "grossPrice": "",
                "netPrice": "11.00",
                "AdditionalInformation": {
                    "referenceIdentification": "REFPROD1",
                    "type": "ON"
                },
                "tradeItemTaxInformation": {
                    "taxTypeDescription": "GST",
                    "tradeItemTaxAmount": {
                        "taxPercentage": "10.00",
                        "taxAmount": "1.00"
                    }
                },
                "totalLineAmount": {
                    "grossAmount": "100",
                    "netAmount": "110"
                }
            },
            {
                "type": "SimpleInvoiceLineItemType",
                "number": "2",
                "tradeItemIdentification": "GTINPROD1",
                "alternateTradeItemIdentification": {
                    "type": "SUPPLIER_ASSIGNED",
                    "value": "NUMALTPROD1"
                },
                "tradeItemDescriptionInformation": {
                    "language": "ES",
                    "longText": "DESCRIPCION PRODUCTO 1"
                },
                "invoicedQuantity": "10",
                "unitOfMeasure": "1.0",
                "aditionalQuantity": "",
                "grossPrice": "10.00",
                "netPrice": "",
                "AdditionalInformation": {
                    "referenceIdentification": "REFPROD1",
                    "type": "ON"
                },
                "tradeItemTaxInformation": {
                    "taxTypeDescription": "GST",
                    "tradeItemTaxAmount": {
                        "taxPercentage": "10.00",
                        "taxAmount": "1.00"
                    }
                },
                "totalLineAmount": {
                    "grossAmount": "100",
                    "netAmount": "110"
                }
            },
            {
                "type": "SimpleInvoiceLineItemType",
                "number": "3",
                "tradeItemIdentification": "GTINPROD2",
                "alternateTradeItemIdentification": {
                    "type": "BUYER_ASSIGNED",
                    "value": "NUMALTPROD2"
                },
                "tradeItemDescriptionInformation": {
                    "language": "EN",
                    "longText": "DESCRIPCION PRODUCTO 2"
                },
                "invoicedQuantity": "10",
                "unitOfMeasure": "2.0",
                "aditionalQuantity": "10",
                "grossPrice": "",
                "netPrice": "",
                "AdditionalInformation": {
                    "referenceIdentification": "REFPROD2",
                    "type": "ON"
                },
                "tradeItemTaxInformation": {
                    "taxTypeDescription": "VAT",
                    "tradeItemTaxAmount": {
                        "taxPercentage": "16.00",
                        "taxAmount": "3.20"
                    }
                },
                "totalLineAmount": {
                    "grossAmount": "200",
                    "netAmount": "232"
                }
            },
            {
                "type": "SimpleInvoiceLineItemType",
                "number": "4",
                "tradeItemIdentification": "GTINPROD3",
                "alternateTradeItemIdentification": {
                    "type": "123",
                    "value": "123"
                },
                "tradeItemDescriptionInformation": {
                    "language": "ES",
                    "longText": "DESCRIPCION PRODUCTO 3"
                },
                "invoicedQuantity": "10",
                "unitOfMeasure": "3.0",
                "aditionalQuantity": "10",
                "grossPrice": "0.00",
                "netPrice": "30.75",
                "AdditionalInformation": {
                    "referenceIdentification": "REFPROD3",
                    "type": "ON"
                },
                "tradeItemTaxInformation": {
                    "taxTypeDescription": "LAC",
                    "tradeItemTaxAmount": {
                        "taxPercentage": "02.50",
                        "taxAmount": "00.75"
                    }
                },
                "totalLineAmount": {
                    "grossAmount": "300",
                    "netAmount": "307.5"
                }
            },
            {
                "type": "SimpleInvoiceLineItemType",
                "number": "5",
                "tradeItemIdentification": "GTINPROD4",
                "alternateTradeItemIdentification": {
                    "type": "SUPPLIER_ASSIGNED",
                    "value": "NUMALTPROD4"
                },
                "tradeItemDescriptionInformation": {
                    "language": "EN",
                    "longText": "DESCRIPCION PRODUCTO 4"
                },
                "invoicedQuantity": "10",
                "unitOfMeasure": "4.0",
                "aditionalQuantity": "10",
                "grossPrice": "40.00",
                "netPrice": "44.80",
                "AdditionalInformation": {
                    "referenceIdentification": "REFPROD4",
                    "type": "ON"
                },
                "tradeItemTaxInformation": {
                    "taxTypeDescription": "AAA",
                    "tradeItemTaxAmount": {
                        "taxPercentage": "12.00",
                        "taxAmount": "48.00"
                    }
                },
                "totalLineAmount": {
                    "grossAmount": "400",
                    "netAmount": "448"
                }
            }
        ],
        "totalAmount": "1234567.89",
        "baseAmount": "123456.00",
        "tax": [ 
            {
                "type": "GST",
                "taxPercentage": "10",
                "taxAmount": "10",
                "taxCategory": "TRANSFERIDO"
            },
            {
                "type": "VAT",
                "taxPercentage": "16",
                "taxAmount": "32",
                "taxCategory": "TRANSFERIDO"
            },
            {
                "type": "LAC",
                "taxPercentage": "02.50",
                "taxAmount": "07.50",
                "taxCategory": "TRANSFERIDO"
            },
            {
                "type": "AAA",
                "taxPercentage": "12.00",
                "taxAmount": "48.00",
                "taxCategory": "TRANSFERIDO"
            }
        ],
        "payableAmount": "123456789"
   }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/cityfresko/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "bef24401-05e6-4ccb-b3aa-4a0343f1c0a6",
    "cityFresko": {
      "requestForPayment": {
        "documentStatus": "ORIGINAL",
        "DeliveryDate": "2023-01-13"
      },
      "requestForPaymentIdentification": {
        "entityType": "INVOICE",
        "uniqueCreatorIdentification": "UNIQUEIDAAPI123"
      },
      "specialInstruction": [
        {
          "code": "AAB",
          "text": "PAGO A 5 DIAS"
        },
        {
          "code": "PUR",
          "text": "CLIENNTE FRECUENTE"
        },
        {
          "code": "DUT",
          "text": "IMPUESTOS RELACIONADOS"
        },
        {
          "code": "ZZZ",
          "text": "QUINIENTOS CINCUENTA Y CINCO"
        }
      ],
      "orderIdentification": {
        "referenceIdentification": "CUSTOMORDER API 12345",
        "ReferenceDate": "2023-01-13"
      },
      "AdditionalInformation": [
        {
          "referenceIdentification": "REFERENCIA NUMERO DDE FACTURA123",
          "type": "IV"
        },
        {
          "referenceIdentification": "REFERENCIA NUMERO DOC123",
          "type": "ACE"
        },
        {
          "referenceIdentification": "REFERENCIA CHEQUE123",
          "type": "CK"
        },
        {
          "referenceIdentification": "REFERENCIA PREDIAL123",
          "type": "AAE"
        }
      ],
      "buyer": {
        "gln": "BUYERGLN123456",
        "text": "LUIS QUINTERO"
      },
      "seller": {
        "gln": "SELLERGLN123456",
        "alternatePartyIdentification": "ALTPARTYIDD123",
        "type": "IEPS_REFERENCE"
      },
      "shipTo": {
        "gln": "GLNSHIPMENT1234",
        "address": {
          "name": "LUIS QUINTERO CO.",
          "streetAddressOne": "CALLE CORAL AZUL",
          "city": "GUADALAJARA",
          "postalCode": "44790"
        }
      },
      "currency": {
        "currencyFunction": "PRICE_CURRENCY"
      },
      "paymentTerms": {
        "paymentTermsEvent": "EFECTIVE_DATE",
        "PaymentTermsRelationTime": "REFERENCE_BEFORE",
        "netPaymentTermsType": "END_OF_MONTH",
        "days": "2"
      },
      "allowanceCharge": {
        "settlementType": "OFF_INVOICE",
        "allowanceChargeType": "ALLOWANCE_GLOBAL",
        "specialServicesType": "ZZZ",
        "monetaryAmountOrPercentage": {
          "rate": "INVOICE_VALUE",
          "percentage": "2345.67"
        }
      },
      "lineItems": [
        {
          "type": "SimpleInvoiceLineItemType",
          "number": "0",
          "tradeItemIdentification": "GTINPROD1",
          "alternateTradeItemIdentification": {
            "type": "SUPPLIER_ASSIGNED",
            "value": "NUMALTPROD1"
          },
          "tradeItemDescriptionInformation": {
            "language": "ES",
            "longText": "DESCRIPCION PRODUCTO 0"
          },
          "invoicedQuantity": "10",
          "unitOfMeasure": "1.0",
          "aditionalQuantity": "10",
          "grossPrice": "",
          "netPrice": "11.00",
          "AdditionalInformation": {
            "referenceIdentification": "REFPROD1",
            "type": "ON"
          },
          "tradeItemTaxInformation": {
            "taxTypeDescription": "GST",
            "tradeItemTaxAmount": {
              "taxPercentage": "10.00",
              "taxAmount": "1.00"
            }
          },
          "totalLineAmount": {
            "grossAmount": "100",
            "netAmount": "110"
          }
        },
        {
          "type": "SimpleInvoiceLineItemType",
          "number": "2",
          "tradeItemIdentification": "GTINPROD1",
          "alternateTradeItemIdentification": {
            "type": "SUPPLIER_ASSIGNED",
            "value": "NUMALTPROD1"
          },
          "tradeItemDescriptionInformation": {
            "language": "ES",
            "longText": "DESCRIPCION PRODUCTO 1"
          },
          "invoicedQuantity": "10",
          "unitOfMeasure": "1.0",
          "aditionalQuantity": "",
          "grossPrice": "10.00",
          "netPrice": "",
          "AdditionalInformation": {
            "referenceIdentification": "REFPROD1",
            "type": "ON"
          },
          "tradeItemTaxInformation": {
            "taxTypeDescription": "GST",
            "tradeItemTaxAmount": {
              "taxPercentage": "10.00",
              "taxAmount": "1.00"
            }
          },
          "totalLineAmount": {
            "grossAmount": "100",
            "netAmount": "110"
          }
        },
        {
          "type": "SimpleInvoiceLineItemType",
          "number": "3",
          "tradeItemIdentification": "GTINPROD2",
          "alternateTradeItemIdentification": {
            "type": "BUYER_ASSIGNED",
            "value": "NUMALTPROD2"
          },
          "tradeItemDescriptionInformation": {
            "language": "EN",
            "longText": "DESCRIPCION PRODUCTO 2"
          },
          "invoicedQuantity": "10",
          "unitOfMeasure": "2.0",
          "aditionalQuantity": "10",
          "grossPrice": "",
          "netPrice": "",
          "AdditionalInformation": {
            "referenceIdentification": "REFPROD2",
            "type": "ON"
          },
          "tradeItemTaxInformation": {
            "taxTypeDescription": "VAT",
            "tradeItemTaxAmount": {
              "taxPercentage": "16.00",
              "taxAmount": "3.20"
            }
          },
          "totalLineAmount": {
            "grossAmount": "200",
            "netAmount": "232"
          }
        },
        {
          "type": "SimpleInvoiceLineItemType",
          "number": "4",
          "tradeItemIdentification": "GTINPROD3",
          "alternateTradeItemIdentification": {
            "type": "123",
            "value": "123"
          },
          "tradeItemDescriptionInformation": {
            "language": "ES",
            "longText": "DESCRIPCION PRODUCTO 3"
          },
          "invoicedQuantity": "10",
          "unitOfMeasure": "3.0",
          "aditionalQuantity": "10",
          "grossPrice": "0.00",
          "netPrice": "30.75",
          "AdditionalInformation": {
            "referenceIdentification": "REFPROD3",
            "type": "ON"
          },
          "tradeItemTaxInformation": {
            "taxTypeDescription": "LAC",
            "tradeItemTaxAmount": {
              "taxPercentage": "02.50",
              "taxAmount": "00.75"
            }
          },
          "totalLineAmount": {
            "grossAmount": "300",
            "netAmount": "307.5"
          }
        },
        {
          "type": "SimpleInvoiceLineItemType",
          "number": "5",
          "tradeItemIdentification": "GTINPROD4",
          "alternateTradeItemIdentification": {
            "type": "SUPPLIER_ASSIGNED",
            "value": "NUMALTPROD4"
          },
          "tradeItemDescriptionInformation": {
            "language": "EN",
            "longText": "DESCRIPCION PRODUCTO 4"
          },
          "invoicedQuantity": "10",
          "unitOfMeasure": "4.0",
          "aditionalQuantity": "10",
          "grossPrice": "40.00",
          "netPrice": "44.80",
          "AdditionalInformation": {
            "referenceIdentification": "REFPROD4",
            "type": "ON"
          },
          "tradeItemTaxInformation": {
            "taxTypeDescription": "AAA",
            "tradeItemTaxAmount": {
              "taxPercentage": "12.00",
              "taxAmount": "48.00"
            }
          },
          "totalLineAmount": {
            "grossAmount": "400",
            "netAmount": "448"
          }
        }
      ],
      "totalAmount": "1234567.89",
      "baseAmount": "123456.00",
      "tax": [
        {
          "type": "GST",
          "taxPercentage": "10",
          "taxAmount": "10",
          "taxCategory": "TRANSFERIDO"
        },
        {
          "type": "VAT",
          "taxPercentage": "16",
          "taxAmount": "32",
          "taxCategory": "TRANSFERIDO"
        },
        {
          "type": "LAC",
          "taxPercentage": "02.50",
          "taxAmount": "07.50",
          "taxCategory": "TRANSFERIDO"
        },
        {
          "type": "AAA",
          "taxPercentage": "12.00",
          "taxAmount": "48.00",
          "taxCategory": "TRANSFERIDO"
        }
      ],
      "payableAmount": "123456789"
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/cityfresko/store"

payload = json.dumps({
  "invoice": "bef24401-05e6-4ccb-b3aa-4a0343f1c0a6",
  "cityFresko": {
    "requestForPayment": {
      "documentStatus": "ORIGINAL",
      "DeliveryDate": "2023-01-13"
    },
    "requestForPaymentIdentification": {
      "entityType": "INVOICE",
      "uniqueCreatorIdentification": "UNIQUEIDAAPI123"
    },
    "specialInstruction": [
      {
        "code": "AAB",
        "text": "PAGO A 5 DIAS"
      },
      {
        "code": "PUR",
        "text": "CLIENNTE FRECUENTE"
      },
      {
        "code": "DUT",
        "text": "IMPUESTOS RELACIONADOS"
      },
      {
        "code": "ZZZ",
        "text": "QUINIENTOS CINCUENTA Y CINCO"
      }
    ],
    "orderIdentification": {
      "referenceIdentification": "CUSTOMORDER API 12345",
      "ReferenceDate": "2023-01-13"
    },
    "AdditionalInformation": [
      {
        "referenceIdentification": "REFERENCIA NUMERO DDE FACTURA123",
        "type": "IV"
      },
      {
        "referenceIdentification": "REFERENCIA NUMERO DOC123",
        "type": "ACE"
      },
      {
        "referenceIdentification": "REFERENCIA CHEQUE123",
        "type": "CK"
      },
      {
        "referenceIdentification": "REFERENCIA PREDIAL123",
        "type": "AAE"
      }
    ],
    "buyer": {
      "gln": "BUYERGLN123456",
      "text": "LUIS QUINTERO"
    },
    "seller": {
      "gln": "SELLERGLN123456",
      "alternatePartyIdentification": "ALTPARTYIDD123",
      "type": "IEPS_REFERENCE"
    },
    "shipTo": {
      "gln": "GLNSHIPMENT1234",
      "address": {
        "name": "LUIS QUINTERO CO.",
        "streetAddressOne": "CALLE CORAL AZUL",
        "city": "GUADALAJARA",
        "postalCode": "44790"
      }
    },
    "currency": {
      "currencyFunction": "PRICE_CURRENCY"
    },
    "paymentTerms": {
      "paymentTermsEvent": "EFECTIVE_DATE",
      "PaymentTermsRelationTime": "REFERENCE_BEFORE",
      "netPaymentTermsType": "END_OF_MONTH",
      "days": "2"
    },
    "allowanceCharge": {
      "settlementType": "OFF_INVOICE",
      "allowanceChargeType": "ALLOWANCE_GLOBAL",
      "specialServicesType": "ZZZ",
      "monetaryAmountOrPercentage": {
        "rate": "INVOICE_VALUE",
        "percentage": "2345.67"
      }
    },
    "lineItems": [
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "0",
        "tradeItemIdentification": "GTINPROD1",
        "alternateTradeItemIdentification": {
          "type": "SUPPLIER_ASSIGNED",
          "value": "NUMALTPROD1"
        },
        "tradeItemDescriptionInformation": {
          "language": "ES",
          "longText": "DESCRIPCION PRODUCTO 0"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "1.0",
        "aditionalQuantity": "10",
        "grossPrice": "",
        "netPrice": "11.00",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD1",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "GST",
          "tradeItemTaxAmount": {
            "taxPercentage": "10.00",
            "taxAmount": "1.00"
          }
        },
        "totalLineAmount": {
          "grossAmount": "100",
          "netAmount": "110"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "2",
        "tradeItemIdentification": "GTINPROD1",
        "alternateTradeItemIdentification": {
          "type": "SUPPLIER_ASSIGNED",
          "value": "NUMALTPROD1"
        },
        "tradeItemDescriptionInformation": {
          "language": "ES",
          "longText": "DESCRIPCION PRODUCTO 1"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "1.0",
        "aditionalQuantity": "",
        "grossPrice": "10.00",
        "netPrice": "",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD1",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "GST",
          "tradeItemTaxAmount": {
            "taxPercentage": "10.00",
            "taxAmount": "1.00"
          }
        },
        "totalLineAmount": {
          "grossAmount": "100",
          "netAmount": "110"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "3",
        "tradeItemIdentification": "GTINPROD2",
        "alternateTradeItemIdentification": {
          "type": "BUYER_ASSIGNED",
          "value": "NUMALTPROD2"
        },
        "tradeItemDescriptionInformation": {
          "language": "EN",
          "longText": "DESCRIPCION PRODUCTO 2"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "2.0",
        "aditionalQuantity": "10",
        "grossPrice": "",
        "netPrice": "",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD2",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "VAT",
          "tradeItemTaxAmount": {
            "taxPercentage": "16.00",
            "taxAmount": "3.20"
          }
        },
        "totalLineAmount": {
          "grossAmount": "200",
          "netAmount": "232"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "4",
        "tradeItemIdentification": "GTINPROD3",
        "alternateTradeItemIdentification": {
          "type": "123",
          "value": "123"
        },
        "tradeItemDescriptionInformation": {
          "language": "ES",
          "longText": "DESCRIPCION PRODUCTO 3"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "3.0",
        "aditionalQuantity": "10",
        "grossPrice": "0.00",
        "netPrice": "30.75",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD3",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "LAC",
          "tradeItemTaxAmount": {
            "taxPercentage": "02.50",
            "taxAmount": "00.75"
          }
        },
        "totalLineAmount": {
          "grossAmount": "300",
          "netAmount": "307.5"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "5",
        "tradeItemIdentification": "GTINPROD4",
        "alternateTradeItemIdentification": {
          "type": "SUPPLIER_ASSIGNED",
          "value": "NUMALTPROD4"
        },
        "tradeItemDescriptionInformation": {
          "language": "EN",
          "longText": "DESCRIPCION PRODUCTO 4"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "4.0",
        "aditionalQuantity": "10",
        "grossPrice": "40.00",
        "netPrice": "44.80",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD4",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "AAA",
          "tradeItemTaxAmount": {
            "taxPercentage": "12.00",
            "taxAmount": "48.00"
          }
        },
        "totalLineAmount": {
          "grossAmount": "400",
          "netAmount": "448"
        }
      }
    ],
    "totalAmount": "1234567.89",
    "baseAmount": "123456.00",
    "tax": [
      {
        "type": "GST",
        "taxPercentage": "10",
        "taxAmount": "10",
        "taxCategory": "TRANSFERIDO"
      },
      {
        "type": "VAT",
        "taxPercentage": "16",
        "taxAmount": "32",
        "taxCategory": "TRANSFERIDO"
      },
      {
        "type": "LAC",
        "taxPercentage": "02.50",
        "taxAmount": "07.50",
        "taxCategory": "TRANSFERIDO"
      },
      {
        "type": "AAA",
        "taxPercentage": "12.00",
        "taxAmount": "48.00",
        "taxCategory": "TRANSFERIDO"
      }
    ],
    "payableAmount": "123456789"
  }
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/cityfresko/store")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "bef24401-05e6-4ccb-b3aa-4a0343f1c0a6",
  "cityFresko": {
    "requestForPayment": {
      "documentStatus": "ORIGINAL",
      "DeliveryDate": "2023-01-13"
    },
    "requestForPaymentIdentification": {
      "entityType": "INVOICE",
      "uniqueCreatorIdentification": "UNIQUEIDAAPI123"
    },
    "specialInstruction": [
      {
        "code": "AAB",
        "text": "PAGO A 5 DIAS"
      },
      {
        "code": "PUR",
        "text": "CLIENNTE FRECUENTE"
      },
      {
        "code": "DUT",
        "text": "IMPUESTOS RELACIONADOS"
      },
      {
        "code": "ZZZ",
        "text": "QUINIENTOS CINCUENTA Y CINCO"
      }
    ],
    "orderIdentification": {
      "referenceIdentification": "CUSTOMORDER API 12345",
      "ReferenceDate": "2023-01-13"
    },
    "AdditionalInformation": [
      {
        "referenceIdentification": "REFERENCIA NUMERO DDE FACTURA123",
        "type": "IV"
      },
      {
        "referenceIdentification": "REFERENCIA NUMERO DOC123",
        "type": "ACE"
      },
      {
        "referenceIdentification": "REFERENCIA CHEQUE123",
        "type": "CK"
      },
      {
        "referenceIdentification": "REFERENCIA PREDIAL123",
        "type": "AAE"
      }
    ],
    "buyer": {
      "gln": "BUYERGLN123456",
      "text": "LUIS QUINTERO"
    },
    "seller": {
      "gln": "SELLERGLN123456",
      "alternatePartyIdentification": "ALTPARTYIDD123",
      "type": "IEPS_REFERENCE"
    },
    "shipTo": {
      "gln": "GLNSHIPMENT1234",
      "address": {
        "name": "LUIS QUINTERO CO.",
        "streetAddressOne": "CALLE CORAL AZUL",
        "city": "GUADALAJARA",
        "postalCode": "44790"
      }
    },
    "currency": {
      "currencyFunction": "PRICE_CURRENCY"
    },
    "paymentTerms": {
      "paymentTermsEvent": "EFECTIVE_DATE",
      "PaymentTermsRelationTime": "REFERENCE_BEFORE",
      "netPaymentTermsType": "END_OF_MONTH",
      "days": "2"
    },
    "allowanceCharge": {
      "settlementType": "OFF_INVOICE",
      "allowanceChargeType": "ALLOWANCE_GLOBAL",
      "specialServicesType": "ZZZ",
      "monetaryAmountOrPercentage": {
        "rate": "INVOICE_VALUE",
        "percentage": "2345.67"
      }
    },
    "lineItems": [
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "0",
        "tradeItemIdentification": "GTINPROD1",
        "alternateTradeItemIdentification": {
          "type": "SUPPLIER_ASSIGNED",
          "value": "NUMALTPROD1"
        },
        "tradeItemDescriptionInformation": {
          "language": "ES",
          "longText": "DESCRIPCION PRODUCTO 0"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "1.0",
        "aditionalQuantity": "10",
        "grossPrice": "",
        "netPrice": "11.00",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD1",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "GST",
          "tradeItemTaxAmount": {
            "taxPercentage": "10.00",
            "taxAmount": "1.00"
          }
        },
        "totalLineAmount": {
          "grossAmount": "100",
          "netAmount": "110"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "2",
        "tradeItemIdentification": "GTINPROD1",
        "alternateTradeItemIdentification": {
          "type": "SUPPLIER_ASSIGNED",
          "value": "NUMALTPROD1"
        },
        "tradeItemDescriptionInformation": {
          "language": "ES",
          "longText": "DESCRIPCION PRODUCTO 1"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "1.0",
        "aditionalQuantity": "",
        "grossPrice": "10.00",
        "netPrice": "",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD1",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "GST",
          "tradeItemTaxAmount": {
            "taxPercentage": "10.00",
            "taxAmount": "1.00"
          }
        },
        "totalLineAmount": {
          "grossAmount": "100",
          "netAmount": "110"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "3",
        "tradeItemIdentification": "GTINPROD2",
        "alternateTradeItemIdentification": {
          "type": "BUYER_ASSIGNED",
          "value": "NUMALTPROD2"
        },
        "tradeItemDescriptionInformation": {
          "language": "EN",
          "longText": "DESCRIPCION PRODUCTO 2"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "2.0",
        "aditionalQuantity": "10",
        "grossPrice": "",
        "netPrice": "",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD2",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "VAT",
          "tradeItemTaxAmount": {
            "taxPercentage": "16.00",
            "taxAmount": "3.20"
          }
        },
        "totalLineAmount": {
          "grossAmount": "200",
          "netAmount": "232"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "4",
        "tradeItemIdentification": "GTINPROD3",
        "alternateTradeItemIdentification": {
          "type": "123",
          "value": "123"
        },
        "tradeItemDescriptionInformation": {
          "language": "ES",
          "longText": "DESCRIPCION PRODUCTO 3"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "3.0",
        "aditionalQuantity": "10",
        "grossPrice": "0.00",
        "netPrice": "30.75",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD3",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "LAC",
          "tradeItemTaxAmount": {
            "taxPercentage": "02.50",
            "taxAmount": "00.75"
          }
        },
        "totalLineAmount": {
          "grossAmount": "300",
          "netAmount": "307.5"
        }
      },
      {
        "type": "SimpleInvoiceLineItemType",
        "number": "5",
        "tradeItemIdentification": "GTINPROD4",
        "alternateTradeItemIdentification": {
          "type": "SUPPLIER_ASSIGNED",
          "value": "NUMALTPROD4"
        },
        "tradeItemDescriptionInformation": {
          "language": "EN",
          "longText": "DESCRIPCION PRODUCTO 4"
        },
        "invoicedQuantity": "10",
        "unitOfMeasure": "4.0",
        "aditionalQuantity": "10",
        "grossPrice": "40.00",
        "netPrice": "44.80",
        "AdditionalInformation": {
          "referenceIdentification": "REFPROD4",
          "type": "ON"
        },
        "tradeItemTaxInformation": {
          "taxTypeDescription": "AAA",
          "tradeItemTaxAmount": {
            "taxPercentage": "12.00",
            "taxAmount": "48.00"
          }
        },
        "totalLineAmount": {
          "grossAmount": "400",
          "netAmount": "448"
        }
      }
    ],
    "totalAmount": "1234567.89",
    "baseAmount": "123456.00",
    "tax": [
      {
        "type": "GST",
        "taxPercentage": "10",
        "taxAmount": "10",
        "taxCategory": "TRANSFERIDO"
      },
      {
        "type": "VAT",
        "taxPercentage": "16",
        "taxAmount": "32",
        "taxCategory": "TRANSFERIDO"
      },
      {
        "type": "LAC",
        "taxPercentage": "02.50",
        "taxAmount": "07.50",
        "taxCategory": "TRANSFERIDO"
      },
      {
        "type": "AAA",
        "taxPercentage": "12.00",
        "taxAmount": "48.00",
        "taxCategory": "TRANSFERIDO"
      }
    ],
    "payableAmount": "123456789"
  }
})

response = https.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

Costco

Asi podremos crear una addenda de Costco, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de Costco seran necesarios los siguientes parametros:

 Parametro Tipo Requerido Detalles
 invoice String Requerido Es el identificador del CFDI al cual se le agregara la addena
 addendaCostco arreglo Requerido Es el arreglo que contiene los campos correspondientes a la addenda de Costco
 tipo_proveedor String Requerido Indica el tipo de proveedor para nuestra addenda
 no_proveedor String Requerido Es el identificador de el proveedor proporcionado por Costco consta de 5 digitos
 sufijo_proveedor String Requerido Es el sufijo asignado tambien por Costco y consta de 2 digitos
 no_oc String Requerido Es el numero de Orden de Compra
 moneda String Requerido Se utiliza para señalar en que moneda se genera el documento para moneda nacional mexicana  el valor es - "MXP"
 terminos_pago String Opcional Se utiliza para especificar condiciones o terminos para realizar el pago
 correo_aviso String Opcional Indica el correo de contacto cuando es necesario

Construcción de la URL

Importante

El método para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/costco/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/costco/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Costco
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/costco/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "0bbb8073-2392-46d7-9222-ba92990b7a83",
    "addendaCostco":{
        "tipo_proveedor": "E",
        "no_proveedor": "78964",
        "sufijo_proveedor": "55",
        "no_oc": "ORD454545",
        "moneda": "MXP",
        "terminos_pago": "CONTRA ENTREGA",
        "correo_aviso": "[email protected]"
   }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/costco/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "0bbb8073-2392-46d7-9222-ba92990b7a83",
    "addendaCostco": {
      "tipo_proveedor": "E",
      "no_proveedor": "78964",
      "sufijo_proveedor": "55",
      "no_oc": "ORD454545",
      "moneda": "MXP",
      "terminos_pago": "CONTRA ENTREGA",
      "correo_aviso": "[email protected]"
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/costco/store"

payload = json.dumps({
  "invoice": "0bbb8073-2392-46d7-9222-ba92990b7a83",
  "addendaCostco": {
    "tipo_proveedor": "E",
    "no_proveedor": "78964",
    "sufijo_proveedor": "55",
    "no_oc": "ORD454545",
    "moneda": "MXP",
    "terminos_pago": "CONTRA ENTREGA",
    "correo_aviso": "[email protected]"
  }
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/costco/store")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "0bbb8073-2392-46d7-9222-ba92990b7a83",
  "addendaCostco": {
    "tipo_proveedor": "E",
    "no_proveedor": "78964",
    "sufijo_proveedor": "55",
    "no_oc": "ORD454545",
    "moneda": "MXP",
    "terminos_pago": "CONTRA ENTREGA",
    "correo_aviso": "[email protected]"
  }
})

response = https.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

Envases Universales de México (EUM)

Asi podremos crear una addenda para Envases Universales de México, con un ejemplo y la muestra de la respuesta al crearla.

Importante

Es importante tomar en cuenta que la addenda de Envases Universales de México se crea al mismo tiempo que generamos el CFDI por lo que los parametros que se mostraran mas delante deben incluirse en el formato enviado cuando creamos el CFDI.

Esto es un diferenciador importante a tomar en cuenta ya que las otras addendas disponibles se generan en dos pasos los cuales consisten en generar el CFDI y generar una peticion para agregar la addenda a nuestro CFDI previamente creado.

Para crear nuestra addenda de Envases Universales de México seran necesarios los siguientes parametros:

 Parametro Tipo Requerido Detalles
 AddendaEnvasesUniversales Arreglo Requerido Arreglo que contiene los parámetros utilizados en la addenda
 idFactura String Requerido Indica el identificador único que se le asigna a la factura al crear la addenda
 fechaMensaje String Requerido La fecha asignada a la addenda
 idTransaccion String Requerido Identificador utilizado para la transacción
 transacción String Requerido El número correspondiente a la transacción
 consecutivo String Requerido Consecutivo de addenda
 idPedido String Requerido Indica el identificador del pedido correspondiente al CFDI de la addenda
 albaran String Requerido Indica el identificador del albarán correspondiente al CFDI de la addenda
 monedaCve String Requerido Indica la abreviatura de la moneda con la que se llevó a cabo la operación
 tipoCambio Numerico Requerido El valor de cambio de la moneda utilizada para la operación
 totalM String Requerido Indica el total de la operación con todos los conceptos incluidos
 subtotalM String Requerido Indica el subtotal de la operación
 impuestoM String Requerido Indica el monto correspondiente a los impuestos de la operación
 baseImpuesto String Requerido Se utiliza para definir el porcentaje correspondiente a los impuestos de la operación

Construcción de la URL

Importante

El método para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v4/cfdi40/create

Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/create

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Envases Universales de México
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v4/cfdi40/create',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
     "Receptor" : {
        "UID": "62d8891fd3734"
      },
      "AddendaEnvasesUniversales": {
        "idFactura": "123",
        "fechaMensaje": "29/06/2022",
        "idTransaccion": "12345",
        "transaccion": "003",
        "consecutivo": "1",
        "idPedido": "40GVSBI2367",
        "albaran": "50BYSIOUNI1",
        "monedaCve": "MXN",
        "tipoCambio": 1.0000,
        "totalM": "232",
        "subtotalM": "200",
        "impuestoM": "32",
        "baseImpuesto": "16"
        },
      "TipoDocumento":"factura",
      "Conceptos": [{
        "ClaveProdServ": "81112101",
        "Cantidad":1,
        "ClaveUnidad":"E48",
        "Unidad": "Unidad de servicio",
        "ValorUnitario": 200.00,
        "Descripcion": "Desarrollo a la medida",
         "Impuestos":{
            "Traslados":[
               {
                  "Base": 200.00,
                  "Impuesto":"002",
                  "TipoFactor":"Tasa",
                  "TasaOCuota":"0.16",
                  "Importe":32.00
               }
            ]
         }
      }],
      "UsoCFDI": "G03",
      "Serie": 13910,
      "FormaPago": "03",
      "MetodoPago": "PUE",
      "Moneda": "MXN",
      "EnviarCorreo": false
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v4/cfdi40/create',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "Receptor": {
      "UID": "62d8891fd3734"
    },
    "AddendaEnvasesUniversales": {
      "idFactura": "123",
      "fechaMensaje": "29/06/2022",
      "idTransaccion": "12345",
      "transaccion": "003",
      "consecutivo": "1",
      "idPedido": "40GVSBI2367",
      "albaran": "50BYSIOUNI1",
      "monedaCve": "MXN",
      "tipoCambio": 1,
      "totalM": "232",
      "subtotalM": "200",
      "impuestoM": "32",
      "baseImpuesto": "16"
    },
    "TipoDocumento": "factura",
    "Conceptos": [
      {
        "ClaveProdServ": "81112101",
        "Cantidad": 1,
        "ClaveUnidad": "E48",
        "Unidad": "Unidad de servicio",
        "ValorUnitario": 200,
        "Descripcion": "Desarrollo a la medida",
        "Impuestos": {
          "Traslados": [
            {
              "Base": 200,
              "Impuesto": "002",
              "TipoFactor": "Tasa",
              "TasaOCuota": "0.16",
              "Importe": 32
            }
          ]
        }
      }
    ],
    "UsoCFDI": "G03",
    "Serie": 13910,
    "FormaPago": "03",
    "MetodoPago": "PUE",
    "Moneda": "MXN",
    "EnviarCorreo": false
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v4/cfdi40/create"

payload = json.dumps({
  "Receptor": {
    "UID": "62d8891fd3734"
  },
  "AddendaEnvasesUniversales": {
    "idFactura": "123",
    "fechaMensaje": "29/06/2022",
    "idTransaccion": "12345",
    "transaccion": "003",
    "consecutivo": "1",
    "idPedido": "40GVSBI2367",
    "albaran": "50BYSIOUNI1",
    "monedaCve": "MXN",
    "tipoCambio": 1,
    "totalM": "232",
    "subtotalM": "200",
    "impuestoM": "32",
    "baseImpuesto": "16"
  },
  "TipoDocumento": "factura",
  "Conceptos": [
    {
      "ClaveProdServ": "81112101",
      "Cantidad": 1,
      "ClaveUnidad": "E48",
      "Unidad": "Unidad de servicio",
      "ValorUnitario": 200,
      "Descripcion": "Desarrollo a la medida",
      "Impuestos": {
        "Traslados": [
          {
            "Base": 200,
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.16",
            "Importe": 32
          }
        ]
      }
    }
  ],
  "UsoCFDI": "G03",
  "Serie": 13910,
  "FormaPago": "03",
  "MetodoPago": "PUE",
  "Moneda": "MXN",
  "EnviarCorreo": False
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v4/cfdi40/create")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "Receptor": {
    "UID": "62d8891fd3734"
  },
  "AddendaEnvasesUniversales": {
    "idFactura": "123",
    "fechaMensaje": "29/06/2022",
    "idTransaccion": "12345",
    "transaccion": "003",
    "consecutivo": "1",
    "idPedido": "40GVSBI2367",
    "albaran": "50BYSIOUNI1",
    "monedaCve": "MXN",
    "tipoCambio": 1,
    "totalM": "232",
    "subtotalM": "200",
    "impuestoM": "32",
    "baseImpuesto": "16"
  },
  "TipoDocumento": "factura",
  "Conceptos": [
    {
      "ClaveProdServ": "81112101",
      "Cantidad": 1,
      "ClaveUnidad": "E48",
      "Unidad": "Unidad de servicio",
      "ValorUnitario": 200,
      "Descripcion": "Desarrollo a la medida",
      "Impuestos": {
        "Traslados": [
          {
            "Base": 200,
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.16",
            "Importe": 32
          }
        ]
      }
    }
  ],
  "UsoCFDI": "G03",
  "Serie": 13910,
  "FormaPago": "03",
  "MetodoPago": "PUE",
  "Moneda": "MXN",
  "EnviarCorreo": false
})

response = https.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{

    "response": "success",
    "message": "Factura creada y enviada satisfactoriamente",
    "UUID": "52aabce0-63ac-4383-bb4b-a10a76aea56f",
    "uid": "623bac1a616b6",
    "SAT": {
        "UUID": "52aabce0-63ac-4383-bb4b-a10a76aea56f",
        "FechaTimbrado": "2022-03-23T17:23:04",
        "NoCertificadoSAT": "30001000000400002495",
        "Version": "1.1",
        "SelloSAT": "BI3XeEq1VAU58Fa/QJnl21P36+TKBKMmPu+Dw9CGylamf5cB09rD56ozka4ePoqpFLyGDlNK54+rnhzTuF9wqmBw4ZWYyi0AZuKrGbaMW1DL4tFXcAZlT3K1l0jW4Wx1LSq5LrsUCaxQc12aR+DT/eLaSza15+d3CFOrvhj9CN6ZhHaW438QnevgljaoSau53VGxnBnPkgYSNZB7jz++ScUPkRZ1IKAWlVGFXpMd+STLQQNo3xoO3EHF6pBHxtJNjJaO8jcLXxUrbj6TOZdXPKdyXiHJ1sm7g0ZhyEntA0KAnwNOh2f7+UBcYDoK+mSflV9SBrTXJSfg2QI+RqmNCA==",
        "SelloCFD": "TN0/u3C2VNBt+SotpsvC+lW3YPHzhnfLETott4hP9PVChfxjbKCIkpILAt5SJnKNUqgIHKuYQH49gzlUUgzRStX51TFHqjNrwlPWl51gltbySFfR7PvXo+v/1bZE872pia44HwERFoJ0Xu49JbkdoZAK4JUYd0dYE9yElxcUUb0A94jhN7oOl1JPMgJgPRNYQBb7WVFKKO3X0Zl7ScTFTbcueBCBBY+smvBcTOBmXqfDO/p0xBpxl4hpKDfK5KXVeEvfbqLZwDjw6n75Oqg6SOQvVudiFNnGdgKkOWI//hXoDCFFCNU2TJdS7hWJfa9x/JsRoUJ3p2Smpl24XmNqLg=="

    },
    "INV": {
        "Serie": "F",
        "Folio": 360
    },
    "invoice_uid": "623bac1a616b6"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
  "response": "error",
  "message": {
    "message": "CFDI40161 - El valor del campo Importe o que corresponde a Traslado no se encuentra entre el limite inferior y superior permitido.",
    "messageDetail": "Comprobante:Concepto:Impuestos:Traslado:Importe: El Importe es mayor o menor al limite superior/inferior calculado. LimiteSuperiorCalculado: 17 LimiteInferiorCalculado: 15 Comprobante:Concepto:Impuestos:Traslado:Importe: 19",
    "data": null,
    "status": "error"
  },
  "xmlerror": "\n</cfdi:Traslados></cfdi:Impuestos></cfdi:Concepto></cfdi:Conceptos></cfdi:Traslados></cfdi:Impuestos></cfdi:Comprobante>\n"
}

Walmart

Asi podremos crear una addenda de Walmart, con un ejemplo y la muestra de la respuesta al crearla.

Importante

Es importante tomar en cuenta que la addenda de Envases Universales de México se crea al mismo tiempo que generamos el CFDI por lo que los parametros que se mostraran mas delante deben incluirse en el formato enviado cuando creamos el CFDI.

Esto es un diferenciador importante a tomar en cuenta ya que las otras addendas disponibles se generan en dos pasos los cuales consisten en generar el CFDI y generar una peticion para agregar la addenda a nuestro CFDI previamente creado.

Para crear nuestra addenda de Walmart seran necesarios los siguientes parametros:

 Parametro Tipo Requerido Detalles
 AddendaWalmart Arreglo Requerido Es el arreglo que contiene toda la informacion de nuestra addenda para Walmart este se envia adjunto al cuerpo de nuestro CFDI para que se añada al mismo tiempo que timbramos el documento
 anio String Requerido Especifica el año para nuestra addenda
 unidadCEDIS String Requerido Es el identificador utilizado para el Centro de Distribucion (CEDIS) donde se realiza la entrega
 ordenCompra String Requerido Es el numero que corresponde a la orden de compra de nuestro documento
 numeroProveedor String Requerido Especifica el identificador del proveedor
 folioRecibo String Requerido Indica el numero de recibo correspondiente a nuestro documento

Construcción de la URL

Importante

El método para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v4/cfdi40/create

Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/create

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Walmart
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v4/cfdi40/create',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
   "Receptor":{
      "UID":"62b1dcf75a60f"
   },
   "TipoDocumento":"factura",
   "UsoCFDI":"G01",
   "Redondeo":"2",
   "Conceptos":[
      {
         "ClaveProdServ":"83101800",
         "NoIdentificacion":"20190417C009001P00",
         "Cantidad":"100",
         "ClaveUnidad":"MWH",
         "Unidad":"MEGAWATT HORA",
         "ValorUnitario":"25",
         "Descripcion":"Venta de energía importada en el MDA",
         "Descuento":"0",
         "Impuestos":{
            "Traslados":[
               {
                  "Base":"25",
                  "Impuesto":"002",
                  "TipoFactor":"Tasa",
                  "TasaOCuota":"0.160000",
                  "Importe":"4"
               }
            ]
         }
      }
   ],
   "FormaPago":"99",
   "NumOrder": "",
   "MetodoPago":"PPD",
   "Moneda":"MXN",
   "CondicionesDePago":"Pago en una sola excibición",
   "Serie":"13910",
   "EnviarCorreo":"false",
   "AddendaWalmart":{
       "anio": "2023",
       "unidadCEDIS": "39",
       "ordenCompra": "391",
       "numeroProveedor": "392",
       "folioRecibo": "394"
   }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v4/cfdi40/create',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "Receptor": {
      "UID": "62b1dcf75a60f"
    },
    "TipoDocumento": "factura",
    "UsoCFDI": "G01",
    "Redondeo": "2",
    "Conceptos": [
      {
        "ClaveProdServ": "83101800",
        "NoIdentificacion": "20190417C009001P00",
        "Cantidad": "100",
        "ClaveUnidad": "MWH",
        "Unidad": "MEGAWATT HORA",
        "ValorUnitario": "25",
        "Descripcion": "Venta de energía importada en el MDA",
        "Descuento": "0",
        "Impuestos": {
          "Traslados": [
            {
              "Base": "25",
              "Impuesto": "002",
              "TipoFactor": "Tasa",
              "TasaOCuota": "0.160000",
              "Importe": "4"
            }
          ]
        }
      }
    ],
    "FormaPago": "99",
    "NumOrder": "",
    "MetodoPago": "PPD",
    "Moneda": "MXN",
    "CondicionesDePago": "Pago en una sola excibición",
    "Serie": "13910",
    "EnviarCorreo": "false",
    "AddendaWalmart": {
      "anio": "2023",
      "unidadCEDIS": "39",
      "ordenCompra": "391",
      "numeroProveedor": "392",
      "folioRecibo": "394"
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v4/cfdi40/create"

payload = json.dumps({
  "Receptor": {
    "UID": "62b1dcf75a60f"
  },
  "TipoDocumento": "factura",
  "UsoCFDI": "G01",
  "Redondeo": "2",
  "Conceptos": [
    {
      "ClaveProdServ": "83101800",
      "NoIdentificacion": "20190417C009001P00",
      "Cantidad": "100",
      "ClaveUnidad": "MWH",
      "Unidad": "MEGAWATT HORA",
      "ValorUnitario": "25",
      "Descripcion": "Venta de energía importada en el MDA",
      "Descuento": "0",
      "Impuestos": {
        "Traslados": [
          {
            "Base": "25",
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.160000",
            "Importe": "4"
          }
        ]
      }
    }
  ],
  "FormaPago": "99",
  "NumOrder": "",
  "MetodoPago": "PPD",
  "Moneda": "MXN",
  "CondicionesDePago": "Pago en una sola excibición",
  "Serie": "13910",
  "EnviarCorreo": "false",
  "AddendaWalmart": {
    "anio": "2023",
    "unidadCEDIS": "39",
    "ordenCompra": "391",
    "numeroProveedor": "392",
    "folioRecibo": "394"
  }
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v4/cfdi40/create")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "Receptor": {
    "UID": "62b1dcf75a60f"
  },
  "TipoDocumento": "factura",
  "UsoCFDI": "G01",
  "Redondeo": "2",
  "Conceptos": [
    {
      "ClaveProdServ": "83101800",
      "NoIdentificacion": "20190417C009001P00",
      "Cantidad": "100",
      "ClaveUnidad": "MWH",
      "Unidad": "MEGAWATT HORA",
      "ValorUnitario": "25",
      "Descripcion": "Venta de energía importada en el MDA",
      "Descuento": "0",
      "Impuestos": {
        "Traslados": [
          {
            "Base": "25",
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.160000",
            "Importe": "4"
          }
        ]
      }
    }
  ],
  "FormaPago": "99",
  "NumOrder": "",
  "MetodoPago": "PPD",
  "Moneda": "MXN",
  "CondicionesDePago": "Pago en una sola excibición",
  "Serie": "13910",
  "EnviarCorreo": "false",
  "AddendaWalmart": {
    "anio": "2023",
    "unidadCEDIS": "39",
    "ordenCompra": "391",
    "numeroProveedor": "392",
    "folioRecibo": "394"
  }
})

response = https.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
  "response": "success",
  "message": "Factura creada y enviada satisfactoriamente",
  "UUID": "8ff503a2-c6b7-4a25-XXX-a25610e6b488",
  "uid": "5c06fa8b3bbe6",
  "SAT": {
    "UUID": "8ff503a2-c6b7-XXX-92c7-a25610e6b488",
    "FechaTimbrado": "2018-12-04T16:07:08",
    "NoCertificadoSAT": "20001000000300022323",
    "Version": "1.1",
    "SelloSAT": "lzlv2bEVsjx8XkiJHJvlfCjr7xJ/laxZnvSmGSKF3C/HI9WFDYFFk4NfGyILBj8ll7m1VoCqlkSLvu9dRex4jSSGfPJOPGDrx7w/4AOj/scHPU23uIPhztnaHIYHKg9UxP4L9rgX814msJ8V86IXZ1nY7akr77Cpf2c2yAnHaO1fm81oQIe32obIs2GrOey6JG9oxQNrcUawSXXXXXXXX",
    "SelloCFD": "NJQH6WT8eLxAeti7pUWhB7F6C6xrdSqkFfORf3+SeGkhu+5E0cZZUQjgaSZLpPcgk01aQUf0Jayw2GewYou5MjD4OLzZnZuizPwy3cSfQXzgX6sJTtAsI00VyhQewxLYDSMqFUrPpniNQG8Nl/eEg1kx72kkmqih2KX2Z+URkhx14W7CMG2aMJnhDyZuyliF+cy3utjXwzxQMl+28A/mgnlfUXzZd/3IunTtxM/p4bpqbYinK+7Bd/n+90Z6axsFBs6N7wxUX6aK9YL58owhgVGXXXXXXXX"
  },
  "INV": {
    "Serie": "F",
    "Folio": 1433
  },
  "invoice_uid": "5c06fa8b3bXXX"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
  "response": "error",
  "message": {
    "message": "CFDI33161 - El valor del campo Importe o que corresponde a Traslado no se encuentra entre el limite inferior y superior permitido.",
    "messageDetail": "Comprobante:Concepto:Impuestos:Traslado:Importe: El Importe es mayor o menor al limite superior/inferior calculado. LimiteSuperiorCalculado: 17 LimiteInferiorCalculado: 15 Comprobante:Concepto:Impuestos:Traslado:Importe: 19",
    "data": null,
    "status": "error"
  },
  "xmlerror": "\n</cfdi:Traslados></cfdi:Impuestos></cfdi:Concepto></cfdi:Conceptos></cfdi:Traslados></cfdi:Impuestos></cfdi:Comprobante>\n"
}

Herdez

Asi podremos crear una addenda de Herdez, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de Herdez seran necesarios los siguientes parametros:

 Parámetro Tipo Requerido Detalles
 invoice String Requerido

 Se utiliza para especificar el CFDI a el cual se le agrega la addenda en este caso puede utilizar UID o UUID

Ejemplo:

"64b71596a29e6"

"1592adb9-e45a-4464-8878-8c359a9a7d26"

 addendaHerdez Arreglo Requerido Es el arreglo o nodo que contiene los parametros de la addenda Herdez los campos que componen la addenda se deben encontrar dentro de el
 RFC_Emisor String Requerido

 Se utiliza para indicar el RFC de quien genera el CFDI

Ejemplo:

"CACX7605101P8"

 RFC_Receptor String Opcional

 Se utiliza para indicar el RFC de quien recibe el CFDI, este valor es opcional y en caso de no enviarlo se toma por defecto el RFC que se utilizo como receptor al momento de crear el documento antes de agregar la addenda

Ejemplo:

"HER8301121X4"

""

 Folio_Manhattan String Requerido

 Se utiliza para especificar el folio o numero de control interno para el CFDI.

Ejemplo:

"1234567890"

"FLMHT1636809-02"

Construcción de la URL

Importante

El metodo para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/herdez/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/herdez/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Herdez
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/herdez/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "1592adb9-e45a-4464-8878-8c359a9a7d26",
    "addendaHerdez": {
        "RFC_Emisor": "CACX7605101P8",
        "RFC_Receptor": "HER8301121X4",
        "Folio_Manhattan": "246473"
    }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/herdez/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "1592adb9-e45a-4464-8878-8c359a9a7d26",
    "addendaHerdez": {
      "RFC_Emisor": "CACX7605101P8",
      "RFC_Receptor": "HER8301121X4",
      "Folio_Manhattan": "246473"
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/herdez/store"

payload = json.dumps({
  "invoice": "1592adb9-e45a-4464-8878-8c359a9a7d26",
  "addendaHerdez": {
    "RFC_Emisor": "CACX7605101P8",
    "RFC_Receptor": "HER8301121X4",
    "Folio_Manhattan": "246473"
  }
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/herdez/store")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "1592adb9-e45a-4464-8878-8c359a9a7d26",
  "addendaHerdez": {
    "RFC_Emisor": "CACX7605101P8",
    "RFC_Receptor": "HER8301121X4",
    "Folio_Manhattan": "246473"
  }
})

response = http.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "El campo RFC_Emisor es requerido"
}

Calsonic Kansei

Asi podremos crear una addenda de Calsonic Kansei con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de Calsonic Kansei seran necesarios los siguientes parametros:

 Parámetro Tipo Requerido Detalles
 invoice String Requerido Es el identificador del CFDI al cual se le agregara la addenda
 grupoValoresCK Arreglo Requerido Es el arreglo que contiene la informacion de la addenda de Calsonic Kansei
 purchaseOrder String Requerido

 Indica el numero o nombre de la orden de los productos

Ejemplo:

"712101"

 line String Requerido

 Se utiliza para especificar el numero de linea a la cual pertenecen los productos de el CFDI

Ejemplo:

"001"

 partCode String Requerido

 Se utiliza para especificar el codigo de los productos del CFDI

Ejemplo:

"00-9-708"

 currency String Requerido

 Indica la moneda con la cual se realiza el CFDI

Ejemplo:

"MXN"

Construcción de la URL

Importante

Importante el metodo para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/calsonickansei/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/calsonickansei/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de Calsonic Kansei
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/calsonickansei/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "6478efa2baff3",
    "grupoValoresCK":[
        {
        "purchaseOrder": "712101",
        "line": "001",
        "partCode": "00-9-708",
        "currency": "MXN"
        }
    ]
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/calsonickansei/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "6478efa2baff3",
    "grupoValoresCK": [
      {
        "purchaseOrder": "712101",
        "line": "001",
        "partCode": "00-9-708",
        "currency": "MXN"
      }
    ]
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/calsonickansei/store"

payload = json.dumps({
  "invoice": "6478efa2baff3",
  "grupoValoresCK": [
    {
      "purchaseOrder": "712101",
      "line": "001",
      "partCode": "00-9-708",
      "currency": "MXN"
    }
  ]
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/calsonickansei/store")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "6478efa2baff3",
  "grupoValoresCK": [
    {
      "purchaseOrder": "712101",
      "line": "001",
      "partCode": "00-9-708",
      "currency": "MXN"
    }
  ]
})

response = http.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

PepsiCo

Asi podremos crear una addenda de PepsiCo, con un ejemplo y la muestra de la respuesta al crearla.

Para crear nuestra addenda de PepsiCo seran necesarios los siguientes parametros:

 Parámetro Tipo Requerido Detalles
 invoice String RequeridoEs el identificador del CFDI al cual se le agregara la addenda
 pepsico Arreglo RequeridoEs el arreglo que contiene la información de la addenda de PepsiCo, toda la información correspondiente a la addenda se debe encontrar dentro de este nodo.
 tipo String Requerido

 Nombre de la addenda.

La addenda se llamará "AddendaPCO"

 version Numerico Requerido

Número de la versión de la addenda.

Para este caso es la  2.0

 idPedido String Requerido

Se utiliza para indicar el número de pedido u orden de compra, proporcionado por PEPSICO, asociado al comprobante (CFD / CFDI).

NOTA: Este campo es de uso requerido cuando el producto o mercancía haya sido solicitado a través de un pedido u Orden de Compra.

 idSolicitudPago String Opcional

Se utiliza para indicar el número con el cuál se genera la solicitud de pago al proveedor de servicios.

NOTA: Este campo es de uso requerido cuando usted provee servicios a PepsiCo.
 documentoArreglo Requerido Este es el arreglo el cual contiene la informacion relacionada a el CFDI.
 referencia String Opcional

 Sólo aplica cuando el comprobante corresponde a una Nota de Crédito o Nota de Cargo / Débito. Se utiliza para indicar el número de la factura a la cual se asocia la Nota de Crédito o de Cargo /Débito.

La composición de este dato, debe ser la siguiente:

Para CFDIs: UUID

Ejemplo:

"d0ffae4e-51ef-46d2-be62-92b190462af2"

 serie String Opcional

Se utiliza para precisar la serie a la que corresponde el comprobante.

Ejemplo:

"F"

 folio String Opcional

Se utiliza para indicar el número del comprobante. Para el caso de CFDIs, corresponde al folio interno.

Ejemplo:

"749"

 folioUUID String Opcional

Se utiliza para indicar el número de folio fiscal del comprobante, en caso de que se emitan CFDIs.

Ejemplo:

"abcde123456"

 tipoDoc Numerico Requerido

 Se utiliza para especificar el tipo de comprobante que el proveedor está emitiendo.

Los valores permitidos son:

1 se utiliza para Facturas

2 se utiliza para Notas de Crédito

3 utilizado para Notas de Cargo o Débito.

 IdProveedor Numerico Requerido Se utiliza para especificar el identificador o número que la Sociedad (Empresa) de PepsiCo ha asignado al proveedor.
 recepciones Arreglo Requerido

Es el arreglo que contiene la informacion de las recepciones, este nodo puede contener una o mas recepciones cada recepcion debe contener los campos correspondientes que se muestran a continuación

Ejemplo:

"recepciones": [
    {
        recepcion 1
    },
    {
        recepcion 2
    }
    .
    .
    .

 idRecepcion Numerico Requerido

Se utiliza para especificar el número con el cuál entra la mercancía al almacén. Este dato es proporcionado por PEPSICO al proveedor.

NOTA: Este campo es de uso requerido cuando usted provee productos o mercancía a PEPSICO.
 cantidad Numerico Requerido Atributo necesario para precisar la cantidad de bienes o servicios.
 unidad String Requerido Atributo para precisar la unidad de medida aplicable para la cantidad expresada en el concepto.
 descripcion String Requerido Atributo que explica de qué se trata el producto o servicio solicitado.
 valorUnitario Numerico Requerido Atributo necesario para precisar el valor o precio unitario de bienes o servicios.
 importe Numerico Requerido Atributo necesario para precisar el importe total de bienes o servicios y debe ser equivalente al resultado de multiplicar la cantidad por el valor unitario expresado en el concepto.

Construcción de la URL

Importante

El metodo para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/pepsico/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/pepsico/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda de PepsiCo
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/pepsico/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "64b84be75519d",
    "pepsico": {
        "tipo": "AddendaPCO",
        "version": "2.0",
        "idPedido": "Ord12872",
        "idSolicitudPago": "pay7382",
        "documento": {
            "referencia": "d0ffae4e-51ef-46d2-be62-92b190462af2",
            "serie": "F",
            "folio": "749",
            "folioUUID": "abcde123456",
            "tipoDoc": "1"
        },
        "idProveedor": "PROV00032",
        "recepciones": [
            {
                "idRecepcion": "REC9182",
                "cantidad": "320.00",
                "unidad": "KGM",
                "descripcion": "Azucar de caña",
                "valorUnitario": "15.50",
                "importe": "4960.00"
            },
            {
                "idRecepcion": "ABC123",
                "cantidad": "123",
                "unidad": "LTS",
                "descripcion": "Descripcion de prueba",
                "valorUnitario": "123",
                "importe": "456"
            }
        ]
    }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/pepsico/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "64b84be75519d",
    "pepsico": {
      "tipo": "AddendaPCO",
      "version": "2.0",
      "idPedido": "Ord12872",
      "idSolicitudPago": "pay7382",
      "documento": {
        "referencia": "d0ffae4e-51ef-46d2-be62-92b190462af2",
        "serie": "F",
        "folio": "749",
        "folioUUID": "abcde123456",
        "tipoDoc": "1"
      },
      "idProveedor": "PROV00032",
      "recepciones": [
        {
          "idRecepcion": "REC9182",
          "cantidad": "320.00",
          "unidad": "KGM",
          "descripcion": "Azucar de caña",
          "valorUnitario": "15.50",
          "importe": "4960.00"
        },
        {
          "idRecepcion": "ABC123",
          "cantidad": "123",
          "unidad": "LTS",
          "descripcion": "Descripcion de prueba",
          "valorUnitario": "123",
          "importe": "456"
        }
      ]
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/pepsico/store"

payload = json.dumps({
  "invoice": "64b84be75519d",
  "pepsico": {
    "tipo": "AddendaPCO",
    "version": "2.0",
    "idPedido": "Ord12872",
    "idSolicitudPago": "pay7382",
    "documento": {
      "referencia": "d0ffae4e-51ef-46d2-be62-92b190462af2",
      "serie": "F",
      "folio": "749",
      "folioUUID": "abcde123456",
      "tipoDoc": "1"
    },
    "idProveedor": "PROV00032",
    "recepciones": [
      {
        "idRecepcion": "REC9182",
        "cantidad": "320.00",
        "unidad": "KGM",
        "descripcion": "Azucar de caña",
        "valorUnitario": "15.50",
        "importe": "4960.00"
      },
      {
        "idRecepcion": "ABC123",
        "cantidad": "123",
        "unidad": "LTS",
        "descripcion": "Descripcion de prueba",
        "valorUnitario": "123",
        "importe": "456"
      }
    ]
  }
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/pepsico/store")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "64b84be75519d",
  "pepsico": {
    "tipo": "AddendaPCO",
    "version": "2.0",
    "idPedido": "Ord12872",
    "idSolicitudPago": "pay7382",
    "documento": {
      "referencia": "d0ffae4e-51ef-46d2-be62-92b190462af2",
      "serie": "F",
      "folio": "749",
      "folioUUID": "abcde123456",
      "tipoDoc": "1"
    },
    "idProveedor": "PROV00032",
    "recepciones": [
      {
        "idRecepcion": "REC9182",
        "cantidad": "320.00",
        "unidad": "KGM",
        "descripcion": "Azucar de caña",
        "valorUnitario": "15.50",
        "importe": "4960.00"
      },
      {
        "idRecepcion": "ABC123",
        "cantidad": "123",
        "unidad": "LTS",
        "descripcion": "Descripcion de prueba",
        "valorUnitario": "123",
        "importe": "456"
      }
    ]
  }
})

response = https.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

APR

A continuación, te mostraremos como crear la addenda APR para tus facturas, agregando información sobre hospedaje, estos son los parámetros a utilizar.

ParámetroTipoRequeridoDetalles
 invoice String Requerido Es el identificador del CFDI al cual se le agregara la addenda
 addendaApr Arreglo Requerido Contiene la informacion que se añade a la addenda de APR
 Propina String Opcional El monto de propina que se agregara
 Huesped String Opcional A nombre de quién está el hospedaje
 CheckIn String Opcional

 Fecha de inicio del hospedaje

 Ejemplo: 2024/10/19

 CheckOut String Opcional

 Fecha final del hospedaje

 Ejemplo: 2024/10/22

 Cupon String Opcional Cupón que se aplicó al momento del pago
 Reserva String Opcional Número o código de reservación
 Tipodecuarto String Opcional Referencia del tipo de habitación que se reservó

Construcción de la URL

Importante

El metodo para agregar una addenda de es tipo POST

Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)

Endpoint: /v3/addenda/apr/store

Ejemplo: https://facturaonline.com.mx/api/v3/addenda/apr/store

Tip

Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.

Ejemplo de addenda APR
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v3/addenda/apr/store',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "invoice": "64b84be75519d",
    "addendaApr": {
        "Propina": "530.60",
        "Huesped": "JUAN RODRIGUEZ",
        "CheckIn": "2024/10/19",
        "CheckOut": "2024/10/22",
        "Cupon": "",
        "Reserva": "384920",
        "Tipodecuarto": "SUIT DOBLE"
    }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key: Tu API key',
    'F-Secret-Key: Tu Secret key'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

var request = require('request');
var options = {
  'method': 'POST',
  'url': '{ HOST }/v3/addenda/apr/store',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "invoice": "64b84be75519d",
    "addendaApr": {
      "Propina": "530.60",
      "Huesped": "JUAN RODRIGUEZ",
      "CheckIn": "2024/10/19",
      "CheckOut": "2024/10/22",
      "Cupon": "",
      "Reserva": "384920",
      "Tipodecuarto": "SUIT DOBLE"
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

import requests
import json

url = "{ HOST }/v3/addenda/apr/store"

payload = json.dumps({
  "invoice": "64b84be75519d",
  "addendaApr": {
    "Propina": "530.60",
    "Huesped": "JUAN RODRIGUEZ",
    "CheckIn": "2024/10/19",
    "CheckOut": "2024/10/22",
    "Cupon": "",
    "Reserva": "384920",
    "Tipodecuarto": "SUIT DOBLE"
  }
})
headers = {
  'Content-Type': 'application/json',
  'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
  'F-Api-Key': 'Tu API key',
  'F-Secret-Key': 'Tu Secret key'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

require "uri"
require "json"
require "net/http"

url = URI("{ HOST }/v3/addenda/apr/store")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
  "invoice": "64b84be75519d",
  "addendaApr": {
    "Propina": "530.60",
    "Huesped": "JUAN RODRIGUEZ",
    "CheckIn": "2024/10/19",
    "CheckOut": "2024/10/22",
    "Cupon": "",
    "Reserva": "384920",
    "Tipodecuarto": "SUIT DOBLE"
  }
})

response = https.request(request)
puts response.read_body

Respuesta

Ejemplo de respuesta exitosa.
{
    "response": "success",
    "message": "Addenda agregada con éxito"
}

Ejemplo de respuesta cuando la factura ya cuenta con una addenda

Importante

Los CFDI solo pueden contar con una addenda añadida, por lo que este mensaje es importante para conocer si estamos intentando duplicar una addenda o ya se asigno alguna a nuestro CFDI

{
    "response": "failed",
    "message": "Ya cuenta con addenda"
}

Ejemplo de respuesta erronea

Aviso

El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.

{
    "response": "failed",
    "message": "CFDI invalido"
}

Last Updated:
Prev
Productos
Next
Fundamentos legales del SAT