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

PasoAcciónRequiere PortalRequiere tokenRespuesta inmediata
1Obtener Authentication Token✅ Sí
2Obtener Access Token❌ No✅ Sí
3Preparar Documento❌ No✅ Sí
4Firmar Documento❌ No✅ Sí
5Consultar resultado❌ No✅ Sí✅ (solo si aplica)