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
    • Autofacturación Pro
    • Factura360
    • Referencias de pago
    • Autofacturación
    • Grupos de empleados
    • Empleados
    • Nóminas
    • Complementos
    • Retenciones
    • Complementos de retenciones
    • Carta porte v3.1
    • Catálogos
    • Clientes
    • Empresas
    • Migraciones
    • Partners
    • Series
    • Productos
    • Addendas
    • Fundamentos legales del SAT

Referencias de pago

Te presentamos las Referencias de Pago, una funcionalidad diseñada para incluir información detallada en tus archivos PDF y facilitar el proceso de cobranza. Con ellas, tus clientes sabrán exactamente cómo y dónde pagar las facturas que emites, permitiéndote agregar distintos métodos como SPEI, BBVA, OXXO, Paynet y Links de Pago, entre otros.

Estas referencias pueden integrarse a cada uno de tus CFDIs (de tipo ingreso) tanto al momento de timbrar como de forma posterior al timbrado. En esta sección te mostraremos cómo implementarlo a través de nuestra API

Importante

La referencia de pago será generada basándose estrictamente en los datos que proporciones. Si ocurre algún inconveniente durante el proceso de pago, será necesario validar que la información enviada sea la correcta.

Este elemento se añade al XML de tu CFDI en el nodo de Addenda, el cual está destinado a información no fiscal útil para especificaciones o instrucciones. Es importante resaltar que, aunque se agreguen referencias de pago a tus CFDIs, aún puedes agregar alguna addenda si es necesario.

Agregar referencias de pago a CFDIs ya timbrados

A continuación, se presentan los parámetros necesarios para generar las referencias de pago en un CFDI que ha sido timbrado previamente:

ParámetroTipoRequeridoDetalles
 invoice String Requerido Es el campo para enviar el UID o UUID del CFDI donde se agregarán las referencias de pago.
 PagosReferenciados Array Requerido Es el arreglo que identifica la sección de pagos y contiene la información de cada referencia..
 Tipo String Opcional

 Se utiliza para definir si se usará alguna plantilla por defecto. Existen plantillas prediseñadas (con colores y logos correspondientes) para: oxxo, paynet, spei, bbva y link_pago. Si se envía vacío o no se incluye, se tomará como pago genérico. Los valores admitidos son:

oxxo

paynet

spei

bbva

link_pago

 Titulo String Opcional Es el título que se mostrará en la sección de la referencia de pago dentro del PDF.
 Banco String Condicional Requerido cuando se utiliza el Tipo ‘spei’ para señalar la institución bancaria donde se recibirá el pago.
 Clabe Numerico Condicional Necesario cuando se utiliza el Tipo ‘spei’ para indicar la CLABE interbancaria.
 Convenio Numerico Condicional Opcional cuando se utiliza el Tipo ‘bbva’ para indicar el convenio CIE de BBVA.
 Referencia String Requerido Requerido para señalar la referencia de pago que se utilizará. Es obligatorio independientemente del Tipo elegido.
 Beneficiario String Opcional Campo opcional para indicar el nombre del beneficiario del pago a realizar.
 Total Numerico Requerido Campo para indicar el monto a pagar.
 Comision Numerico Opcional Se utiliza para indicar si el pago requiere de algún pago de comisión por la forma de pago utilizada. Si el Tipo es ‘spei’ o ‘bbva’, este campo no se tomará en cuenta.
 Instrucciones Arreglo de strings Opcional Solo se mostrará si el Tipo es generico o vacio. Es un arreglo que debe contener entre 1 y 4 strings con los pasos personalizados para realizar el pago. Se recomienda mantener instrucciones cortas, ya que el diseño en el PDF puede verse afectado si el texto es muy extenso.
 URL String Condicional Requerido si Tipo es ‘link_pago’. Se utiliza para agregar la dirección web donde se podrá realizar el pago; esta se mostrará en forma de código QR. Si el Tipo es cualquier otro, este campo no se mostrará.

Construcción de la URL

Importante

Importante el metodo para agregar una referencia de pago es POST

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

Endpoint: /v4/addenda/pagosreferenciados/store

