Este sitio NO es oficial y NO pertenece a la DGII. La información mostrada es de carácter público y se ofrece con fines informativos.

Volver a la consulta

API para Desarrolladores

Ofrecemos una API REST pública y gratuita para consultar el Registro Nacional de Contribuyentes (RNC) de la DGII de República Dominicana. Ideal para integrar verificación de RNC en tus aplicaciones, sistemas contables, ERPs o cualquier proyecto.

Gratuita
Sin autenticación requerida
REST / JSON
Datos actualizados diariamente

Actualización de Datos

La base de datos del RNC se actualiza automáticamente cada día en la madrugada con la información más reciente publicada por la DGII. Esto garantiza que las consultas reflejen los datos oficiales más actualizados disponibles.

Automática: Cada madrugada
Manual: Disponible vía API bajo demanda

Documentación Interactiva (Swagger)

Explora y prueba todos los endpoints directamente desde la documentación interactiva de Swagger. Puedes ejecutar consultas en tiempo real sin necesidad de escribir código.

Abrir Swagger UI

URL Base

https://api.directoriornc.com/api/DGII

Todas las peticiones son GET y devuelven JSON. No se requiere autenticación ni API key. CORS está habilitado para peticiones GET desde el navegador.

Límites de uso: 60 solicitudes por minuto y 10,000 por día, por dirección IP. Si los superas, la API responde HTTP 429 con la cabecera Retry-After (segundos de espera).

Servicio gratuito y no oficial: usa datos públicos de la DGII, sin garantía de disponibilidad. ¿Necesitas más volumen? Escríbenos a [email protected]. Guía de integración: cómo integrar la consulta de RNC. Al usar la API aceptas los términos de uso.

Endpoints Disponibles

GET/api/DGII/{rnc}

Busca un contribuyente por su número de RNC o cédula. Devuelve un resultado exacto.

Ejemplo de uso

GET https://api.directoriornc.com/api/DGII/132790316

Respuesta exitosa

{
  "rnc": "132790316",
  "nombreCompleto": "OSCARSOFT SRL",
  "nombreComercial": "OSCARSOFT",
  "actividad": "PLANIFICACIÓN Y DISEÑO DE LOS",
  "fechaRegistro": "14/11/2022",
  "estado": "ACTIVO",
  "categoria": "RST"
}
GET/api/DGII/GetByName/{nombre}

Busca un contribuyente por su nombre exacto (razón social completa).

Ejemplo de uso

GET https://api.directoriornc.com/api/DGII/GetByName/Oscarsoft

Respuesta exitosa

{
  "rnc": "132790316",
  "nombreCompleto": "OSCARSOFT SRL",
  "nombreComercial": "OSCARSOFT",
  "actividad": "PLANIFICACIÓN Y DISEÑO DE LOS",
  "fechaRegistro": "14/11/2022",
  "estado": "ACTIVO",
  "categoria": "RST"
}
GET/api/DGII/search/{criterio}

Busca contribuyentes que coincidan con el criterio de búsqueda. Retorna hasta 10 resultados.

Ejemplo de uso

GET https://api.directoriornc.com/api/DGII/search/Oscarsof

Respuesta exitosa

[
  {
    "rnc": "132790316",
    "nombreCompleto": "OSCARSOFT SRL",
    "nombreComercial": "OSCARSOFT",
    "actividad": "PLANIFICACIÓN Y DISEÑO DE LOS",
    "fechaRegistro": "14/11/2022",
    "estado": "ACTIVO",
    "categoria": "RST"
  },
  ...
]

Campos de Respuesta

CampoTipoDescripción
rncstringNúmero de RNC o cédula
nombreCompletostringRazón social o nombre completo
nombreComercialstringNombre comercial del negocio
actividadstringActividad económica registrada
fechaRegistrostringFecha de registro (DD/MM/YYYY)
estadostringEstado del contribuyente (ACTIVO, SUSPENDIDO, etc.)
categoriastringCategoría tributaria (NORMAL, RST, etc.)

Ejemplos de Integración

JavaScript / Fetch

const response = await fetch(
  'https://api.directoriornc.com/api/DGII/132790316'
);
const data = await response.json();
console.log(data.nombreCompleto); // "OSCARSOFT SRL"

Python

import requests

response = requests.get(
    'https://api.directoriornc.com/api/DGII/132790316'
)
data = response.json()
print(data['nombreCompleto'])  # "OSCARSOFT SRL"

cURL

curl https://api.directoriornc.com/api/DGII/132790316

C# / .NET

using var client = new HttpClient();
var response = await client.GetAsync(
    "https://api.directoriornc.com/api/DGII/132790316"
);
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);

