API Reference
API REST en espanol para consultar el SAT. Sin captchas, sin quebraderos. Multi-tenancy estricto por RFC, API key por hash Argon2id, 2FA TOTP opcional, cifrado AES-256-GCM para datos sensibles.
https://nexus.cfdi4.com
22 endpoints
Auth: API Key
OpenAPI: /openapi.json
Inicio rapido (3 pasos)
No encontramos nada con ""
Prueba con un termino mas corto, revisa la ortografia o usa el nombre del RFC/endpoint.
Identidad fiscal2
Tu perfil fiscal ante el SAT. Devuelve los datos del RFC asociado a tu API key: identidad, regimen fiscal, domicilio fiscal.
/api/consultas/identidadParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
IdentityResponse · 401 sin auth · 403 RFC no autorizadoEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/identidad?rfc=ABC010101ABC" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/identidad", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/identidad?rfc=ABC010101ABC");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/identidad');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/identidad")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/identidad"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/identidad");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"crossTenant": {
"description": "El cliente usa su propio Azure Key Vault...",
"consent": { "appClientId": "416cc5b1-...", "adminConsentUrl": "..." }
},
"platformManaged": { "description": "..." }
}
}Codigos de error
apiclave_faltanteNo se envio la API key.rfc_no_autorizadoRFC no coincide con el de tu API key.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "cliente_no_vinculado_backend",
"mensaje": "El cliente no esta vinculado con el backend."
}
}/api/consultas/datos_fiscalesParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
UserFiscalData · 401 sin auth · 403 RFC no autorizadoEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/datos_fiscales?rfc=ABC010101ABC" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/datos_fiscales", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/datos_fiscales?rfc=ABC010101ABC");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/datos_fiscales');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/datos_fiscales")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/datos_fiscales"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/datos_fiscales");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"razonSocial": "TEST SA DE CV",
"codigoPostal": "06000",
"regimenFiscal": "601",
"emailFacturacion": "test@empresa.com"
}
}Codigos de error
apiclave_faltanteNo se envio la API key.rfc_no_autorizadoRFC no coincide.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "apiclave_invalida",
"mensaje": "La API key no es valida."
}
}Constancia de Situacion Fiscal1
Consulta la Constancia de Situacion Fiscal (CSF) del RFC asociado a tu API key. Requiere CIEC del SAT + captcha + CIEC capturada.
/api/consultas/constancia_fiscalParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
captchaText | Query | string | SI | Del captcha. |
requestId | Query | string (uuid) | SI | Del captcha. |
Respuestas
CSF · 400 datos invalidos · 502 backend no disponibleEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/constancia_fiscal?rfc=ABC010101ABC&captchaText=...&requestId=..." \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
"captchaText": "...",
"requestId": "...",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/constancia_fiscal", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/constancia_fiscal?rfc=ABC010101ABC&captchaText=...&requestId=...");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/constancia_fiscal');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/constancia_fiscal")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
q.Set("captchaText", "...")
q.Set("requestId", "...")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/constancia_fiscal"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/constancia_fiscal");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": [
{
"rfc": "ABC010101ABC",
"razonSocial": "EMPRESA DEMO SA DE CV",
"regimenFiscal": "601",
"domicilio": { "calle": "AV. EJEMPLO 123", "colonia": "CENTRO", "cp": "06000", "municipio": "CUAUHTEMOC", "estado": "CDMX" },
"pdfBase64": "JVBERi0xLjQKJ...",
"fechaExpedicion": "2026-08-15",
"fechaConsulta": "2026-09-07T22:30:00Z"
}
]
}Codigos de error
motor_error_400The captchaText field is required.motor_no_disponibleEl servicio de consulta del SAT no esta disponible.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "The captchaText field is required."
}
}Cumplimiento de obligaciones2
Opinion de Cumplimiento de obligaciones fiscales y Declaraciones de pagos del SAT. Requieren CIEC + captcha + CIEC capturada.
/api/consultas/opinion_cumplimientoParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
captchaText | Query | string | SI | Del captcha. |
requestId | Query | string (uuid) | SI | Del captcha. |
Respuestas
OpinionCumplimiento · 502 backend no disponibleEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/opinion_cumplimiento?rfc=ABC010101ABC&captchaText=...&requestId=..." \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
"captchaText": "...",
"requestId": "...",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/opinion_cumplimiento", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/opinion_cumplimiento?rfc=ABC010101ABC&captchaText=...&requestId=...");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/opinion_cumplimiento');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/opinion_cumplimiento")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
q.Set("captchaText", "...")
q.Set("requestId", "...")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/opinion_cumplimiento"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/opinion_cumplimiento");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"opinion": "POSITIVA",
"fechaConsulta": "2026-09-07T22:30:00Z",
"pdfBase64": "JVBERi0xLjQKJ..."
}
}Codigos de error
motor_error_400The captchaText field is required.motor_no_disponibleEl servicio no esta disponible.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "The captchaText field is required."
}
}/api/consultas/declaracionesParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
captchaText | Query | string | SI | Del captcha. |
requestId | Query | string (uuid) | SI | Del captcha. |
ejercicio | Query | int | SI | Ejercicio fiscal (e.g. 2024). |
dec_mes | Query | int (0-12) | SI | Mes fiscal. 1-12 o 0 para todo el ano. |
Respuestas
Declaraciones · 400 falta ejercicio/mes · 502 backend no disponibleEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/declaraciones?rfc=ABC010101ABC&captchaText=...&requestId=...&ejercicio=0&dec_mes=0" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
"captchaText": "...",
"requestId": "...",
"ejercicio": "0",
"dec_mes": "0",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/declaraciones", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/declaraciones?rfc=ABC010101ABC&captchaText=...&requestId=...&ejercicio=0&dec_mes=0");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/declaraciones');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/declaraciones")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
q.Set("captchaText", "...")
q.Set("requestId", "...")
q.Set("ejercicio", "0")
q.Set("dec_mes", "0")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/declaraciones"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/declaraciones");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"ejercicio": 2024,
"mes": 1,
"declaraciones": [
{ "tipo": "normal", "fechaPresentacion": "2024-02-15", "estatus": "presentada" }
]
}
}Codigos de error
motor_error_400The captchaText field is required.motor_no_disponibleEl servicio no esta disponible.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "The captchaText field is required."
}
}Comprobantes fiscales (CFDI)2
Descarga masiva de CFDIs emitidos y recibidos, consulta estado de un CFDI (vigente/cancelado) y resolucion automatica del captcha del SAT.
/api/consultas/captchaParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
type | Query | string | - | csf (default), oc, fac o dec. |
antiCaptcha | Query | bool | - | Si es true (default), la plataforma resuelve el captcha automaticamente. |
Respuestas
Captcha · 400 RFC/CIEC requeridos · 401 sin authEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/captcha?rfc=ABC010101ABC&type=...&antiCaptcha=0" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
"type": "...",
"antiCaptcha": "0",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/captcha", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/captcha?rfc=ABC010101ABC&type=...&antiCaptcha=0");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/captcha');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/captcha")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
q.Set("type", "...")
q.Set("antiCaptcha", "0")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/captcha"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/captcha");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"formActionUrl": "https://login.siat.sat.gob.mx/nidp/idff/sso?id=...",
"captchaImage": "iVBORw0KGgoAAAANSUhEUgAAAKAA...",
"requestId": "a53aed56-272e-4916-8f28-6b7896b6d8e6",
"catpchaValue": "KSM35V"
}
}Codigos de error
motor_error_400RFC y Ciec son requeridos.apiclave_faltanteNo se envio la API key.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "cliente_no_vinculado_backend",
"mensaje": "El cliente no esta vinculado con el backend."
}
}/api/consultas/facturasParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
captchaText | Query | string | SI | Del captcha. |
requestId | Query | string (uuid) | SI | Del captcha. |
tipo | Query | string | SI | emitidos o recibidos. |
tipoBusqueda | Query | int (0|1) | - | 0=UUID, 1=Fecha. |
UUID | Query | string (uuid) | - | UUID del CFDI. |
estatusFactura | Query | int (-1|0|1) | - | -1=todos, 0=cancelados, 1=vigentes. |
anio | Query | int | - | Ano de emision. |
mes | Query | int (1-12) | - | Mes de emision. |
dia | Query | int (1-31) | - | Dia de emision. |
Respuestas
ListadoCFDIs · 400 falta tipo · 502 backend no disponibleEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/facturas?rfc=ABC010101ABC&captchaText=...&requestId=...&tipo=...&tipoBusqueda=0&UUID=...&estatusFactura=0&anio=0&mes=0&dia=0" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
"captchaText": "...",
"requestId": "...",
"tipo": "...",
"tipoBusqueda": "0",
"UUID": "...",
"estatusFactura": "0",
"anio": "0",
"mes": "0",
"dia": "0",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/facturas", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/facturas?rfc=ABC010101ABC&captchaText=...&requestId=...&tipo=...&tipoBusqueda=0&UUID=...&estatusFactura=0&anio=0&mes=0&dia=0");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/facturas');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/facturas")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
q.Set("captchaText", "...")
q.Set("requestId", "...")
q.Set("tipo", "...")
q.Set("tipoBusqueda", "0")
q.Set("UUID", "...")
q.Set("estatusFactura", "0")
q.Set("anio", "0")
q.Set("mes", "0")
q.Set("dia", "0")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/facturas"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/facturas");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"total": 1,
"cfdis": [
{ "uuid": "A9CC98B1-39CE-465C-AEC0-51CA3335280A", "fechaEmision": "2026-08-15T10:30:00", "tipo": "emitido", "estatus": "vigente", "monto": 1234.56 }
]
}
}Codigos de error
motor_error_400The tipo field is required.motor_no_disponibleEl servicio no esta disponible.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "The tipo field is required."
}
}Opinion de Cumplimiento IMSS BETA1
Consulta la opinion de cumplimiento de obligaciones del IMSS. BETA: el backend sat-go v1 aun no expone este endpoint; mientras tanto devuelve 502.
/api/consultas/opinion_imssParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
OpinionIMSS · 502 backend sin soporteEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/opinion_imss?rfc=ABC010101ABC" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/opinion_imss", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/opinion_imss?rfc=ABC010101ABC");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/opinion_imss');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/opinion_imss")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/opinion_imss"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/opinion_imss");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"opinion": "POSITIVA",
"fechaConsulta": "2026-09-10T00:00:00Z"
}
}Codigos de error
motor_no_disponiblesat-go v1 no expone el endpoint. Pendiente de publicacion.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_no_disponible",
"mensaje": "El servicio de consulta del SAT no esta disponible. Intenta de nuevo en unos minutos."
}
}Busqueda EFOS (Lista Negra 69-B) BETA1
Consulta la lista negra del art. 69-B del CFF (EFOS: Empresas que Facturan Operaciones Simuladas). BETA: el backend sat-go v1 aun no expone este endpoint; mientras tanto devuelve 502.
/api/consultas/lista_negra_69b/{rfc}Parametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Path | string (12-13) | SI | RFC en el path. |
Respuestas
EFOSStatus · 502 backend sin soporteEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/lista_negra_69b/{rfc}?rfc=ABC010101ABC" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/lista_negra_69b/{rfc}", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/lista_negra_69b/{rfc}?rfc=ABC010101ABC");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/lista_negra_69b/{rfc}');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/lista_negra_69b/{rfc}")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/lista_negra_69b/{rfc}"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/lista_negra_69b/{rfc}");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"enListaNegra": false,
"fechaConsulta": "2026-09-10T00:00:00Z"
}
}Codigos de error
motor_no_disponiblesat-go v1 no expone el endpoint. Pendiente de publicacion.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_no_disponible",
"mensaje": "El servicio de consulta del SAT no esta disponible. Intenta de nuevo en unos minutos."
}
}REPSE (Registro de Prestadores de Servicios) BETA1
Consulta el REPSE: registro de prestadores de servicios especializados del art. 15-I de la LFT. BETA: el backend sat-go v1 aun no expone este endpoint; mientras tanto devuelve 502.
/api/consultas/repseParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
REPSEStatus · 502 backend sin soporteEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/repse?rfc=ABC010101ABC" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/repse", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/repse?rfc=ABC010101ABC");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/repse');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/repse")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/repse"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/repse");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"registrado": true,
"actividadPrincipal": "Servicios de consultoria"
}
}Codigos de error
motor_no_disponiblesat-go v1 no expone el endpoint. Pendiente de publicacion.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_no_disponible",
"mensaje": "El servicio de consulta del SAT no esta disponible. Intenta de nuevo en unos minutos."
}
}Constancia de Retenciones BETA1
Descarga la constancia de retenciones del SAT. BETA: el backend sat-go v1 aun no expone este endpoint; requiere FIEL cargada en la cuenta.
/api/consultas/retencionesParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body | string (12-13) | SI | RFC del contribuyente. |
Respuestas
RetencionPDF · 502 backend sin soporteEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X POST "https://nexus.cfdi4.com/api/consultas/retenciones" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "apiclave=$API_KEY" \
--data-urlencode "rfc=ABC010101ABC"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY, "rfc": "ABC010101ABC"}
response = requests.post("https://nexus.cfdi4.com/api/consultas/retenciones", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY, "rfc": "ABC010101ABC" });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/retenciones", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/retenciones');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'apiclave' => $API_KEY,
'rfc' => 'ABC010101ABC',
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
form.Set("rfc", "ABC010101ABC")
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/retenciones", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey
+ "&rfc=ABC010101ABC";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/retenciones"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey),
new KeyValuePair<string, string>("rfc", "ABC010101ABC")
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/retenciones", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"pdfBase64": "JVBERi0xLjQKJ...",
"fechaEmision": "2026-09-10"
}
}Codigos de error
motor_no_disponiblesat-go v1 no expone el endpoint. Pendiente de publicacion.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_no_disponible",
"mensaje": "El servicio de consulta del SAT no esta disponible. Intenta de nuevo en unos minutos."
}
}Notificaciones del SAT BETA1
Consulta las notificaciones electronicas del SAT. BETA: el backend sat-go v1 aun no expone este endpoint; requiere FIEL cargada en la cuenta.
/api/consultas/notificacionesParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body | string (12-13) | SI | RFC del contribuyente. |
Respuestas
Notificaciones · 502 backend sin soporteEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X POST "https://nexus.cfdi4.com/api/consultas/notificaciones" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "apiclave=$API_KEY" \
--data-urlencode "rfc=ABC010101ABC"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY, "rfc": "ABC010101ABC"}
response = requests.post("https://nexus.cfdi4.com/api/consultas/notificaciones", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY, "rfc": "ABC010101ABC" });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/notificaciones", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/notificaciones');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'apiclave' => $API_KEY,
'rfc' => 'ABC010101ABC',
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
form.Set("rfc", "ABC010101ABC")
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/notificaciones", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey
+ "&rfc=ABC010101ABC";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/notificaciones"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey),
new KeyValuePair<string, string>("rfc", "ABC010101ABC")
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/notificaciones", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"total": 3,
"notificaciones": [
{ "id": "NOTI-001", "tipo": "Requerimiento", "fecha": "2026-08-15", "leida": false }
]
}
}Codigos de error
motor_no_disponiblesat-go v1 no expone el endpoint. Pendiente de publicacion.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_no_disponible",
"mensaje": "El servicio de consulta del SAT no esta disponible. Intenta de nuevo en unos minutos."
}
}Comunicados del SAT BETA1
Consulta los comunicados electronicos del SAT. BETA: el backend sat-go v1 aun no expone este endpoint; requiere FIEL cargada en la cuenta.
/api/consultas/comunicadosParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | Tu API key. |
rfc | Body | string (12-13) | SI | RFC del contribuyente. |
Respuestas
Comunicados · 502 backend sin soporteEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X POST "https://nexus.cfdi4.com/api/consultas/comunicados" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "apiclave=$API_KEY" \
--data-urlencode "rfc=ABC010101ABC"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY, "rfc": "ABC010101ABC"}
response = requests.post("https://nexus.cfdi4.com/api/consultas/comunicados", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY, "rfc": "ABC010101ABC" });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/comunicados", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/comunicados');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'apiclave' => $API_KEY,
'rfc' => 'ABC010101ABC',
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
form.Set("rfc", "ABC010101ABC")
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/comunicados", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey
+ "&rfc=ABC010101ABC";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/comunicados"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey),
new KeyValuePair<string, string>("rfc", "ABC010101ABC")
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/comunicados", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"total": 5,
"comunicados": [
{ "id": "COM-001", "tipo": "Aviso", "fecha": "2026-08-20" }
]
}
}Codigos de error
motor_no_disponiblesat-go v1 no expone el endpoint. Pendiente de publicacion.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_no_disponible",
"mensaje": "El servicio de consulta del SAT no esta disponible. Intenta de nuevo en unos minutos."
}
}Credenciales SAT - CIEC4
Gestion de la Clave de Identificacion Electronica Confidencial (CIEC) del SAT. Necesaria para hacer consultas al SAT. La CIEC se cifra con AES-256-GCM y se guarda en tu cuenta.
/api/consultas/ciec_registrarParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
SecretProvider · 400 body invalidoEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X POST "https://nexus.cfdi4.com/api/consultas/ciec_registrar?rfc=ABC010101ABC" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "apiclave=$API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY}
response = requests.post("https://nexus.cfdi4.com/api/consultas/ciec_registrar", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/ciec_registrar", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/ciec_registrar');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'apiclave' => $API_KEY,
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/ciec_registrar", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/ciec_registrar"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey)
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/ciec_registrar", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"providerType": "platformManaged",
"isRegistered": true
}
}Codigos de error
motor_error_400Validation failed.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "Validation failed: providerType is required."
}
}/api/consultas/ciec_guardarParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
SecretStored · 404 RFC no registradoEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X POST "https://nexus.cfdi4.com/api/consultas/ciec_guardar?rfc=ABC010101ABC" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "apiclave=$API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY}
response = requests.post("https://nexus.cfdi4.com/api/consultas/ciec_guardar", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/ciec_guardar", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/ciec_guardar');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'apiclave' => $API_KEY,
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/ciec_guardar", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/ciec_guardar"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey)
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/ciec_guardar", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"providerType": "platformManaged",
"secretName": "ciec-abc010101abc",
"message": "Secreto guardado exitosamente"
}
}Codigos de error
motor_error_404RFC no registrado.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_404",
"mensaje": "El RFC XXXX no esta registrado para este usuario."
}
}/api/consultas/ciec/{rfc}Parametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Path | string (12-13) | SI | RFC en el path. |
Respuestas
SecretDeleted · 404 RFC no registradoEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X DELETE "https://nexus.cfdi4.com/api/consultas/ciec/{rfc}" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY, "rfc": "ABC010101ABC"}
response = requests.post("https://nexus.cfdi4.com/api/consultas/ciec/{rfc}", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY, "rfc": "ABC010101ABC" });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/ciec/{rfc}", {
method: "DELETE",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/ciec/{rfc}');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
form.Set("rfc", "ABC010101ABC")
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/ciec/{rfc}", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey
+ "&rfc=ABC010101ABC";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/ciec/{rfc}"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey),
new KeyValuePair<string, string>("rfc", "ABC010101ABC")
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/ciec/{rfc}", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"message": "Proveedor de secretos eliminado. El RFC requiere header Secret nuevamente."
}
}Codigos de error
motor_error_404RFC no registrado.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_404",
"mensaje": "El RFC XXXX no esta registrado."
}
}/api/consultas/ciec_estado/{rfc}Parametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Path | string (12-13) | SI | RFC en el path. |
Respuestas
SecretStatusEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/ciec_estado/{rfc}?rfc=ABC010101ABC" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/ciec_estado/{rfc}", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/ciec_estado/{rfc}?rfc=ABC010101ABC");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/ciec_estado/{rfc}');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/ciec_estado/{rfc}")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/ciec_estado/{rfc}"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/ciec_estado/{rfc}");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"isRegistered": true,
"providerType": "platformManaged",
"providerUri": null,
"secretName": "ciec-abc010101abc"
}
}Codigos de error
motor_error_404RFC no registrado.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_404",
"mensaje": "El RFC XXXX no esta registrado."
}
}Credenciales SAT - FIEL5
Gestion de la Firma Electronica (FIEL) del SAT. Permite firmar CFDIs y operaciones que requieren autenticacion con e.firma. Se cifra con AES-256-GCM y se guarda en tu cuenta.
/api/consultas/fiel_clave_publicaParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
Respuestas
JWERecipient · 401 sin authEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/fiel_clave_publica" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY}
response = requests.post("https://nexus.cfdi4.com/api/consultas/fiel_clave_publica", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/fiel_clave_publica", {
method: "GET",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/fiel_clave_publica');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/fiel_clave_publica", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/fiel_clave_publica"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey)
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/fiel_clave_publica", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"description": "Cifra cada campo sensible de la FIEL como un JWE compacto...",
"publicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...\n-----END PUBLIC KEY-----"
}
}Codigos de error
apiclave_faltanteNo se envio la API key.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "apiclave_invalida",
"mensaje": "La API key no es valida."
}
}/api/consultas/fiel_registrarParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
SigningKeyProvider · 400 body invalidoEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X POST "https://nexus.cfdi4.com/api/consultas/fiel_registrar?rfc=ABC010101ABC" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "apiclave=$API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY}
response = requests.post("https://nexus.cfdi4.com/api/consultas/fiel_registrar", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/fiel_registrar", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/fiel_registrar');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'apiclave' => $API_KEY,
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/fiel_registrar", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/fiel_registrar"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey)
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/fiel_registrar", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"providerType": "platformManaged",
"isRegistered": true
}
}Codigos de error
motor_error_400Validation failed.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "Validation failed: providerType is required."
}
}/api/consultas/fiel_guardarParametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Body/Query | string (12-13) | SI | RFC. |
Respuestas
SigningKeyStored · 400 certificado invalidoEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X POST "https://nexus.cfdi4.com/api/consultas/fiel_guardar?rfc=ABC010101ABC" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "apiclave=$API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY}
response = requests.post("https://nexus.cfdi4.com/api/consultas/fiel_guardar", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/fiel_guardar", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/fiel_guardar');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'apiclave' => $API_KEY,
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/fiel_guardar", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/fiel_guardar"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey)
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/fiel_guardar", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"message": "FIEL importada al vault exitosamente"
}
}Codigos de error
motor_error_400Certificado o llave invalida.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "No se pudo parsear el certificado o la llave privada."
}
}/api/consultas/fiel/{rfc}Parametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Path | string (12-13) | SI | RFC en el path. |
Respuestas
SigningKeyDeleted · 400 sin proveedorEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X DELETE "https://nexus.cfdi4.com/api/consultas/fiel/{rfc}" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
data = {"apiclave": API_KEY, "rfc": "ABC010101ABC"}
response = requests.post("https://nexus.cfdi4.com/api/consultas/fiel/{rfc}", data=data)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const params = new URLSearchParams({ apiclave: API_KEY, "rfc": "ABC010101ABC" });
const response = await fetch("https://nexus.cfdi4.com/api/consultas/fiel/{rfc}", {
method: "DELETE",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params,
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/fiel/{rfc}');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
form := url.Values{}
form.Set("apiclave", apiKey)
form.Set("rfc", "ABC010101ABC")
req, _ := http.NewRequest("POST", "https://nexus.cfdi4.com/api/consultas/fiel/{rfc}", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
String body = "apiclave=" + apiKey
+ "&rfc=ABC010101ABC";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/fiel/{rfc}"))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Bearer " + apiKey)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>("apiclave", apiKey),
new KeyValuePair<string, string>("rfc", "ABC010101ABC")
});
var response = await client.PostAsync("https://nexus.cfdi4.com/api/consultas/fiel/{rfc}", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"message": "Proveedor de firma eliminado."
}
}Codigos de error
motor_error_400Sin proveedor.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_400",
"mensaje": "El RFC XXXX no tiene un proveedor de firma registrado."
}
}/api/consultas/fiel_estado/{rfc}Parametros
| Parametro | En | Tipo | Req. | Descripcion |
|---|---|---|---|---|
apiclave | Body/Header | string | SI | API key. |
rfc | Path | string (12-13) | SI | RFC en el path. |
Respuestas
SigningKeyStatusEjemplos (7 lenguajes)
# 1. Tu API key de CFDi Nexus (visible solo en este ejemplo).
API_KEY="pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Llamada al endpoint.
curl -X GET "https://nexus.cfdi4.com/api/consultas/fiel_estado/{rfc}?rfc=ABC010101ABC" \
-H "Authorization: Bearer $API_KEY"import requests
API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
params = {
"rfc": "ABC010101ABC",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get("https://nexus.cfdi4.com/api/consultas/fiel_estado/{rfc}", params=params, headers=headers)
data = response.json()
if data["estatus"] == "exitoso":
print(data["datos"])
else:
print(f"Error: {data['error']['mensaje']}")
const API_KEY = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
const url = new URL("https://nexus.cfdi4.com/api/consultas/fiel_estado/{rfc}?rfc=ABC010101ABC");
const response = await fetch(url, {
headers: { "Authorization": `Bearer pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx` },
});
const data = await response.json();
if (data.estatus === "exitoso") {
console.log(data.datos);
} else {
console.error("Error:", data.error.mensaje);
}
<?php
// Requiere PHP 8.0+ con extension curl habilitada.
$API_KEY = 'pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init('https://nexus.cfdi4.com/api/consultas/fiel_estado/{rfc}');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer ' . $API_KEY,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
if ($data['estatus'] === 'exitoso') {
print_r($data['datos']);
} else {
echo 'Error: ' . $data['error']['mensaje'];
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
apiKey := "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx"
u, _ := url.Parse("https://nexus.cfdi4.com/api/consultas/fiel_estado/{rfc}")
q := u.Query()
q.Set("rfc", "ABC010101ABC")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Nexus {
public static void main(String[] args) throws Exception {
String apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://nexus.cfdi4.com/api/consultas/fiel_estado/{rfc}"))
.header("Authorization", "Bearer " + apiKey)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
var apiKey = "pk_live_RFCxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxx";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var response = await client.GetAsync("https://nexus.cfdi4.com/api/consultas/fiel_estado/{rfc}");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
Ejemplo 200 OK
{
"estatus": "exitoso",
"datos": {
"rfc": "ABC010101ABC",
"isRegistered": false,
"providerType": null,
"keyName": null
}
}Codigos de error
motor_error_404RFC no registrado.Ejemplo de respuesta de error
{
"estatus": "error",
"error": {
"codigo": "motor_error_404",
"mensaje": "RFC no registrado."
}
}