Complemento de pago
curl --request POST \
--url https://api.ipsofactura.com/cfdi/complemento-pago \
--header 'Content-Type: application/json' \
--header 'x-api: <api-key>' \
--data '
{
"rfc_emisor": "EKU9003173C9",
"pagos": [
{
"fecha_pago": "2026-07-21T09:55:00",
"forma_pago_p": "03",
"moneda_p": "MXN",
"monto": 1160,
"num_operacion": "OP-0001",
"documentos_relacionados": [
{
"factura_id": "<id-del-CFDI-PPD>",
"imp_pagado": 1160
}
]
}
]
}
'import requests
url = "https://api.ipsofactura.com/cfdi/complemento-pago"
payload = {
"rfc_emisor": "EKU9003173C9",
"pagos": [
{
"fecha_pago": "2026-07-21T09:55:00",
"forma_pago_p": "03",
"moneda_p": "MXN",
"monto": 1160,
"num_operacion": "OP-0001",
"documentos_relacionados": [
{
"factura_id": "<id-del-CFDI-PPD>",
"imp_pagado": 1160
}
]
}
]
}
headers = {
"x-api": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rfc_emisor: 'EKU9003173C9',
pagos: [
{
fecha_pago: '2026-07-21T09:55:00',
forma_pago_p: '03',
moneda_p: 'MXN',
monto: 1160,
num_operacion: 'OP-0001',
documentos_relacionados: [{factura_id: '<id-del-CFDI-PPD>', imp_pagado: 1160}]
}
]
})
};
fetch('https://api.ipsofactura.com/cfdi/complemento-pago', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ipsofactura.com/cfdi/complemento-pago",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'rfc_emisor' => 'EKU9003173C9',
'pagos' => [
[
'fecha_pago' => '2026-07-21T09:55:00',
'forma_pago_p' => '03',
'moneda_p' => 'MXN',
'monto' => 1160,
'num_operacion' => 'OP-0001',
'documentos_relacionados' => [
[
'factura_id' => '<id-del-CFDI-PPD>',
'imp_pagado' => 1160
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ipsofactura.com/cfdi/complemento-pago"
payload := strings.NewReader("{\n \"rfc_emisor\": \"EKU9003173C9\",\n \"pagos\": [\n {\n \"fecha_pago\": \"2026-07-21T09:55:00\",\n \"forma_pago_p\": \"03\",\n \"moneda_p\": \"MXN\",\n \"monto\": 1160,\n \"num_operacion\": \"OP-0001\",\n \"documentos_relacionados\": [\n {\n \"factura_id\": \"<id-del-CFDI-PPD>\",\n \"imp_pagado\": 1160\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.ipsofactura.com/cfdi/complemento-pago")
.header("x-api", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"rfc_emisor\": \"EKU9003173C9\",\n \"pagos\": [\n {\n \"fecha_pago\": \"2026-07-21T09:55:00\",\n \"forma_pago_p\": \"03\",\n \"moneda_p\": \"MXN\",\n \"monto\": 1160,\n \"num_operacion\": \"OP-0001\",\n \"documentos_relacionados\": [\n {\n \"factura_id\": \"<id-del-CFDI-PPD>\",\n \"imp_pagado\": 1160\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ipsofactura.com/cfdi/complemento-pago")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rfc_emisor\": \"EKU9003173C9\",\n \"pagos\": [\n {\n \"fecha_pago\": \"2026-07-21T09:55:00\",\n \"forma_pago_p\": \"03\",\n \"moneda_p\": \"MXN\",\n \"monto\": 1160,\n \"num_operacion\": \"OP-0001\",\n \"documentos_relacionados\": [\n {\n \"factura_id\": \"<id-del-CFDI-PPD>\",\n \"imp_pagado\": 1160\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "169fe189-...",
"uuid": "b0440bb7-...",
"fecha_timbrado": "2026-07-21T09:56:00",
"sello_cfdi": "...",
"sello_sat": "...",
"documentos_relacionados": [
{
"id_documento": "0bcfae68-...",
"num_parcialidad": 1,
"imp_pagado": "1160.00",
"imp_saldo_insoluto": "0.00",
"liquidado": true
}
]
}{
"id": "<string>",
"uuid": "<string>",
"serie": "<string>",
"folio": "<string>",
"sandbox": true,
"fecha_timbrado": "<string>",
"sello_cfdi": "<string>",
"sello_sat": "<string>",
"documentos_relacionados": [
{
"id_documento": "<string>",
"num_parcialidad": 123,
"imp_pagado": "<string>",
"imp_saldo_insoluto": "<string>",
"liquidado": true
}
]
}CFDI
Complemento de pago
Registra un pago (CFDI tipo P) contra un CFDI PPD previamente timbrado. El CFDI referenciado debe existir, ser PPD y del mismo emisor.
POST
/
cfdi
/
complemento-pago
Complemento de pago
curl --request POST \
--url https://api.ipsofactura.com/cfdi/complemento-pago \
--header 'Content-Type: application/json' \
--header 'x-api: <api-key>' \
--data '
{
"rfc_emisor": "EKU9003173C9",
"pagos": [
{
"fecha_pago": "2026-07-21T09:55:00",
"forma_pago_p": "03",
"moneda_p": "MXN",
"monto": 1160,
"num_operacion": "OP-0001",
"documentos_relacionados": [
{
"factura_id": "<id-del-CFDI-PPD>",
"imp_pagado": 1160
}
]
}
]
}
'import requests
url = "https://api.ipsofactura.com/cfdi/complemento-pago"
payload = {
"rfc_emisor": "EKU9003173C9",
"pagos": [
{
"fecha_pago": "2026-07-21T09:55:00",
"forma_pago_p": "03",
"moneda_p": "MXN",
"monto": 1160,
"num_operacion": "OP-0001",
"documentos_relacionados": [
{
"factura_id": "<id-del-CFDI-PPD>",
"imp_pagado": 1160
}
]
}
]
}
headers = {
"x-api": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rfc_emisor: 'EKU9003173C9',
pagos: [
{
fecha_pago: '2026-07-21T09:55:00',
forma_pago_p: '03',
moneda_p: 'MXN',
monto: 1160,
num_operacion: 'OP-0001',
documentos_relacionados: [{factura_id: '<id-del-CFDI-PPD>', imp_pagado: 1160}]
}
]
})
};
fetch('https://api.ipsofactura.com/cfdi/complemento-pago', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ipsofactura.com/cfdi/complemento-pago",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'rfc_emisor' => 'EKU9003173C9',
'pagos' => [
[
'fecha_pago' => '2026-07-21T09:55:00',
'forma_pago_p' => '03',
'moneda_p' => 'MXN',
'monto' => 1160,
'num_operacion' => 'OP-0001',
'documentos_relacionados' => [
[
'factura_id' => '<id-del-CFDI-PPD>',
'imp_pagado' => 1160
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ipsofactura.com/cfdi/complemento-pago"
payload := strings.NewReader("{\n \"rfc_emisor\": \"EKU9003173C9\",\n \"pagos\": [\n {\n \"fecha_pago\": \"2026-07-21T09:55:00\",\n \"forma_pago_p\": \"03\",\n \"moneda_p\": \"MXN\",\n \"monto\": 1160,\n \"num_operacion\": \"OP-0001\",\n \"documentos_relacionados\": [\n {\n \"factura_id\": \"<id-del-CFDI-PPD>\",\n \"imp_pagado\": 1160\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.ipsofactura.com/cfdi/complemento-pago")
.header("x-api", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"rfc_emisor\": \"EKU9003173C9\",\n \"pagos\": [\n {\n \"fecha_pago\": \"2026-07-21T09:55:00\",\n \"forma_pago_p\": \"03\",\n \"moneda_p\": \"MXN\",\n \"monto\": 1160,\n \"num_operacion\": \"OP-0001\",\n \"documentos_relacionados\": [\n {\n \"factura_id\": \"<id-del-CFDI-PPD>\",\n \"imp_pagado\": 1160\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ipsofactura.com/cfdi/complemento-pago")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rfc_emisor\": \"EKU9003173C9\",\n \"pagos\": [\n {\n \"fecha_pago\": \"2026-07-21T09:55:00\",\n \"forma_pago_p\": \"03\",\n \"moneda_p\": \"MXN\",\n \"monto\": 1160,\n \"num_operacion\": \"OP-0001\",\n \"documentos_relacionados\": [\n {\n \"factura_id\": \"<id-del-CFDI-PPD>\",\n \"imp_pagado\": 1160\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "169fe189-...",
"uuid": "b0440bb7-...",
"fecha_timbrado": "2026-07-21T09:56:00",
"sello_cfdi": "...",
"sello_sat": "...",
"documentos_relacionados": [
{
"id_documento": "0bcfae68-...",
"num_parcialidad": 1,
"imp_pagado": "1160.00",
"imp_saldo_insoluto": "0.00",
"liquidado": true
}
]
}{
"id": "<string>",
"uuid": "<string>",
"serie": "<string>",
"folio": "<string>",
"sandbox": true,
"fecha_timbrado": "<string>",
"sello_cfdi": "<string>",
"sello_sat": "<string>",
"documentos_relacionados": [
{
"id_documento": "<string>",
"num_parcialidad": 123,
"imp_pagado": "<string>",
"imp_saldo_insoluto": "<string>",
"liquidado": true
}
]
}Authorizations
API key emitida por Ipsofactura, enviada en el header x-api.
Body
application/json
Response
Complemento de pago timbrado
⌘I