Ejemplo: https://api.factura.com/v4/addenda/pagosreferenciados/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 Referencia de pago
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v4/addenda/pagosreferenciados/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": "69d55bdeea6b0",
  "PagosReferenciados": [
    {
      "Titulo": "Pago Generico",
      "Referencia": "123456789012",
      "Beneficiario": "Empresa Demo SA de CV",
      "Comision": 8.00,
      "Total": 2226.00,
      "Instrucciones": [
        "Paso 1 - Ve al banco a realizar un deposito.",
        "Paso 2 - Menciona la cuenta y referencia de pago.",
        "Paso 3 - Paga el monto total indicado.",
        "Paso 4 - Enviarnos el comprobante al correo de pagos."
      ]
    }
  ]
}',
  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/addenda/pagosreferenciados/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": "69d55bdeea6b0",
    "PagosReferenciados": [
      {
        "Titulo": "Pago Generico",
        "Referencia": "123456789012",
        "Beneficiario": "Empresa Demo SA de CV",
        "Comision": 8,
        "Total": 2226,
        "Instrucciones": [
          "Paso 1 - Ve al banco a realizar un deposito.",
          "Paso 2 - Menciona la cuenta y referencia de pago.",
          "Paso 3 - Paga el monto total indicado.",
          "Paso 4 - Enviarnos el comprobante al correo de pagos."
        ]
      }
    ]
  })

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

import requests
import json

url = "{ HOST }/v4/addenda/pagosreferenciados/store"

payload = json.dumps({
  "invoice": "69d55bdeea6b0",
  "PagosReferenciados": [
    {
      "Titulo": "Pago Generico",
      "Referencia": "123456789012",
      "Beneficiario": "Empresa Demo SA de CV",
      "Comision": 8,
      "Total": 2226,
      "Instrucciones": [
        "Paso 1 - Ve al banco a realizar un deposito.",
        "Paso 2 - Menciona la cuenta y referencia de pago.",
        "Paso 3 - Paga el monto total indicado.",
        "Paso 4 - Enviarnos el comprobante al correo de pagos."
      ]
    }
  ]
})
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/addenda/pagosreferenciados/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": "69d55bdeea6b0",
  "PagosReferenciados": [
    {
      "Titulo": "Pago Generico",
      "Referencia": "123456789012",
      "Beneficiario": "Empresa Demo SA de CV",
      "Comision": 8,
      "Total": 2226,
      "Instrucciones": [
        "Paso 1 - Ve al banco a realizar un deposito.",
        "Paso 2 - Menciona la cuenta y referencia de pago.",
        "Paso 3 - Paga el monto total indicado.",
        "Paso 4 - Enviarnos el comprobante al correo de pagos."
      ]
    }
  ]
})

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

Ejemplo de mas de una Referencia de pago a la vez
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v4/addenda/pagosreferenciados/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": "69d55bdeea6b0",
  "PagosReferenciados": [
    {
      "Tipo": "oxxo",        
      "Titulo": "Pago tiendas de conveniencia",
      "Referencia": "000000000000",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226.00,
      "Comision": 10.00
    },
    {
      "Titulo": "Pago con transferencia",
      "Tipo": "spei",
      "Banco": "Banco demo",
      "Clabe": 123456789012345678,
      "Referencia": "123456789012",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226.00
    },
    {
      "Titulo": "Link de pago",
      "Tipo": "link_pago",
      "Referencia": "123456789012",
      "URL": "sitioweb.com/pago-express",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226.00,
      "Comision": 0.00
    }
  ]
}',
  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/addenda/pagosreferenciados/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": "69d55bdeea6b0",
    "PagosReferenciados": [
      {
        "Tipo": "oxxo",
        "Titulo": "Pago tiendas de conveniencia",
        "Referencia": "000000000000",
        "Beneficiario": "Empresa Demo SA de CV",
        "Total": 2226,
        "Comision": 10
      },
      {
        "Titulo": "Pago con transferencia",
        "Tipo": "spei",
        "Banco": "Banco demo",
        "Clabe": 123456789012345680,
        "Referencia": "123456789012",
        "Beneficiario": "Empresa Demo SA de CV",
        "Total": 2226
      },
      {
        "Titulo": "Link de pago",
        "Tipo": "link_pago",
        "Referencia": "123456789012",
        "URL": "sitioweb.com/pago-express",
        "Beneficiario": "Empresa Demo SA de CV",
        "Total": 2226,
        "Comision": 0
      }
    ]
  })

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

import requests
import json

url = "{ HOST }/v4/addenda/pagosreferenciados/store"