Visual FoxPro 9

*==========================================================================
* ConsultaRnc.prg - Consulta de RNC (API gratuita directoriornc.com)
* Compatible con Visual FoxPro 8 y 9. Requiere Windows con TLS 1.2.
*
* Uso:
*   SET PROCEDURE TO ConsultaRnc.prg ADDITIVE
*   loEmp = ConsultarRnc("132790316")
*   IF loEmp.Ok
*      ? loEmp.NombreCompleto, loEmp.Estado
*   ELSE
*      ? loEmp.Mensaje
*   ENDIF
*==========================================================================

FUNCTION ConsultarRnc
LPARAMETERS tcRnc
LOCAL loHttp, lcJson, lcRnc, loEmp, loEx, lcRetry

* Quita guiones y espacios del RNC o cedula
lcRnc = STRTRAN(STRTRAN(ALLTRIM(tcRnc), "-", ""), " ", "")

loEmp = CREATEOBJECT("Empty")
ADDPROPERTY(loEmp, "Ok", .F.)             && .T. si se encontro el contribuyente
ADDPROPERTY(loEmp, "Status", 0)           && codigo HTTP (200, 404, 429...)
ADDPROPERTY(loEmp, "Mensaje", "")         && texto de error, si lo hay
ADDPROPERTY(loEmp, "Rnc", "")
ADDPROPERTY(loEmp, "NombreCompleto", "")
ADDPROPERTY(loEmp, "NombreComercial", "")
ADDPROPERTY(loEmp, "Actividad", "")
ADDPROPERTY(loEmp, "FechaRegistro", "")
ADDPROPERTY(loEmp, "Estado", "")
ADDPROPERTY(loEmp, "Categoria", "")

TRY
   loHttp = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")
   loHttp.Open("GET", "https://api.directoriornc.com/api/DGII/" + lcRnc, .F.)
   loHttp.SetTimeouts(10000, 10000, 15000, 15000)
   loHttp.Send()
   loEmp.Status = loHttp.Status

   DO CASE
   CASE loHttp.Status = 200
      lcJson = loHttp.ResponseText
      loEmp.Ok              = .T.
      loEmp.Rnc             = JsonStr(lcJson, "rnc")
      loEmp.NombreCompleto  = JsonStr(lcJson, "nombreCompleto")
      loEmp.NombreComercial = JsonStr(lcJson, "nombreComercial")
      loEmp.Actividad       = JsonStr(lcJson, "actividad")
      loEmp.FechaRegistro   = JsonStr(lcJson, "fechaRegistro")
      loEmp.Estado          = JsonStr(lcJson, "estado")
      loEmp.Categoria       = JsonStr(lcJson, "categoria")
   CASE loHttp.Status = 404
      loEmp.Mensaje = "El RNC no figura en el registro."
   CASE loHttp.Status = 429
      lcRetry = loHttp.GetResponseHeader("Retry-After")
      loEmp.Mensaje = "Limite de uso alcanzado. Reintente en " + lcRetry + " segundos."
   OTHERWISE
      loEmp.Mensaje = "Error del servicio: HTTP " + TRANSFORM(loHttp.Status)
   ENDCASE
CATCH TO loEx
   * Sin conexion, sin TLS 1.2 en Windows viejo, tiempo agotado, etc.
   loEmp.Mensaje = loEx.Message
ENDTRY

RETURN loEmp
ENDFUNC

