curl --request GET \
--url https://api.ipsofactura.com/cfdi/{id} \
--header 'x-api: <api-key>'import requests
url = "https://api.ipsofactura.com/cfdi/{id}"
headers = {"x-api": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api': '<api-key>'}};
fetch('https://api.ipsofactura.com/cfdi/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.ipsofactura.com/cfdi/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ipsofactura.com/cfdi/{id}")
.header("x-api", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ipsofactura.com/cfdi/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"cancelled_at": "<string>",
"descuento": 123,
"emisor_nombre": "<string>",
"emisor_regimen_fiscal": "<string>",
"emisor_rfc": "<string>",
"estatus": "<string>",
"estatus_cancelacion": "<string>",
"fecha": "<string>",
"folio": "<string>",
"forma_pago": "<string>",
"id": "<string>",
"idempotency_key": "<string>",
"metodo_pago": "<string>",
"moneda": "<string>",
"motivo_cancelacion": "<string>",
"origen": "json",
"pdf_url": "<string>",
"receptor_domicilio_fiscal": "<string>",
"receptor_nombre": "<string>",
"receptor_num_reg_id_trib": "<string>",
"receptor_regimen_fiscal": "<string>",
"receptor_residencia_fiscal": "<string>",
"receptor_rfc": "<string>",
"sandbox": true,
"serie": "<string>",
"stamped_at": "<string>",
"subtotal": 123,
"tipo_cambio": 123,
"tipo_comprobante": "<string>",
"total": 123,
"uso_cfdi": "<string>",
"uuid": "<string>",
"xml_url": "<string>"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}Consultar CFDI
Devuelve el estado completo de un CFDI: datos del comprobante, estatus y, si aplica, los campos de cancelación. El {id} acepta cualquiera de los dos identificadores: el id interno de Ipsofactura (el que regresa el timbrado) o el folio fiscal del SAT. Ambos son UUID, así que se resuelve primero como id interno y, si no coincide, como folio fiscal dentro de la cuenta. origen declara de dónde viene el registro: json o xml para un CFDI que timbró Ipsofactura, y externo para uno que timbró otro proveedor y que sólo existe aquí para sostener su cancelación — ese trae folio fiscal, emisor y el rastro de la cancelación, sin conceptos, totales, receptor, XML ni PDF. Para las URLs firmadas del XML y del PDF, GET /cfdi/{id}/xml y GET /cfdi/{id}/pdf.
curl --request GET \
--url https://api.ipsofactura.com/cfdi/{id} \
--header 'x-api: <api-key>'import requests
url = "https://api.ipsofactura.com/cfdi/{id}"
headers = {"x-api": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api': '<api-key>'}};
fetch('https://api.ipsofactura.com/cfdi/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.ipsofactura.com/cfdi/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ipsofactura.com/cfdi/{id}")
.header("x-api", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ipsofactura.com/cfdi/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"cancelled_at": "<string>",
"descuento": 123,
"emisor_nombre": "<string>",
"emisor_regimen_fiscal": "<string>",
"emisor_rfc": "<string>",
"estatus": "<string>",
"estatus_cancelacion": "<string>",
"fecha": "<string>",
"folio": "<string>",
"forma_pago": "<string>",
"id": "<string>",
"idempotency_key": "<string>",
"metodo_pago": "<string>",
"moneda": "<string>",
"motivo_cancelacion": "<string>",
"origen": "json",
"pdf_url": "<string>",
"receptor_domicilio_fiscal": "<string>",
"receptor_nombre": "<string>",
"receptor_num_reg_id_trib": "<string>",
"receptor_regimen_fiscal": "<string>",
"receptor_residencia_fiscal": "<string>",
"receptor_rfc": "<string>",
"sandbox": true,
"serie": "<string>",
"stamped_at": "<string>",
"subtotal": 123,
"tipo_cambio": 123,
"tipo_comprobante": "<string>",
"total": 123,
"uso_cfdi": "<string>",
"uuid": "<string>",
"xml_url": "<string>"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}{
"code": "VALIDATION_ERROR",
"id": "<string>",
"idempotencyKey": "<string>",
"message": "CFDI40147: El RFC del receptor no se encuentra en la lista de contribuyentes inscritos no cancelados del SAT",
"retryAfter": 123,
"sat_code": "CFDI40147"
}Authorizations
API key emitida por Ipsofactura, enviada en el header x-api.
Path Parameters
Response
CFDI encontrado
Origen del registro: json o xml para un CFDI timbrado por Ipsofactura (la vía por la que se recibió), y externo para un CFDI que timbró otro proveedor y que sólo existe aquí para sostener su cancelación. Un externo trae únicamente folio fiscal, emisor y el rastro de la cancelación: no hay conceptos, totales, receptor, XML ni PDF, porque nunca vimos el comprobante.
json, xml, externo Número de registro de identidad fiscal del receptor extranjero (TAX ID / VAT / NIT).
País de residencia fiscal del receptor (c_Pais). Sólo para receptor extranjero.