Ejemplo en BASH
Ejemplo de uso del API SAT en bash.
Archivo fuente: curl.sh
#!/usr/bin/env bash
# ============================================================================
# Ejemplo cURL — POST /api/v1/usuario/datos-fiscales
# Compatible con bash, zsh. Probado en Linux, macOS y WSL.
# ============================================================================
set -euo pipefail
# Configuración
API_BASE="${SAT_API_BASE:-https://api.cfdi4.com}"
API_KEY="${SAT_API_KEY:?Error: configura SAT_API_KEY}"
RFC="${1:-XAXX010101000}"
echo "Consultando datos fiscales de RFC: $RFC"
echo "---"
# Hacer la consulta
response=$(curl -sS -X POST "$API_BASE/api/v1/usuario/datos-fiscales" \
-H "User-Agent: cURL-ejemplo/1.0" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
--data-raw "{\"rfc\":\"$RFC\"}" \
-w "\nHTTP_STATUS:%{http_code}\nTIME_TOTAL:%{time_total}")
# Separar body y metadata
body=$(echo "$response" | sed -n 039;/^HTTP_STATUS/!p039;)
http_code=$(echo "$response" | grep "HTTP_STATUS:" | cut -d: -f2)
time_total=$(echo "$response" | grep "TIME_TOTAL:" | cut -d: -f2)
# Parsear JSON con jq
if command -v jq >/dev/null 2>&1; then
cfdi_codigo=$(echo "$body" | jq -r 039;.body.cfdi_codigo // 0039;)
cfdi_texto=$(echo "$body" | jq -r 039;.body.cfdi_texto // ""039;)
cfdi_desc=$(echo "$body" | jq -r 039;.body.cfdi_descripcion // ""039;)
saldo=$(echo "$body" | jq -r 039;.body.saldo // 0039;)
data=$(echo "$body" | jq -r 039;.body.data // null039;)
else
# Fallback sin jq: usar grep
echo "(instala jq para mejor formato: apt install jq)"
echo "$body"
exit 0
fi
echo "HTTP: $http_code | Tiempo: ${time_total}s"
echo "Código: $cfdi_codigo | Texto: $cfdi_texto"
echo "Detalle: $cfdi_desc"
echo "Saldo restante: $saldo créditos"
if [ "$cfdi_codigo" = "1" ]; then
echo ""
echo "Datos fiscales:"
echo "$data" | jq .
else
echo ""
echo "ERROR: revisa el código arriba"
exit 1
fi