{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"8f134a9b-dd61-4f05-885b-ef48363f9bcb","name":"DigitalInvoice - Facturación Digital","description":"En esta documentación se describe la REST API de Facturación Digital para Corporación Unidigital, Imprenta Digital en Venezuela autorizada por SENIAT que permite a los desarrolladores interactuar con la creación, anulación, busqueda y distribución de documentos fiscales. Aquí encontrarás información detallada sobre los recursos disponibles, los métodos admitidos, los parámetros de solicitud y respuesta, y más.\n\n**NOTA IMPORTANTE: Esta documentación esta diseñada para que crees un Fork en Postman, y teniendo las credenciales empieces a realizar tus pruebas. No es necesario solicitar unirse al Equipo de Unidigital.**\n\n### Información de contacto y metadatos\n\n- **Empresa:** [Corporación Unidigital 1220 C.A](https://www.unidigital.global/)\n    \n- **Propietario de la API:** [Corporación Unidigital 1220 C.A](https://www.unidigital.global/)\n    \n- **Creador de la API:** [Corporación Unidigital 1220 C.A](https://www.unidigital.global/)\n    \n- **Página web:** [https://www.unidigital.global](https://www.unidigital.global/)\n    \n- **Soporte del API:** [api@unidigital.global](https://mailto:api@unidigital.global)\n    \n- **URL API - Ambiente de producción:** [https://www.unidigital.global/digitalinvoice-core](https://www.unidigital.global/digitalinvoice-core)\n    \n- **Sitio Web - Ambiente de producción:** [https://www.unidigital.global/digitalinvoice-portal/](https://www.unidigital.global/digitalinvoice-portal/)\n    \n- **URL API - Ambiente de pruebas:** [https://qa.unidigital.global/digitalinvoice-core](https://qa.unidigital.global/digitalinvoice-core)\n    \n- **Sitio Web - Ambiente de pruebas:** [https://qa.unidigital.global/digitalinvoice-portal](https://qa.unidigital.global/digitalinvoice-portal)\n    \n\n### Aspectos Técnicos\n\n#### ¿Por qué un REST API?\n\nEn Unidigital, Imprenta Digital autorizada por el SENIAT hemos decidido ofrecer nuestros servicios a través de un REST API que permita a todos nuestros clientes construir experiencias basadas en tecnologías interconectadas donde los diferentes Sistemas se puedan comunicar de manera transparente y eficiente.\n\nEste documento te ayudará a interactuar con nuestra REST API para que puedas conectar tu ERP, tu Sitio Web o Aplicación Móvil y así ofrecerle a tu cliente una mejor experiencia al administrar sus documentos fiscales.\n\nEn la construcción de nuestra REST API valoramos mucho las sugerencias de los desarrolladores que la utilizan, si tienes alguna puedes escribirnos a [api@unidigital.global](https://mailto:api@unidigital.global)\n\n#### Solicitud de acceso a Empresa SandBox\n\nLo primero que necesitas para usar el REST API es tener unas credenciales asociadas a la Empresa SandBox, si no tienes credenciales puedes solicitarla enviando un correo a [api@unidigital.global](https://mailto:api@unidigital.global) indicando tu nombre, apellido, numero de cedula, y los datos fiscales de la empresa que representas. Una vez validada la información recibirás en tu correo las credenciales.\n\n#### Codigos HTTP de respuesta\n\nLas respuestas del API estan asociados a los estados HTTP\n\n- **200 OK**: El servidor ha procesado la solicitud correctamente y ha retornado una respuesta exitosa.\n    \n- **400 Bad Request**: La solicitud no se pudo entender o estaba incompleta. Esta respuesta generalmente se asocia con un error en los datos enviados al servidor, algún campo requerido que no fue especificado o el incumplimiento de alguna regla de negocio como puede ser enviar un numero de documento repetido.\n    \n- **401 Unauthorized**: La solicitud requiere autenticación, pero el cliente no ha proporcionado credenciales válidas. Generalmente se debe a que el token no ha sido especificado en el header de la solicitud o simplemente que el token esta vencido.\n    \n- **402 Not Found:** La entidad buscada por el request no fue encontrada.\n    \n- **429 Too Many Request:** una previa solicitud esta siendo atendida aun y por seguridad e integridad de datos debe esperarse que termine la solicitud anterior para continuar.\n    \n- **500 Internal Server Error**: Se ha producido un error en el servidor mientras procesaba la solicitud. Estos errores son los menos comunes, es importante que del lado del cliente sean logeados y notificados al equipo de Unidigital para su evaluación y correción inmediata.\n    \n\nNotas: para las respuestas con HTTP Status Code 400 el json de respuesta siempre tendra la siguiente estructura\n\n``` javascript\n{\n    \"result\": null,\n    \"errors\": [\n        {\n            \"code\": \"0000\",\n            \"message\": \"Mensaje explicativo del error\",\n            \"extra\": null\n        }\n    ],\n    \"success\": [],\n    \"information\": [],\n    \"haserrors\": true\n}\n\n ```\n\nEl campo errors es un arreglo que contiene una lista de todos los errores que fueron detectados durante el procesamiento de la solicitud, se recomienda que estos errores siempre sean logeados del lado del consumidor del API.\n\n#### Entidades principales del API\n\n##### Documento (Document)\n\nRepresenta un Documento generado por el Sistema Corporativo del Contribuyente, por ejemplo una Factura, Nota de Crédito o Nota de Débito. Todo documento siempre formará parte de un ciclo. Si el documento es creado bajo el concepto de \"Facturación en Linea\" entonces se creará un ciclo por cada documento transmitido al API, por el contrario si el documento es creado bajo el concepto de \"Facturación por Lotes\" entonces se creará un ciclo que podra almacenar N cantidad de documentos.\n\nTodos los documentos pasan por dos procesos de validación\n\n- **Validación de Estructura**: aqui el API se encarga de validar nombres del JSON y que los tipos de datos sean respetados. Mas adelante encontraras una tabla explicativa con todas las posibles propiedades que puede tener un documento.\n    \n- **Validación de Reglas de Negocio**: aqui el API se encarga de validar que el documento cumpla con todos los requisitos de LEY, ejemplo: que sea correlativo con referencia al documento anterior, que las alicuotas esten calculadas correctamente. Mas adelante encontrarás una sección con las reglas de negocio y su explicación.\n    \n\n##### Ciclo o Lote (Batch)\n\nEl Ciclo o Lote representa un elemento que permite agrupar uno o muchos documentos y contiene información valiosa como puede ser el CurrentStatus (Estatus actual), fecha de creación, fecha de asignación de documentos, etc.\n\nTabla de Estaus\n\n| Estatus | Valor | Comentario |\n| --- | --- | --- |\n| Open | 1 | Abierto, puede agregar documentos |\n| Closed | 2 | Cerrado, no puede recibir documentos |\n| Approved | 3 | Aprobado, en espera de asignación de números de control |\n| Assigned | 4 | Asignado, ya los documentos le fueron asignados los numeros de control y quedan como documentos fiscales |\n| Canceled | 5 | Cancelado, los documentos del Ciclo seran eliminados, nunca seran documentos fiscales |\n\n### Aspectos Generales\n\n#### Documentos fiscales soportados (tipos de documento)\n\nActualmente el Sistema soporta los siguientes documentos fiscales: Facturas, Notas de Credito, Notas de Debito, Guias de Despacho y Comprobantes de Retención de IVA e ISLR.\n\n#### Numeros de documento\n\nCada documento emitido por la Empresa debe tener una numeración unica por tipo de documento asi tenemos que por ejemplo si emitimos 3 facturas, 2 notas de credito y 1 notas de debito, todos por primera vez las numeraciones quedarian de la siguiente forma:\n\n| Tipo | Fecha | Numero |\n| --- | --- | --- |\n| Factura | 01/01/2023 | 1 |\n| Factura | 01/01/2023 | 2 |\n| Factura | 01/01/2023 | 3 |\n| Nota de Crédito | 01/01/2023 | 1 |\n| Nota de Crédito | 01/01/2023 | 2 |\n| Nota de Débito | 01/01/2023 | 1 |\n\nComo verán en la tabla anterior cada tipo de documento tiene su propia numeración, es decir su propio correlativo que en la medida que se emite el documento debe incrementarse el número.\n\nEsta responsabilidad de manejar la numeración del documento por defeto es de la Empresa y no de la Imprenta Digital, sin embargo, también puede delegarse en la Imprenta solicitando la configuración.\n\nEl envio de documentos hacia la imprenta debe realizarse en estricto orden de numeración de forma ascedente por tipo de documento y serie.\n\n#### Numeros de Control\n\nEl número de control es un entero generado por la Imprenta Digital y asignado a cada Documento fiscal emitido por la Empresa que contrata los servicios de facturación digital. Este número es unico e irrepetible independientemente del tipo de documento emitido.\n\nContinuando con el ejemplo de Numeros de documento\n\n| Tipo | Fecha | Numero | Numero de Control |\n| --- | --- | --- | --- |\n| Factura | 01/01/2023 | 1 | 1 |\n| Factura | 01/01/2023 | 2 | 2 |\n| Factura | 01/01/2023 | 3 | 3 |\n| Nota de Crédito | 01/01/2023 | 1 | 4 |\n| Nota de Crédito | 01/01/2023 | 2 | 5 |\n| Nota de Débito | 01/01/2023 | 1 | 6 |\n\nComo verán el numero de control es un correlativo independiente del número de documento.\n\n**NOTA:** La asignación de los números de control no son de manera inmediata, pueden tardar en un intervalo de 1-5 minutos, asi está la asignación de números de control ahorita pero, estamos mejorando cada día más para que los números de control se asignen de forma inmediata.\n\n#### Talonarios digitales\n\nLa imprenta para gestionar los números de control utiliza la figura de talonarios digitales, los cuales agrupan una cantidad de numeros de control que sirven generalmente para cubrir el consumo de un mes de facturación.\n\nLos talonarios digitales son la representación digital de los talonarios de formas libres que comunmente se utilizan con las imprentas tradicionales. Todo talonario tiene una fecha de creación, un rango de numeros de control y una serie asociada.\n\nLos talonarios estan asociados a una serie, como veremos mas adelante toda Empresa tiene al menos una serie asociada que llamaremos serie en blanco o serie 0 (cero) las cuales representan un nivel de agrupación para los numeros de documentos.\n\n#### Series de facturación\n\nCuando una empresa tiene varios sistemas, o varias lineas de negocio, surge la necesidad de crear series de facturación. Las series de facturación permiten asociar una cantidad de numeros de control con una serie, por defecto al registrar la empresa dentro de la plataforma una serie en blanco es asociada automaticamente, de manera que todos los numeros de control creados se haran bajo esa serie.\n\nSi la empresa necesita tener mas de una serie, entonces la nueva serie se iniciara con la letra A.\n\nPara la creación de series debe plantear su caso al departamento Legal de Unidigital y luego de la aprobación sera creada la serie dentro del sistema.\n\nContinuando con el ejemplo para una Empresa que tiene la serie por defecto quedaria asi\n\n| Tipo | Fecha | Numero | Numero de Control | Serie |\n| --- | --- | --- | --- | --- |\n| Factura | 01/01/2023 | 1 | 1 | 0 |\n| Factura | 01/01/2023 | 2 | 2 | 0 |\n| Factura | 01/01/2023 | 3 | 3 | 0 |\n| Nota de Crédito | 01/01/2023 | 1 | 4 | 0 |\n| Nota de Crédito | 01/01/2023 | 2 | 5 | 0 |\n| Nota de Débito | 01/01/2023 | 1 | 6 | 0 |\n\nComo verán todos los documentos pertenecen a la Serie 0 (Cero) como le llamamos en Unidigital. La Serie 0 es la serie por defecto que se crea para todas las Empresas.\n\nEn la sección de talonarios digitales comentamos que todo talonario esta asociado a una serie, esto quiere decir que si la Empresa tiene mas de una serie entonces un talonario digital al ser creado debera especificarse para que serie se necesita.\n\nSupongamos que tenemos dos talonarios digitales, cada uno de 10 numeros de control, uno asociado para la serie 0 y otro para la serie A. Los talonarios se verian asi:\n\n| Serie | Numero de Control Desde | Numero de Control Hasta |\n| --- | --- | --- |\n| 0 | 1 | 10 |\n| A | 11 | 20 |\n\nEstos talonarios pueden ser usados en paralelo, y la creación de la serie permite que tengamos nuevos consecutivos para los tipos de documentos. Usemos un ejemplo para entender.\n\nAhora que tenemos dos talonarios una para la serie 0 y otro para la serie A, queremos crear 3 facturas para la serie 0, 2 notas de debito para la serie 0, 5 facturas para la serie A y 5 notas de credito para la serie A, ¿Como quedarian los numeros de documentos y numeros de control? Observemos:\n\n| Tipo | Fecha | Numero de Documento | Numero de Control | Serie |\n| --- | --- | --- | --- | --- |\n| Factura | 01/01/2023 | 1 | 1 | 0 |\n| Factura | 01/01/2023 | 2 | 2 | 0 |\n| Factura | 01/01/2023 | 3 | 3 | 0 |\n| Nota de Débito | 01/01/2023 | 1 | 4 | 0 |\n| Nota de Débito | 01/01/2023 | 2 | 5 | 0 |\n| Factura | 01/01/2023 | 1 | 11 | A |\n| Factura | 01/01/2023 | 2 | 12 | A |\n| Factura | 01/01/2023 | 3 | 13 | A |\n| Factura | 01/01/2023 | 4 | 14 | A |\n| Factura | 01/01/2023 | 5 | 15 | A |\n| Nota de Crédito | 01/01/2023 | 1 | 16 | A |\n| Nota de Crédito | 01/01/2023 | 2 | 17 | A |\n| Nota de Crédito | 01/01/2023 | 3 | 18 | A |\n| Nota de Crédito | 01/01/2023 | 4 | 19 | A |\n| Nota de Crédito | 01/01/2023 | 5 | 20 | A |\n\nSi observan con detalle, la numeración de los documentos por serie y por tipo de documento es independiente pudiendo entonces tener una factura con numero 1 para la serie 0 y tambien en la serie A. Adicionalmente los numeros de control se van usando en la medida que son requeridos por la serie, sin embargo estos nunca se repiten.\n\n##### Notas\n\n- En la mayoria de los casos una Serie sera suficiente para cubrir las necesidades de las empresas.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"7522266","collectionId":"8f134a9b-dd61-4f05-885b-ef48363f9bcb","publishedId":"2sAXqwXec7","public":true,"publicUrl":"https://docs.unidigital.global","privateUrl":"https://go.postman.co/documentation/7522266-8f134a9b-dd61-4f05-885b-ef48363f9bcb","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-single-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.1","publishDate":"2024-09-25T16:21:26.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[{"name":"DI - Core Environment","id":"32c46d94-91a7-492e-8002-29c68bd4d24f","owner":"35088856","values":[{"key":"core_url","value":"https://qa.unidigital.global/digitalinvoice-core","enabled":true,"type":"default"},{"key":"unidigital_jwt","value":"","enabled":true,"type":"secret"},{"key":"var_user_name","value":"api@unidigital.global","enabled":true,"type":"secret"},{"key":"var_user_password","value":"2c106755c7044dc379574bc7e694af23d339fe1ad8a8fe45d7b792e2c7ee4b81d01c675a6b6dbf0f32bd52e82b114817f5d7b9f35e1aca47f8c8ddd1f7d7232e","enabled":true,"type":"secret"},{"key":"var_company_current_working_batch","value":"","enabled":true,"type":"secret"},{"key":"var_company_serie_strongid","value":"","enabled":true,"type":"secret"},{"key":"var_company_template_name","value":"","enabled":true,"type":"secret"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/8bc0dd0e4b6b383733a7d8272fba1a07bbf6f0cff1e8d943e0d147cda0d4da89","favicon":"https://unidigital.global/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"DI - Core Environment","value":"35088856-32c46d94-91a7-492e-8002-29c68bd4d24f"}],"canonicalUrl":"https://docs.unidigital.global/view/metadata/2sAXqwXec7"}