payload = json.dumps({
  "invoice": "69d55bdeea6b0",
  "PagosReferenciados": [
    {
      "Tipo": "oxxo",
      "Titulo": "Pago tiendas de conveniencia",
      "Referencia": "000000000000",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226,
      "Comision": 10
    },
    {
      "Titulo": "Pago con transferencia",
      "Tipo": "spei",
      "Banco": "Banco demo",
      "Clabe": 123456789012345680,
      "Referencia": "123456789012",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226
    },
    {
      "Titulo": "Link de pago",
      "Tipo": "link_pago",
      "Referencia": "123456789012",
      "URL": "sitioweb.com/pago-express",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226,
      "Comision": 0
    }
  ]
})
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/addenda/pagosreferenciados/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": "69d55bdeea6b0",
  "PagosReferenciados": [
    {
      "Tipo": "oxxo",
      "Titulo": "Pago tiendas de conveniencia",
      "Referencia": "000000000000",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226,
      "Comision": 10
    },
    {
      "Titulo": "Pago con transferencia",
      "Tipo": "spei",
      "Banco": "Banco demo",
      "Clabe": 123456789012345680,
      "Referencia": "123456789012",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226
    },
    {
      "Titulo": "Link de pago",
      "Tipo": "link_pago",
      "Referencia": "123456789012",
      "URL": "sitioweb.com/pago-express",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 2226,
      "Comision": 0
    }
  ]
})

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

Respuesta

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

Respuesta erronea cuando no exite el CFDI enviado
{
    "response": "failed",
    "message": "CFDI invalido"
}

Respuesta erronea cuando falta algun campo requerido
{
    "response": "failed",
    "message": "El campo Clabe es requerido en PagosReferenciados[1] cuando Tipo es spei"
}

Agregar referencias de pago desde el timbrado de un CFDI

Estos son los parametros para agregar las referencias de pago desde que se envia la petición de timbrado de un nuevo CFDI.

ParámetroTipoRequeridoDetalles
 PagosReferenciados Array Requerido Es el arreglo que identifica la sección de pagos y contiene la información de cada referencia..
 Tipo String Opcional

 Se utiliza para definir si se usará alguna plantilla por defecto. Existen plantillas prediseñadas (con colores y logos correspondientes) para: oxxo, paynet, spei, bbva y link_pago. Si se envía vacío o no se incluye, se tomará como pago genérico. Los valores admitidos son:

oxxo

paynet

spei

bbva

link_pago

 Titulo String Opcional Es el título que se mostrará en la sección de la referencia de pago dentro del PDF.
 Banco String Condicional Requerido cuando se utiliza el Tipo ‘spei’ para señalar la institución bancaria donde se recibirá el pago.
 Clabe Numerico Condicional Necesario cuando se utiliza el Tipo ‘spei’ para indicar la CLABE interbancaria.
 Convenio Numerico Condicional Opcional cuando se utiliza el Tipo ‘bbva’ para indicar el convenio CIE de BBVA.
 Referencia String Requerido Requerido para señalar la referencia de pago que se utilizará. Es obligatorio independientemente del Tipo elegido.
 Beneficiario String Opcional Campo opcional para indicar el nombre del beneficiario del pago a realizar.
 Total Numerico Requerido Campo para indicar el monto a pagar.
 Comision Numerico Opcional Se utiliza para indicar si el pago requiere de algún pago de comisión por la forma de pago utilizada. Si el Tipo es ‘spei’ o ‘bbva’, este campo no se tomará en cuenta.
 Instrucciones Arreglo de strings Opcional Solo se mostrará si el Tipo es generico o vacio. Es un arreglo que debe contener entre 1 y 4 strings con los pasos personalizados para realizar el pago. Se recomienda mantener instrucciones cortas, ya que el diseño en el PDF puede verse afectado si el texto es muy extenso.
 URL String Condicional Requerido si Tipo es ‘link_pago’. Se utiliza para agregar la dirección web donde se podrá realizar el pago; esta se mostrará en forma de código QR. Si el Tipo es cualquier otro, este campo no se mostrará.

Construcción de la URL

Importante

Importante el metodo para agregar una referencia de pago es POST

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

Endpoint: /v4/cfdi40/create

