De pruebas a producción
No hay una URL de pruebas y otra de producción. Hay una URL, y la llave que use en cada petición decide contra qué ambiente del Ministerio transmite.
La llave es el ambiente
Una llave facta_test_ transmite al ambiente de pruebas del Ministerio (apitest.dtes.mh.gob.sv); una facta_live_, al servicio de producción. El prefijo de la llave viene marcado desde que se acuñó y no se puede cambiar después.
https://hcnvknpsbadplnfcflxx.supabase.co/functions/v1/api-v1El servidor compara dos ambientes, no uno
Acuñar una llave facta_live_ exige que la empresa ya haya completado su propia ceremonia de paso a producción en la aplicación — la que registra el certificado y la credencial de transmisión reales ante el Ministerio. Y en cada petición, el servidor vuelve a comparar el ambiente de la llave con el ambiente de la empresa antes de firmar nada.
Cruzarlos —una llave de pruebas contra una empresa ya en producción, o al revés— es 403 environment_not_allowed. Esto protege en los dos sentidos: una llave de pruebas nunca alcanza a emitir un documento fiscal real, y una llave de producción nunca ensucia el ambiente de pruebas con datos que no son ventas de verdad.
Qué cambia, y qué no
Lo único que cambia entre pruebas y producción es la llave — literalmente esa cadena, nada más:
- La URL base es la misma.
- Las cabeceras son las mismas.
- El cuerpo de cada petición es el mismo.
- El código de su integración no necesita ninguna rama por ambiente.
Si su sistema tiene un if (ambiente === "produccion") en algún punto de la integración con esta API, esa rama probablemente sobra: la diferencia ya la resuelve qué llave está configurada en ese despliegue.
Antes de acuñar la llave de producción
Repase la lista de Empezar: guardar el jws de cada emisión y no el documento, tratar el 202 como resultado y no como fallo, usar una Idempotency-Key estable por venta, y tener un camino para el 422 mh_rejected que reuse el correlativo gastado. Probarlas contra el ambiente 00 no tiene ningún costo ni consecuencia fiscal; la primera vez que se prueban en producción, si algo falla, ya hay un documento real de por medio.
Conserve las llaves de pruebas
Pasar a producción no jubila la llave facta_test_: es donde se prueba el cambio siguiente, sin arriesgar un correlativo real cada vez que se despliega algo nuevo.
Otras guías
Emitir un DTE
Cómo llamar a POST /v1/dte, qué llega firmado por dentro y las tres respuestas que puede recibir.
Leer →Preparar y firmar por separado
Por qué separar la reserva del correlativo de la firma, el prepareToken y sus 15 minutos, y qué pasa si el documento cambia entre las dos llamadas.
Leer →