Saltar al contenido
oden.tax docs

Sandbox y producción

Son dos ambientes separados, cada uno con su dominio, sus cuentas y sus llaves. La API es la misma en los dos: lo que pruebas en sandbox funciona igual en producción cambiando la dirección y la llave.

Un comprobante timbrado en sandbox no existe para el SAT. Tiene UUID, tiene sello y se ve idéntico, pero no aparece en el portal del contribuyente ni tiene efectos fiscales.

Los dos ambientes

Sandbox
API en api.staging.oden.tax, panel en app.staging.oden.tax. Ambiente de pruebas del PAC. Pagos con tarjetas de prueba de Stripe. Lo que se timbra aquí no existe para el SAT.
Producción
API en api.oden.tax, panel en app.oden.tax. El PAC de verdad. Cada factura es un CFDI con efectos fiscales y consume un timbre de tu plan.

Una llave de sandbox no sirve en producción ni al revés: son cuentas distintas. Y un certificado de prueba cargado en producción se acepta, pero cada timbrado regresa csd_not_from_sat, porque el PAC de verdad sólo firma con sellos que el SAT expidió.

Empezar en sandbox

  1. Entra a app.staging.oden.tax con tu correo. Se crea una cuenta de prueba.
  2. Da de alta el emisor con uno de los contribuyentes de prueba de abajo: RFC, razón social, régimen y código postal tal como aparecen.
  3. Elige cualquiera de los dos planes; los dos incluyen la API. En sandbox se paga con la tarjeta de prueba 4242 4242 4242 4242, cualquier fecha futura y cualquier CVC; no se cobra nada.
  4. Crea una llave en Cuenta → API, sección Llaves de API.
  5. Sube el certificado de ese mismo RFC desde el panel o por la API, y timbra contra api.staging.oden.tax.

Emisores y certificados de prueba

Son los CSD que el SAT publica para el ambiente de pruebas de los PAC. No son secretos: la contraseña de las dos llaves es 12345678a. El RFC del emisor tiene que ser el del certificado; si no, la subida se rechaza con wrong_taxpayer. Vencen en mayo de 2027.

EKU9003173C9

Razón social
ESCUELA KEMPER URGATE
Régimen
601 · General de Ley Personas Morales
Código postal
20928
Contraseña
12345678a

MISC491214B86

Razón social
CECILIA MIRANDA SANCHEZ
Régimen
612 · Personas Físicas con Actividades Empresariales y Profesionales
Código postal
80290
Contraseña
12345678a

Receptores de prueba

El sandbox revisa al receptor contra la lista real del SAT: razón social, código postal y régimen tienen que coincidir, igual que en producción. Un RFC inventado o un nombre con otra escritura se rechaza. Estos tres timbran:

tax_id legal_name tax_regime postal_code cfdi_use
CUSC850516316 CESAR OSBALDO CRUZ SOLORZANO 612 45638 G03
MISC491214B86 CECILIA MIRANDA SANCHEZ 612 80290 G03
EKU9003173C9 ESCUELA KEMPER URGATE 601 20928 G03

XAXX010101000, público en general, también sirve, pero sólo en una factura global (con global_information): nosotros ponemos el nombre, el régimen 616, el uso S01 y el código postal del emisor. En una factura normal el SAT lo rechaza con global_needs_generic_recipient.

Cancelar en sandbox

Una factura recién timbrada todavía no se puede cancelar: el SAT de pruebas tarda unos minutos en registrarla, y mientras tanto la cancelación contesta que no la encuentra. Espera unos minutos y vuelve a intentarlo.

En sandbox ninguna cancelación pide la aceptación del receptor, sin importar el total. La respuesta llega como solicitada y en menos de media hora pasa a cancelada definitiva. Aceptar o rechazar una cancelación sólo se ve en producción.

Los timbres

Un timbre se consume cuando el PAC certifica el comprobante. Un rechazo no lo gasta, y por eso vale la pena que lo que esté mal se rechace lo antes posible: antes de llegar al PAC revisamos el uso del CFDI contra el régimen del receptor, que la fecha caiga dentro de las 72 horas y el XML contra el esquema del SAT.

Los del sandbox no se cobran. Es el lugar para probar los casos que dan miedo: una nota de crédito, una cancelación con motivo 01, una factura en dólares.

Timbrar es síncrono

Timbrar no pasa por una cola. POST /v1/mx/invoices sostiene la petición hasta que el PAC contesta y devuelve el comprobante timbrado, o el motivo por el que no. Cuando la llamada regresa, la respuesta es definitiva, salvo dos. pac_unavailable dice que el PAC no contestó y pudo haber timbrado: reintenta con la misma llave y le preguntamos antes de timbrar otra vez. Y un 201 con status: "stamping" y sin uuid es lo que contesta la misma llave mientras la primera llamada sigue esperando al PAC: vuelve a preguntar en unos segundos.

Eso implica un timeout generoso de tu lado. Damos hasta 45 segundos al PAC; en la práctica contesta en dos o tres. Si tu cliente corta antes que nosotros, la factura pudo haberse timbrado sin que lo sepas, y para eso está la llave de idempotencia. Lo que sí llega después es la respuesta del SAT a una cancelación, y para eso están los webhooks.