Ejemplo: https://api.factura.com/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 Referencia de pago al timbrar un CFDI
<?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": "6650cd65930e1"
      },
      "TipoDocumento":"factura",
      "NumOrder": "",
      "LugarExpedicion": 69800,
      "Conceptos": [{
        "ClaveProdServ": "81112101",
        "Cantidad":1,
        "ClaveUnidad":"E48",
        "ValorUnitario": 1000.00,
        "Descripcion": "Desarrollo a la medida",
        "ObjetoImp": "02",
         "Impuestos":{
            "Traslados":[
               {
                  "Base": 1000.00,
                  "Impuesto":"002",
                  "TipoFactor":"Tasa",
                  "TasaOCuota":"0.16",
                  "Importe":160.00
               }
            ]
         }
      }],
      "UsoCFDI": "S01",
      "Serie": 61896,
      "FormaPago": "03",
      "MetodoPago": "PUE",
      "Moneda": "MXN",
      "EnviarCorreo": true,
      "PagosReferenciados": [
            {
                "Titulo": "Pago referenciado",
                "Beneficiario": "Empresa Demo SA de CV",
                "Total": 116.00,
                "Referencia": "000000000000",
                "Comision": 25.00,
                "Instrucciones": [
                "Acude a cualquier tienda participante",
                "Indica que deseas realizar un pago digital",
                "Proporciona la referencia y pague el total",
                "Envie el comprobante al correo [email protected]"
                ]
            },
            {
                "Titulo": "Pago tiendas de conveniencia",
                "Tipo": "Paynet",
                "Referencia": "000000000000",
                "Beneficiario": "Empresa Demo SA de CV",
                "Total": 116.00,
                "Comision": 10.00
            }
        ],
    "Draft": 0
}',
  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": "6650cd65930e1"
    },
    "TipoDocumento": "factura",
    "NumOrder": "",
    "LugarExpedicion": 69800,
    "Conceptos": [
      {
        "ClaveProdServ": "81112101",
        "Cantidad": 1,
        "ClaveUnidad": "E48",
        "ValorUnitario": 1000,
        "Descripcion": "Desarrollo a la medida",
        "ObjetoImp": "02",
        "Impuestos": {
          "Traslados": [
            {
              "Base": 1000,
              "Impuesto": "002",
              "TipoFactor": "Tasa",
              "TasaOCuota": "0.16",
              "Importe": 160
            }
          ]
        }
      }
    ],
    "UsoCFDI": "S01",
    "Serie": 61896,
    "FormaPago": "03",
    "MetodoPago": "PUE",
    "Moneda": "MXN",
    "EnviarCorreo": true,
    "PagosReferenciados": [
      {
        "Titulo": "Pago referenciado",
        "Beneficiario": "Empresa Demo SA de CV",
        "Total": 116,
        "Referencia": "000000000000",
        "Comision": 25,
        "Instrucciones": [
          "Acude a cualquier tienda participante",
          "Indica que deseas realizar un pago digital",
          "Proporciona la referencia y pague el total",
          "Envie el comprobante al correo [email protected]"
        ]
      },
      {
        "Titulo": "Pago tiendas de conveniencia",
        "Tipo": "Paynet",
        "Referencia": "000000000000",
        "Beneficiario": "Empresa Demo SA de CV",
        "Total": 116,
        "Comision": 10
      }
    ],
    "Draft": 0
  })

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

import requests
import json

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

payload = json.dumps({
  "Receptor": {
    "UID": "6650cd65930e1"
  },
  "TipoDocumento": "factura",
  "NumOrder": "",
  "LugarExpedicion": 69800,
  "Conceptos": [
    {
      "ClaveProdServ": "81112101",
      "Cantidad": 1,
      "ClaveUnidad": "E48",
      "ValorUnitario": 1000,
      "Descripcion": "Desarrollo a la medida",
      "ObjetoImp": "02",
      "Impuestos": {
        "Traslados": [
          {
            "Base": 1000,
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.16",
            "Importe": 160
          }
        ]
      }
    }
  ],
  "UsoCFDI": "S01",
  "Serie": 61896,
  "FormaPago": "03",
  "MetodoPago": "PUE",
  "Moneda": "MXN",
  "EnviarCorreo": True,
  "PagosReferenciados": [
    {
      "Titulo": "Pago referenciado",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 116,
      "Referencia": "000000000000",
      "Comision": 25,
      "Instrucciones": [
        "Acude a cualquier tienda participante",
        "Indica que deseas realizar un pago digital",
        "Proporciona la referencia y pague el total",
        "Envie el comprobante al correo [email protected]"
      ]
    },
    {
      "Titulo": "Pago tiendas de conveniencia",
      "Tipo": "Paynet",
      "Referencia": "000000000000",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 116,
      "Comision": 10
    }
  ],
  "Draft": 0
})
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")

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({
  "Receptor": {
    "UID": "6650cd65930e1"
  },
  "TipoDocumento": "factura",
  "NumOrder": "",
  "LugarExpedicion": 69800,
  "Conceptos": [
    {
      "ClaveProdServ": "81112101",
      "Cantidad": 1,
      "ClaveUnidad": "E48",
      "ValorUnitario": 1000,
      "Descripcion": "Desarrollo a la medida",
      "ObjetoImp": "02",
      "Impuestos": {
        "Traslados": [
          {
            "Base": 1000,
            "Impuesto": "002",
            "TipoFactor": "Tasa",
            "TasaOCuota": "0.16",
            "Importe": 160
          }
        ]
      }
    }
  ],
  "UsoCFDI": "S01",
  "Serie": 61896,
  "FormaPago": "03",
  "MetodoPago": "PUE",
  "Moneda": "MXN",
  "EnviarCorreo": true,
  "PagosReferenciados": [
    {
      "Titulo": "Pago referenciado",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 116,
      "Referencia": "000000000000",
      "Comision": 25,
      "Instrucciones": [
        "Acude a cualquier tienda participante",
        "Indica que deseas realizar un pago digital",
        "Proporciona la referencia y pague el total",
        "Envie el comprobante al correo [email protected]"
      ]
    },
    {
      "Titulo": "Pago tiendas de conveniencia",
      "Tipo": "Paynet",
      "Referencia": "000000000000",
      "Beneficiario": "Empresa Demo SA de CV",
      "Total": 116,
      "Comision": 10
    }
  ],
  "Draft": 0
})

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

