Ir al contenido

FISCALISTO / API

Emisores

Agregue los RFC que timbran desde su cuenta, con su CSD y su e.firma, y sepa en todo momento si ya pueden timbrar.

Un emisor es un RFC por el que su cuenta timbra. Una plataforma que factura por sus clientes tiene un emisor por cada uno; una empresa con varias razones sociales, uno por cada RFC. Todos usan los timbres de la misma cuenta.

1. Crear el emisor

curl https://api.fiscalisto.com/v1/issuers \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tax_id": "TOL190312KT4",
    "legal_name": "TOLPI",
    "tax_system": "601",
    "zip": "64000",
    "metadata": { "cliente": "42" }
  }'

Escriba legal_name, tax_system y zip exactamente como en la constancia de situación fiscal del RFC: el SAT rechaza los comprobantes si no coinciden. La razón social va sin el régimen de capital (sin «S.A. de C.V.»). El código postal es también el lugar de expedición de sus comprobantes.

La respuesta es el emisor con status: "needs_certificate" y, en requirement, lo que falta.

2. Subir el CSD

El certificado de sello digital (CSD) es con el que se sella cada comprobante. Se tramita en el SAT con la e.firma y son dos archivos, .cer y .key, con su contraseña. Mándelos en base64:

curl https://api.fiscalisto.com/v1/issuers/iss_OufpKqnrvx9p/certificates \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"cer\": \"$(base64 < CSD.cer | tr -d '\n')\",
    \"key\": \"$(base64 < CSD.key | tr -d '\n')\",
    \"password\": \"$CSD_PASSWORD\"
  }"

Fiscalisto revisa que sea un CSD (no una e.firma), que sea de ese RFC, que no esté vencido, que el .key corresponda y que la contraseña lo abra; si algo no, responde certificate_invalid con el motivo. Los archivos se guardan cifrados y solo se usan para sellar. Cuando el CSD vence, suba el nuevo con la misma ruta: el emisor conserva sus comprobantes y sus folios.

3. Firmar con la e.firma (solo producción)

Antes de su primer timbre en producción, cada RFC firma una vez el contrato de servicio con el PAC usando su e.firma (antes FIEL):

curl https://api.fiscalisto.com/v1/issuers/iss_OufpKqnrvx9p/efirma \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"cer\": \"$(base64 < efirma.cer | tr -d '\n')\",
    \"key\": \"$(base64 < efirma.key | tr -d '\n')\",
    \"password\": \"$EFIRMA_PASSWORD\"
  }"

La e.firma se usa en ese momento para firmar y no se guarda. Si manda el CSD en lugar de la e.firma, o la de otro RFC, responde efirma_invalid. Para pedirle al SAT las facturas del emisor, agregue "keep_for_downloads": true y se guarda cifrada (vea Descargas del SAT).

Que su cliente suba sus archivos

Si factura por sus clientes, lo más fácil es no pedirles sus archivos: mándelos a una página de Fiscalisto donde ellos suben su CSD y firman con su e.firma. Ni los archivos ni las contraseñas pasan por su plataforma.

curl https://api.fiscalisto.com/v1/issuers/iss_OufpKqnrvx9p/onboarding_links \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "return_url": "https://miplataforma.mx/configuracion/facturas" }'
{
  "object": "issuer_onboarding_link",
  "issuer": "iss_OufpKqnrvx9p",
  "url": "https://fiscalisto.com/alta/fko_…",
  "return_url": "https://miplataforma.mx/configuracion/facturas",
  "expires_at": "2026-10-25T10:15:00-06:00"
}

Abra url en el navegador de su cliente (con un enlace o una redirección, no dentro de un iframe). La página le pide solo lo que falta: el CSD, la firma del contrato o los dos, los revisa antes de mandarlos (que sean de ese RFC, vigentes y que la contraseña abra la llave) y al terminar le muestra Volver a su plataforma, que lleva a return_url. En ese momento llega el evento issuer.ready.

La liga sirve 24 horas (hasta 168 con expires_in_hours) y solo para ese emisor; cree otra cuando la necesite, por ejemplo cuando su CSD esté por vencer. Tras 20 intentos con archivos o contraseñas equivocados deja de servir. En pruebas la página revisa los archivos sin guardarlos y tiene Completar en pruebas, para que pruebe el flujo completo sin un CSD real.

Estados

statusQué significaQué hacer
activePuede timbrar.Nada.
needs_certificateFalta su CSD.Paso 2.
needs_efirmaFalta firmar el contrato con el PAC.Paso 3.
certificate_expiredSu CSD venció.Suba el nuevo (paso 2).
archivedYa no timbra.Cree otro emisor si lo necesita.

certificate.expires_at dice cuándo vence el CSD: avise a su cliente antes de esa fecha. Cuando un emisor de producción pasa a active (por la API, el panel o una liga de alta) llega el evento issuer.ready.

Pruebas

En pruebas no hace falta el CSD ni la e.firma: un emisor de pruebas nace active y timbra como el emisor de pruebas del SAT (stamps_as: "EKU9003173C9"), con el RFC que usted le dé. Si sube un CSD en pruebas se revisa igual que en producción, para que pruebe su flujo, pero se sigue timbrando con el de pruebas.

Nómina

Para timbrar recibos de nómina, el emisor necesita su registro patronal (employer_registration) y, si es persona física, su curp:

curl https://api.fiscalisto.com/v1/issuers/iss_OufpKqnrvx9p \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "employer_registration": "Y5412345109" }'

Archivar

DELETE /v1/issuers/{id} archiva el emisor: deja de timbrar, pero sus comprobantes siguen disponibles y se pueden cancelar. El RFC de un emisor no cambia; si se equivocó, archívelo y cree otro.