Negocio
Ejecutar un archivo de pruebas de certificación
const url = 'https://api.timbro.do/v1/business/certification/test-runs';const options = { method: 'POST', headers: { 'idempotency-key': 'example', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"kind":"ecf","testSetId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","confirmation":{"statementVersion":"2026-10-21","language":"es"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.timbro.do/v1/business/certification/test-runs \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'idempotency-key: example' \ --data '{ "kind": "ecf", "testSetId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "confirmation": { "statementVersion": "2026-10-21", "language": "es" } }'Timbro firma cada caso del archivo de pruebas guardado (kind ecf para el paso 2 de la DGII, acecf para el paso 3) con el certificado de firma del negocio que Timbro custodia, y lo envía a la DGII en el orden del archivo, hasta el primer rechazo. Llámala solo mientras la certificación del negocio incluya la acción run_test_set; si no, responde business_certification_unavailable. El representante debe confirmar la declaración, y la confirmación se registra con el actor, la hora y el hash de la declaración antes de consultar a Timbro. Solo una persona o una clave de administrador puede confirmar, no un agente. Debe existir un archivo guardado de ese tipo; si no, responde business_certification_test_set_required. Si otro archivo más reciente reemplazó al que indica testSetId, responde business_certification_test_set_changed y no ejecuta nada. Un reintento con la misma clave de idempotencia (Idempotency-Key) y el mismo cuerpo devuelve la misma ejecución; una ejecución nueva requiere una confirmación y una clave nuevas. Una ejecución es evidencia para el negocio y para el equipo, no una decisión de la DGII: nunca cambia el estado de un paso. Consulta el resultado con retrieveBusinessCertificationTestRun.
Autenticación
Sección titulada «Autenticación»Parámetros
Sección titulada «Parámetros»Parámetros de cabecera
Sección titulada «Parámetros de cabecera»Cuerpo de la solicitudobligatorio
Sección titulada «Cuerpo de la solicitudobligatorio»object
El id del archivo guardado que vio el representante. Si un archivo más reciente de ese tipo lo reemplazó, la operación responde business_certification_test_set_changed y no ejecuta nada.
La declaración que el representante leyó y aceptó para este archivo. {business} es la razón social del negocio. Envía una clave de idempotencia (Idempotency-Key) nueva para cada confirmación. 2026-10-21, es: “Autorizo a Timbro a firmar con el certificado digital de {business} y a enviar a la DGII los casos de prueba de este archivo.” 2026-10-21, en: “I authorize Timbro to sign with {business}’s digital certificate and send the test cases in this file to DGII.”
Respuestas
Sección titulada «Respuestas»Una ejecución de un archivo de pruebas de la DGII que Timbro guardó. Timbro firma cada caso con el certificado que custodia para el negocio y lo envía a la DGII en el orden del archivo, hasta el primer rechazo. refused significa que no se pudieron construir los documentos del archivo y no se envió nada; refusal indica la hoja, la fila y la columna, nunca el texto de la celda. consumerInvoices lista las facturas de consumo firmadas (E32) que subes en el cuadro del paso 2 del portal de la DGII, y queda vacía para acecf. Una ejecución es evidencia, no una decisión de la DGII: nunca cambia el estado de un paso.
Campos y códigos de la respuesta
Una ejecución de un archivo de pruebas de la DGII que Timbro guardó. Timbro firma cada caso con el certificado que custodia para el negocio y lo envía a la DGII en el orden del archivo, hasta el primer rechazo. refused significa que no se pudieron construir los documentos del archivo y no se envió nada; refusal indica la hoja, la fila y la columna, nunca el texto de la celda. consumerInvoices lista las facturas de consumo firmadas (E32) que subes en el cuadro del paso 2 del portal de la DGII, y queda vacía para acecf. Una ejecución es evidencia, no una decisión de la DGII: nunca cambia el estado de un paso.
object
object
Un tipo de e-CF del 31 al 47, RFCE o ACECF.
object
La fila del archivo de la que salió el caso.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
true cuando esta respuesta repite el resultado guardado de una solicitud anterior con la misma clave de idempotencia (Idempotency-Key).
Una ejecución de un archivo de pruebas de la DGII que Timbro guardó. Timbro firma cada caso con el certificado que custodia para el negocio y lo envía a la DGII en el orden del archivo, hasta el primer rechazo. refused significa que no se pudieron construir los documentos del archivo y no se envió nada; refusal indica la hoja, la fila y la columna, nunca el texto de la celda. consumerInvoices lista las facturas de consumo firmadas (E32) que subes en el cuadro del paso 2 del portal de la DGII, y queda vacía para acecf. Una ejecución es evidencia, no una decisión de la DGII: nunca cambia el estado de un paso.
Campos y códigos de la respuesta
Una ejecución de un archivo de pruebas de la DGII que Timbro guardó. Timbro firma cada caso con el certificado que custodia para el negocio y lo envía a la DGII en el orden del archivo, hasta el primer rechazo. refused significa que no se pudieron construir los documentos del archivo y no se envió nada; refusal indica la hoja, la fila y la columna, nunca el texto de la celda. consumerInvoices lista las facturas de consumo firmadas (E32) que subes en el cuadro del paso 2 del portal de la DGII, y queda vacía para acecf. Una ejecución es evidencia, no una decisión de la DGII: nunca cambia el estado de un paso.
object
object
Un tipo de e-CF del 31 al 47, RFCE o ACECF.
object
La fila del archivo de la que salió el caso.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
true cuando esta respuesta repite el resultado guardado de una solicitud anterior con la misma clave de idempotencia (Idempotency-Key).
No se pudo entender la solicitud.
Ejemplo
{ "type": "about:blank", "title": "No se pudo entender la solicitud.", "status": 400, "code": "parameter_missing", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
La credencial falta, tiene un formato incorrecto o ya no es válida.
Ejemplo
{ "type": "about:blank", "title": "La credencial falta, tiene un formato incorrecto o ya no es válida.", "status": 401, "code": "person_session_missing", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
La credencial es válida, pero no tiene permiso para realizar esta operación.
Ejemplo
{ "type": "about:blank", "title": "La credencial es válida, pero no tiene permiso para realizar esta operación.", "status": 403, "code": "operation_not_permitted", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
Ningún endpoint sirve este método y ruta, o no existe un recurso con este identificador dentro del alcance del solicitante.
Ejemplo
{ "type": "about:blank", "title": "Ningún endpoint sirve este método y ruta, o no existe un recurso con este identificador dentro del alcance del solicitante.", "status": 404, "code": "business_not_found", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
La solicitud entra en conflicto con el estado actual del recurso o con una solicitud anterior que usó la misma clave de idempotencia (Idempotency-Key).
Ejemplo
{ "type": "about:blank", "title": "La solicitud entra en conflicto con el estado actual del recurso o con una solicitud anterior que usó la misma clave de idempotencia (`Idempotency-Key`).", "status": 409, "code": "business_certification_requirements_unmet", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
El cuerpo de la solicitud es más grande de lo que acepta este endpoint.
Ejemplo
{ "type": "about:blank", "title": "El cuerpo de la solicitud es más grande de lo que acepta este endpoint.", "status": 413, "code": "request_body_too_large", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
El cuerpo de la solicitud tiene un tipo de contenido que este endpoint no acepta.
Ejemplo
{ "type": "about:blank", "title": "El cuerpo de la solicitud tiene un tipo de contenido que este endpoint no acepta.", "status": 415, "code": "unsupported_media_type", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
La solicitud no pudo completarse. Recupera el resultado con la referencia guardada o repite la solicitud con la misma clave de idempotencia.
Ejemplo
{ "type": "about:blank", "title": "La solicitud no pudo completarse. Recupera el resultado con la referencia guardada o repite la solicitud con la misma clave de idempotencia.", "status": 500, "code": "internal_error", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.
Un servicio requerido no está disponible temporalmente. Inténtalo de nuevo con la misma referencia o la misma clave de idempotencia.
Ejemplo
{ "type": "about:blank", "title": "Un servicio requerido no está disponible temporalmente. Inténtalo de nuevo con la misma referencia o la misma clave de idempotencia.", "status": 503, "code": "business_certification_unavailable", "requestId": "request_000000000000000000000001"}Campos y códigos de la respuesta
Detalles de problema RFC 9457. Cada fallo de esta API es uno de estos objetos y cada operación limita code al subconjunto que puede emitir.
object
Código estable legible por máquinas. Toma decisiones con este código, nunca con title.
Campos opcionales
Solo aparece si la solicitud rechazada produjo una operación fiscal.
Solo aparece cuando las reglas oficiales de emisión rechazan la emisión.
Solo aparece cuando el rechazo señala un valor incluido en la solicitud.
Un problema público estable del documento, guardado para una admisión rechazada.
object
Cabeceras
Sección titulada «Cabeceras»Identifica esta solicitud. Indícalo cuando contactes a soporte.