Emitir un DTE
const url = 'https://openfactura.co/api/v1/dte';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"tipoDte":"11","datos":{"additionalProperty":"example"},"clienteId":"example","puntoVentaId":"example"}'};
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://openfactura.co/api/v1/dte \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "tipoDte": "11", "datos": { "additionalProperty": "example" }, "clienteId": "example", "puntoVentaId": "example" }'Construye, valida, firma y transmite el documento al MH. datos es la entrada del constructor del SDK @openfactura/dte para ese tipo. En Factura (01) precioUni incluye IVA; en Crédito Fiscal, notas y remisión va sin IVA. Si se envía clienteId y falta datos.receptor, el receptor se toma del cliente guardado.
Permiso: dte:emit.
Authorizations
Sección titulada «Authorizations»Parameters
Sección titulada «Parameters»Header Parameters
Sección titulada «Header Parameters»Hasta 200 caracteres. Repetir con la misma clave y el mismo cuerpo devuelve la respuesta original con Idempotent-Replayed: true, sin emitir dos veces; con otro cuerpo: 409 idempotencia_distinta. Se conservan 24 horas, por ambiente.
Request Bodyrequired
Sección titulada «Request Bodyrequired»object
object
Responses
Sección titulada «Responses»Procesado por el MH, con selloRecibido.
object
UUID en mayúsculas.
Milisegundos desde 1970.
Consulta pública en el portal del MH.
Example
{ "numeroControl": "DTE-01-M001P001-000000000000001", "tipoDte": "11", "ambiente": "00", "estado": "pendiente", "horaEmision": "01:38:12", "origen": "panel"}Headers
Sección titulada «Headers»Peticiones permitidas por minuto (sólo con clave de API).
Peticiones restantes en la ventana actual (sólo con clave de API).
Segundos hasta que se reinicia la ventana (sólo con clave de API).
true cuando la respuesta es la guardada de un intento anterior.
Contingencia: el MH no respondió; el DTE quedó firmado y se transmite después.
object
UUID en mayúsculas.
Milisegundos desde 1970.
Consulta pública en el portal del MH.
Example
{ "numeroControl": "DTE-01-M001P001-000000000000001", "tipoDte": "11", "ambiente": "00", "estado": "pendiente", "horaEmision": "01:38:12", "origen": "panel"}Headers
Sección titulada «Headers»Peticiones permitidas por minuto (sólo con clave de API).
Peticiones restantes en la ventana actual (sólo con clave de API).
Segundos hasta que se reinicia la ventana (sólo con clave de API).
true cuando la respuesta es la guardada de un intento anterior.
Cuerpo o parámetros inválidos (details = [{ ruta, mensaje }]), o el DTE no cumple el esquema del MH (details.problemas). Códigos: datos_invalidos, dte_invalido.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}Falta sesión, o la clave de API no es válida, fue revocada o expiró. Códigos: no_autenticado.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}Falta un permiso (details.permiso) o el origen de la petición con cookie no está permitido. Códigos: sin_permiso, origen_no_permitido.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}El recurso no existe en esta organización. Códigos: no_encontrado.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}Falta configurar algo o hay un conflicto. Códigos: sin_organizacion, sin_organizacion_activa, nit_bloqueado, emisor_no_configurado, credenciales_incompletas, sin_punto_venta, estado_invalido, ambiente_distinto, retorno_excedido, retorno_vigente, idempotencia_distinta, idempotencia_en_curso, cliente_repetido, producto_repetido, codigo_repetido, sin_archivo, limite_webhooks, simulador_inactivo.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}El MH rechazó el documento o el evento; details.mh = { codigo, mensaje, observaciones[] }. Códigos: dte_rechazado, invalidacion_rechazada, contingencia_rechazada, evento_rechazado.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}Límite de peticiones excedido; Retry-After indica cuántos segundos esperar. Códigos: limite_excedido.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}Headers
Sección titulada «Headers»Segundos que hay que esperar.
Problema hablando con el MH o al firmar. Con emision_incierta consulte details.codigoGeneracion antes de reintentar. Códigos: mh_credenciales_rechazadas, mh_no_disponible, emision_fallida, emision_incierta.
object
object
Detalle según el código; puede faltar.
Example
{ "error": { "code": "datos_invalidos" }}