*--------------------------------------------------------------------------
* JsonStr: devuelve el valor de texto de una clave de un JSON plano.
* Maneja comillas escapadas (\") y secuencias \uXXXX.
*--------------------------------------------------------------------------
FUNCTION JsonStr
LPARAMETERS tcJson, tcKey
LOCAL lcPat, lnPos, lnLen, lcOut, lcCh, lcNext, lnCode

lcPat = '"' + tcKey + '":"'
lnPos = AT(lcPat, tcJson)
IF lnPos = 0
   RETURN ""
ENDIF

lnPos = lnPos + LEN(lcPat)
lnLen = LEN(tcJson)
lcOut = ""

DO WHILE lnPos <= lnLen
   lcCh = SUBSTR(tcJson, lnPos, 1)
   DO CASE
   CASE lcCh == '"'
      EXIT
   CASE lcCh == "\"
      lnPos = lnPos + 1
      lcNext = SUBSTR(tcJson, lnPos, 1)
      DO CASE
      CASE lcNext == "n"
         lcOut = lcOut + CHR(10)
      CASE lcNext == "r"
         lcOut = lcOut + CHR(13)
      CASE lcNext == "t"
         lcOut = lcOut + CHR(9)
      CASE lcNext == "u"
         * \uXXXX: se convierte a ANSI si cabe en un byte; si no, "?"
         lnCode = EVALUATE("0x" + SUBSTR(tcJson, lnPos + 1, 4))
         lcOut = lcOut + IIF(lnCode < 256, CHR(lnCode), "?")
         lnPos = lnPos + 4
      OTHERWISE
         lcOut = lcOut + lcNext
      ENDCASE
   OTHERWISE
      lcOut = lcOut + lcCh
   ENDCASE
   lnPos = lnPos + 1
ENDDO

RETURN lcOut
ENDFUNC

Descargar ConsultaRnc.prg

  • Probado en Visual FoxPro 9 SP2 y en VFP 10 (versión externa). Usa solo funciones de VFP 8 y 9 (TRY/CATCH, ADDPROPERTY, CREATEOBJECT).
  • VFP no trae soporte JSON; JsonStr extrae los campos de texto de la respuesta (comillas escapadas y \uXXXX incluidos).
  • En Windows 7 / Server 2008 R2 o anteriores, WinHTTP no usa TLS 1.2 por defecto y la llamada HTTPS falla hasta que se habilite (actualización KB 3140245 y la clave de registro DefaultSecureProtocols).

PowerShell

# Consulta de RNC - PowerShell (5.1 o superior)
# En Windows antiguos, active TLS 1.2 antes de llamar a la API:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

function Consultar-Rnc([string]$Rnc) {
    $Rnc = $Rnc -replace '[-\s]', ''
    try {
        return Invoke-RestMethod -Uri "https://api.directoriornc.com/api/DGII/$Rnc" -TimeoutSec 15
    }
    catch {
        $codigo = [int]$_.Exception.Response.StatusCode
        if ($codigo -eq 404) { return $null }                       # no existe
        if ($codigo -eq 429) {
            $espera = $_.Exception.Response.Headers['Retry-After']  # segundos
            throw "Limite de uso alcanzado. Reintente en $espera segundos."
        }
        throw
    }
}

$empresa = Consultar-Rnc "132790316"
if ($empresa) { "$($empresa.nombreCompleto) - $($empresa.estado)" } else { "No figura en el registro" }

VBScript / VBA (Excel, Access)

' Consulta de RNC - VBScript / VBA (Excel, Access, Word)
' Para VBA: agregue "Option Explicit" al inicio y declare los tipos si lo desea.

Function ValorJson(json, clave)
    Dim patron, p, q
    patron = """" & clave & """:"""
    p = InStr(json, patron)
    If p = 0 Then
        ValorJson = ""
        Exit Function
    End If
    p = p + Len(patron)
    q = InStr(p, json, """")
    ValorJson = Replace(Mid(json, p, q - p), "\""", """")
End Function

Function ConsultarRnc(rnc)
    Dim http, estado
    rnc = Replace(Replace(Trim(rnc), "-", ""), " ", "")
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    http.Open "GET", "https://api.directoriornc.com/api/DGII/" & rnc, False
    http.SetTimeouts 10000, 10000, 15000, 15000
    http.Send
    estado = http.Status
    If estado = 200 Then
        ConsultarRnc = http.ResponseText          ' JSON con los datos
    ElseIf estado = 404 Then
        ConsultarRnc = ""                         ' no figura en el registro
    ElseIf estado = 429 Then
        Err.Raise vbObjectError + 429, , "Limite de uso alcanzado. Reintente en " & _
            http.GetResponseHeader("Retry-After") & " segundos."
    Else
        Err.Raise vbObjectError + estado, , "Error del servicio: HTTP " & estado
    End If
End Function

Dim json
json = ConsultarRnc("132790316")
If json <> "" Then
    WScript.Echo ValorJson(json, "nombreCompleto") & " - " & ValorJson(json, "estado")
Else
    WScript.Echo "No figura en el registro"
End If

Notas Importantes

Gratuita y sin límites: La API es actualmente gratuita y de uso libre. No se requiere registro ni API key para usarla.

Datos públicos: La información proviene de la base de datos pública de la DGII. Puede haber caracteres especiales (ñ, tildes) con encoding no estándar en algunos registros.

Datos siempre frescos: La base de datos se sincroniza automáticamente con la DGII cada madrugada. Además, es posible forzar una actualización manual a través de la API cuando se requiera información al instante.

Uso responsable: Pedimos que hagas un uso responsable de la API. Evita hacer miles de peticiones por minuto. Si necesitas datos masivos, contáctanos.

¿Preguntas o sugerencias?

Contáctanos para reportar problemas, solicitar nuevos endpoints o colaborar en tu integración.