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 '/^HTTP_STATUS/!p')
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 '.body.cfdi_codigo // 0')
    cfdi_texto=$(echo "$body" | jq -r '.body.cfdi_texto // ""')
    cfdi_desc=$(echo "$body" | jq -r '.body.cfdi_descripcion // ""')
    saldo=$(echo "$body" | jq -r '.body.saldo // 0')
    data=$(echo "$body" | jq -r '.body.data // null')
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