Flujo general de integración
Conoce el flujo completo de integración con el API de Polaris, desde la autenticación hasta el firmado y la validación de documentos electrónicos.
Este es el recorrido que debe seguir un desarrollador para integrar su sistema con la API de Polaris, desde la autenticación hasta la validación del resultado final de un Documento Electrónico.
Aunque Polaris cuenta con múltiples ambientes (dearrollo, pruebas DGII, certificación y producción), el flujo técnico de integración es el mismo. Solo cambia el valor del parámetro ambiente
.
🧩 Paso 1: Obtener el Authentication Token
El Authentication Token es generado desde el Portal Administrativo por un usuario administrativo. Este token es único por empresa y permite identificarla dentro de Polaris.
Si estás evaluando Polaris y no tienes acceso al portal, puedes usar un Authentication Token de desarrollo. Más información en Inicio rápido.
🔐 Paso 2: Obtener un Access Token
Usa el Authentication Token para solicitar un Access Token temporal (válido por 60 minutos). Este token es obligatorio para todas las demás operaciones.
- Endpoint:
/autenticacion/token
- Método:
GET
- Parámetro:
authtoken=...
- Ambiente: No requerido
Aquí te mostramos ejemplos de código para Obtener un Access Token.
📄 Ejemplos de código
const authToken = '<Mi Authentication Token>';
fetch(`https://api.polarisedi.com/autenticacion/token?authtoken=${authToken}`)
.then(res => res.json())
.then(data => {
const accessToken = data.token;
console.log('Access Token:', accessToken);
})
.catch(error => {
console.error('Error al obtener el Access Token:', error);
});
using System;
using System.Net.Http;
using System.Threading.Tasks;
public class PolarisAuth
{
public async Task ObtenerAccessTokenAsync()
{
var authToken = "<Mi Authentication Token>";
var url = $"https://api.polarisedi.com/autenticacion/token?authtoken={authToken}";
using var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine("Access Token JSON:");
Console.WriteLine(json);
}
else
{
Console.WriteLine($"Error: {response.StatusCode}");
}
}
}
curl.exe "https://api.polarisedi.com/autenticacion/token?authtoken=<Mi Authentication Token>"
📦 Paso 3: Preparar el Documento Electrónico
Desde tu sistema, debes generar el contenido del documento en formato JSON, respetando la estructura requerida por Polaris.
Cada tipo de documento tiene su propio esquema, el cual puedes consultar en la sección de Referencia del API.
Aquí te mostramos un ejemplo real de una Factura de Crédito Fiscal, formateado según cómo debe verse en cada lenguaje o herramienta.
📄 Ejemplos de Factura de Crédito Fiscal
const factura = {
eNCF: "E310000000007",
FechaEmision: "2022-08-31T00:00:00-06:00",
TipoIngreso: 1,
TipoPago: 2,
FechaVencimientoSecuencia: "2022-12-31T00:00:00",
IndicadorMontoGravado: 1,
FechaLimitePago: "2022-09-30T00:00:00-06:00",
RNCEmisor: "XXXX",
RazonSocialEmisor: "XXXX",
DireccionEmisor: "XXXX",
RNCComprador: "131880738",
RazonSocialComprador: "Simulador DGII",
Items: [
{
IndicadorFacturacion: 2,
Nombre: "Electricidad",
IndicadorBienOServicio: 2,
Cantidad: 100,
UnidadMedida: 43,
PrecioUnitario: 5000,
MontoItem: 500000
},
{
IndicadorFacturacion: 2,
Nombre: "Internet",
IndicadorBienOServicio: 2,
Cantidad: 120,
UnidadMedida: 43,
PrecioUnitario: 2500,
MontoItem: 300000
}
],
MontoGravadoTotal: 800000,
MontoGravadoI1: 800000,
ITBIS1: 18,
ITBIS2: 16,
ITBIS3: 0,
TotalITBIS: 144000,
TotalITBIS1: 144000,
MontoTotal: 944000,
MontoPeriodo: 944000
};
var jsonBody = @"{
""eNCF"": ""E310000000007"",
""FechaEmision"": ""2022-08-31T00:00:00-06:00"",
""TipoIngreso"": 1,
""TipoPago"": 2,
""FechaVencimientoSecuencia"": ""2022-12-31T00:00:00"",
""IndicadorMontoGravado"": 1,
""FechaLimitePago"": ""2022-09-30T00:00:00-06:00"",
""RNCEmisor"": ""XXXX"",
""RazonSocialEmisor"": ""XXXX"",
""DireccionEmisor"": ""XXXX"",
""RNCComprador"": ""131880738"",
""RazonSocialComprador"": ""Simulador DGII"",
""Items"": [
{
""IndicadorFacturacion"": 2,
""Nombre"": ""Electricidad"",
""IndicadorBienOServicio"": 2,
""Cantidad"": 100,
""UnidadMedida"": 43,
""PrecioUnitario"": 5000,
""MontoItem"": 500000
},
{
""IndicadorFacturacion"": 2,
""Nombre"": ""Internet"",
""IndicadorBienOServicio"": 2,
""Cantidad"": 120,
""UnidadMedida"": 43,
""PrecioUnitario"": 2500,
""MontoItem"": 300000
}
],
""MontoGravadoTotal"": 800000,
""MontoGravadoI1"": 800000,
""ITBIS1"": 18,
""ITBIS2"": 16,
""ITBIS3"": 0,
""TotalITBIS"": 144000,
""TotalITBIS1"": 144000,
""MontoTotal"": 944000,
""MontoPeriodo"": 944000
}";
# Guarda este contenido en un archivo llamado "factura.json"
{
"eNCF": "E310000000007",
"FechaEmision": "2022-08-31T00:00:00-06:00",
"TipoIngreso": 1,
"TipoPago": 2,
"FechaVencimientoSecuencia": "2022-12-31T00:00:00",
"IndicadorMontoGravado": 1,
"FechaLimitePago": "2022-09-30T00:00:00-06:00",
"RNCEmisor": "XXXX",
"RazonSocialEmisor": "XXXX",
"DireccionEmisor": "XXXX",
"RNCComprador": "131880738",
"RazonSocialComprador": "Simulador DGII",
"Items": [
{
"IndicadorFacturacion": 2,
"Nombre": "Electricidad",
"IndicadorBienOServicio": 2,
"Cantidad": 100,
"UnidadMedida": 43,
"PrecioUnitario": 5000,
"MontoItem": 500000
},
{
"IndicadorFacturacion": 2,
"Nombre": "Internet",
"IndicadorBienOServicio": 2,
"Cantidad": 120,
"UnidadMedida": 43,
"PrecioUnitario": 2500,
"MontoItem": 300000
}
],
"MontoGravadoTotal": 800000,
"MontoGravadoI1": 800000,
"ITBIS1": 18,
"ITBIS2": 16,
"ITBIS3": 0,
"TotalITBIS": 144000,
"TotalITBIS1": 144000,
"MontoTotal": 944000,
"MontoPeriodo": 944000
}
📝 Paso 4: Firmar el documento
Con el Access Token y el documento preparado, realiza una llamada POST
al endpoint correspondiente al tipo de documento.
Ejemplo: Firmar una Factura de Crédito Fiscal
- Endpoint:
/FacturasCreditoFiscal/Firmar
- Método:
POST
- Parámetros:
token=...
(Access Token)ambiente=...
(0, 1, 2 o 3)
- Cuerpo: JSON con los datos del documento
Aquí te mostramos ejemplo de código fuente para firmar una Factura de Crédito Fiscal.
📄 Ejemplos de código
// Se asume que el objeto "factura" ya fue definido en el Paso 3
const accessToken = '<Mi Authentication Token>';
const ambiente = 0;
fetch(`https://api.polarisedi.com/FacturasCreditoFiscal/Firmar?ambiente=${ambiente}&token=${accessToken}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(factura)
})
.then(res => res.json())
.then(data => {
console.log('Respuesta del firmado:', data);
})
.catch(error => {
console.error('Error al firmar:', error);
});
// Se asume que el contenido del documento ya fue definido como string en la variable "jsonBody"
using var client = new HttpClient();
var accessToken = "<Mi Authentication Token>";
var ambiente = 0;
var url = $"https://api.polarisedi.com/FacturasCreditoFiscal/Firmar?ambiente={ambiente}&token={accessToken}";
var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine("Respuesta del firmado:");
Console.WriteLine(result);
}
else
{
Console.WriteLine($"Error: {response.StatusCode}");
}
# Se asume que ya tienes el archivo "factura.json" generado en el Paso 3
curl.exe -X POST "https://api.polarisedi.com/FacturasCreditoFiscal/Firmar?ambiente=0&token=<Mi Authentication Token>" ^
-H "Content-Type: application/json" ^
-d "@factura.json"
La llamada a este endpoint no devuelve inmediatamente el resultado final. El documento queda en estado “En Espera”, y debe ser consultado en el siguiente paso.
🆔 Importante: TransaccionID
Al firmar un documento, Polaris te devuelve un identificador único llamado TransaccionID.
Este ID identifica únicamente ese documento dentro de Polaris y será requerido para cualquier operación posterior sobre él, como:
- Consultar el estado del firmado
- Auditar procesos
La empresa asociada se determina internamente a través del Access Token. El ambiente siempre debe ser incluido explícitamente como parámetro.
📥 Paso 5: Consultar el resultado del firmado
Una vez enviado el documento, debes consultar su resultado utilizando el TransaccionID
.
- Endpoint:
/ComprobantesElectronicos/ConsultarResultado
- Método:
GET
- Parámetros:
token=...
(Access Token)transaccionID=...
ambiente=...
(0, 1, 2 o 3)
Esta llamada devolverá el estado final del documento, incluyendo si fue firmado correctamente y, si corresponde, la respuesta oficial de la DGII.
Excepción: Para Facturas de Consumo menores a 250,000 pesos dominicanos, el resultado suele ser inmediato y puede recibirse en la misma respuesta de firmado.
Aquí te mostramos ejemplos de código para Consultar un Resultado de firmado.
📄 Ejemplos de código
const accessToken = '<Mi Authentication Token>';
const transaccionID = 'ID_DEVUELTO_AL_FIRMAR';
const ambiente = 0;
fetch(`https://api.polarisedi.com/ComprobantesElectronicos/ConsultarResultado?ambiente=${ambiente}&token=${accessToken}&transaccionID=${transaccionID}`)
.then(res => res.json())
.then(data => {
console.log('Resultado del documento:', data);
})
.catch(error => {
console.error('Error al consultar el resultado:', error);
});
using var client = new HttpClient();
var accessToken = "<Mi Authentication Token>";
var transaccionID = "ID_DEVUELTO_AL_FIRMAR";
var ambiente = 0;
var url = $"https://api.polarisedi.com/ComprobantesElectronicos/ConsultarResultado?ambiente={ambiente}&token={accessToken}&transaccionID={transaccionID}";
var response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine("Resultado del documento:");
Console.WriteLine(result);
}
else
{
Console.WriteLine($"Error: {response.StatusCode}");
}
curl.exe "https://api.polarisedi.com/ComprobantesElectronicos/ConsultarResultado?ambiente=0&token=<Mi Authentication Token>&transaccionID=ID_DEVUELTO_AL_FIRMAR"
🧠 Resumen del flujo
Paso | Acción | Requiere Portal | Requiere token | Respuesta inmediata |
---|---|---|---|---|
1 | Obtener Authentication Token | ✅ Sí | — | — |
2 | Obtener Access Token | ❌ No | ✅ Sí | ✅ |
3 | Preparar Documento | ❌ No | ✅ Sí | — |
4 | Firmar Documento | ❌ No | ✅ Sí | ❌ |
5 | Consultar resultado | ❌ No | ✅ Sí | ✅ (solo si aplica) |
Updated 11 days ago