Respuesta

Ejemplo de respuesta exitosa
{
    "response": "success",
    "message": "Factura creada y enviada satisfactoriamente",
    "UUID": "c0032dc0-3344-42f9-806d-0bf69296cdff",
    "uid": "6a022dd065a91",
    "SAT": {
        "UUID": "c0032dc0-3344-42f9-806d-0bf69296cdff",
        "FechaTimbrado": "2026-05-01T13:27:43",
        "NoCertificadoSAT": "00000000000000000000",
        "Version": "1.1",
        "SelloSAT": "TRlXhKj1RsGuiGyoa2I1sBSCuOV9WxBwy...",
        "SelloCFD": "N/6l1QC2k884DsBggSY1hCBjws1L9RwFqmc+c..."
    },
    "INV": {
        "Serie": "F",
        "Folio": 370
    },
    "invoice_uid": "6a022dd065a91"
}

Respuesta erronea cuando falta algun campo requerido
{
    "response": "error",
    "message": "El campo Referencia es requerido en PagosReferenciados[0]"
}

Eliminar referencia de pago

Es posible eliminar las referencias de pago agregadas a un CFDI, sin importar si se incluyeron al momento de timbrar o posteriormente. Esto no afectará la validez del CFDI en cuestión, y tienes la flexibilidad de eliminar todas las referencias o solo una de ellas.

A continuación, verás los parámetros necesarios para realizar la eliminación de referencias de pago.

ParámetroTipoRequeridoDetalles
 uid String Requerido Campo para enviar el UID del CFDI al que se le eliminarán las referencias de pago. Nota: No acepta UUID.
 node String Requerido Este campo siempre debe ser: ‘ReferenciaPago‘.
 index Numerico Opcional Aquí debemos indicar el índice de la referencia que queremos borrar. Es base 1, por lo que el primer elemento es el 1. Por ejemplo, si hay 3 referencias y queremos eliminar la segunda, debemos enviar: 2. Si se envía vacío, se eliminarán todas las referencias asociadas.

Construcción de la URL

Importante

Importante el metodo para eliminar una referencia de pago es POST

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

Endpoint: /v4/addenda/drop

Ejemplo: https://api.factura.com/v4/addenda/drop

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 eliminar Referencia de pago
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => '{ HOST }/v4/addenda/drop',
  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 =>'{
  "uid": "69fe88e236b29", 
  "node": "ReferenciaPago", 
  "index": 1 
}',
  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/addenda/drop',
  'headers': {
    'Content-Type': 'application/json',
    'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
    'F-Api-Key': 'Tu API key',
    'F-Secret-Key': 'Tu Secret key'
  },
  body: JSON.stringify({
    "uid": "69fe88e236b29",
    "node": "ReferenciaPago",
    "index": 1
  })

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

import requests
import json

url = "{ HOST }/v4/addenda/drop"

payload = json.dumps({
  "uid": "69fe88e236b29",
  "node": "ReferenciaPago",
  "index": 1
})
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/addenda/drop")

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({
  "uid": "69fe88e236b29",
  "node": "ReferenciaPago",
  "index": 1
})

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

Respuesta

Ejemplo de respuesta exitosa
{
    "response": "success"
}

Respuesta erronea cuando se manda mal el UID
{
    "response": "error",
    "message": "No se encontró el cfdi"
}

Prev
Factura360
Next
Autofacturación