REST · ¿Cómo se llama la empresa que busco?
Búsqueda de empresas
Encuentra personas jurídicas por razón social, giro, comuna o región, con la forma correcta de un nombre mal escrito. Los ejemplos de abajo son la petición y la respuesta real de cada operación, no una aproximación.
Lo que descuenta cada operación es lo mismo por REST, SOAP, GraphQL y MCP —pagas por el dato, no por el protocolo—; la tabla completa está en Empezar.
GET /v1/empresas
Búsqueda de empresas
Encuentra personas jurídicas por razón social, giro, comuna o región — para cuando tienes el nombre y te falta el RUT. El texto se busca DENTRO de la razón social; con modo=empieza se busca al principio, que es mucho más rápido y ordena alfabéticamente. Cada página descuenta una consulta —cueste lo que cueste el camino— y la ficha completa de cada resultado se pide después por RUT. Si el texto parece mal escrito, sugerencia trae la forma que sí está en el padrón.
Parámetros
| Parámetro | Tipo | Qué es |
|---|---|---|
razon_social | string | Texto a buscar en la razón social, sin distinguir mayúsculas ni tildes. Mínimo 3 caracteres. Dónde se busca lo decide modo. |
modo | string | contiene (por defecto) busca el texto en cualquier parte de la razón social y ordena por parecido. empieza lo busca solo al principio, ordena alfabéticamente y responde mucho más rápido. Los dos paginan igual y cuestan lo mismo: una consulta por página. |
actividad | integer | Código numérico del giro (el mismo codigo de las actividades). |
comuna | string | Comuna de la casa matriz o de una sucursal, tal como la escribe el SII. |
region | string | Región del domicilio, tal como la escribe el SII. |
limite | integer | Resultados por página: 1 a 50. Por defecto 50. |
pagina | string | El pagina_siguiente de la respuesta anterior. Lleva los filtros adentro —modo y los tres de tamaño incluidos—: o no los repites, o los repites todos iguales. |
tramo_minimo | integer | Tramo de ventas mínimo, 1 a 13 (el tramo_ventas.codigo de la ficha), según el último año comercial publicado. Refina una búsqueda: solo no la define, y deja fuera a quien la nómina anual no trae. |
trabajadores_minimo | integer | Trabajadores mínimos según el último año comercial publicado. Refina una búsqueda: solo no la define. |
vigentes | boolean | true deja solo las empresas sin término de giro ante el SII. Refina una búsqueda: solo no la define. |
Lo que devuelve
| Campo | Tipo | Qué es |
|---|---|---|
resultados | array | La página de coincidencias. Vacía si no hay: eso también es respuesta. |
hay_mas | boolean | true si quedan más resultados por pedir. |
pagina_siguiente | string | Pásalo tal cual en pagina para pedir la siguiente. null cuando no hay más. Lleva los filtros adentro: no los repitas distintos. |
fuente | string | De dónde salen los datos de esta respuesta, en texto listo para citar («Nóminas públicas de contribuyentes, SII»). Es constante para esta llamada: guárdalo una vez y no lo parsees. |
padron_publicado | string | Qué versión de los datos respondió. ISO 8601 con hora y zona (2026-08-05T15:36:37+00:00), siempre en UTC. |
consultado_en | string | Cuándo se respondió esta llamada. ISO 8601 con hora y zona (2026-08-05T15:36:37+00:00), siempre en UTC. |
sugerencia | string | La forma bien escrita del texto que buscaste, cuando el que mandaste parece tener un error de tipeo («FARMACIA» para «FARMASIA»); null si no hay ninguna. Puede venir aunque haya resultados. Se pide como una búsqueda nueva con ese razon_social, y esa página descuenta su consulta como cualquier otra. |
Dentro de resultados
| Campo | Tipo | Qué es |
|---|---|---|
rut | string | El RUT, normalizado: con guion y sin puntos. Pide la ficha con él. |
rut_formateado | string | El mismo RUT listo para mostrar. |
razon_social | string | El nombre legal, para que quien busca reconozca cuál es. |
comuna | string | Comuna de su casa matriz, para desempatar nombres parecidos. |
region | string | Región de su casa matriz. |
tramo_ventas | integer | El tramo de ventas del último año comercial, 1 a 13 (la leyenda va en la ficha). null si la nómina anual no lo trae. |
trabajadores | integer | Los trabajadores del último año comercial. null si la nómina anual no lo trae. |
Cuándo responde cada cosa
- 200 Hay página que devolver — también cuando viene vacía: «no hay coincidencias» es información. Descuenta una consulta.
- 401 No mandaste el header, o no empieza con dtr_. No descuenta.
- 401 La key viajó bien pero ya no sirve: la revocaste o la rotaste. No descuenta.
- 422 Pediste la búsqueda sin ningún filtro. La API no lista el padrón entero. No descuenta.
- 422 El texto es tan corto que calzaría con medio padrón. No se cobra: no hubo búsqueda. No descuenta.
- 422 El texto pasa de cien caracteres, y ninguna razón social del padrón se acerca a esa cifra. No se cobra: no hubo búsqueda. No descuenta.
-
422
El giro se filtra por su código (el mismo
codigode las actividades), no por texto. No descuenta. -
422
modollegó con un valor que no es ninguno de los dos. No descuenta. - 422 El tramo mínimo no es un código de la leyenda del SII. No se cobra: no hubo búsqueda. No descuenta.
- 422 El mínimo de trabajadores no es un entero. No se cobra: no hubo búsqueda. No descuenta.
-
422
vigentesllegó con otra cosa: unsino se lee como verdadero en silencio. No descuenta. -
422
limitequedó fuera del rango publicado. No se cobra: no hubo búsqueda. No descuenta. - 422 El token de página llegó adulterado o incompleto. Se pide de nuevo desde la primera. No descuenta.
-
422
Con
pagina, los filtros van DENTRO del token. Idénticos se aceptan; distintos no. No descuenta. - 503 El padrón todavía no tiene datos que responder. Es excepcional: reintenta más tarde y, si sigue, mira el estado del servicio. No descuenta.
- 503 La búsqueda superó su techo de tiempo. No descuenta. Pasa con un texto muy común: acótalo o agrega un filtro de giro, comuna o región. No descuenta.
-
429
Fuiste más rápido que las consultas por minuto de tu plan.
Retry-Afterdice cuánto esperar. No descuenta. - 402 Se agotaron las consultas del plan y no hay saldo de recargas. Las consultas se detienen hasta que renueven. No descuenta.
- 402 Se agotaron las consultas del plan, hay saldo de recargas, y el interruptor «usar mi saldo automáticamente» está apagado. Nada se cobra. No descuenta.
curl -s -i -H "Authorization: Bearer dtr_TU_KEY" \
https://api.datario.cl/v1/empresas?razon_social=cobre
import requests
r = requests.get(
"https://api.datario.cl/v1/empresas?razon_social=cobre",
headers={"Authorization": "Bearer dtr_TU_KEY"},
timeout=10,
)
cuerpo = r.json()
if r.status_code != 200:
raise SystemExit(f"{cuerpo['error']}: {cuerpo['detail']}")
print(cuerpo["resultados"][0]["razon_social"])
print(r.headers.get("X-Plan-Remaining"), "restantes")
const r = await fetch(
"https://api.datario.cl/v1/empresas?razon_social=cobre",
{ headers: { "Authorization": "Bearer dtr_TU_KEY" } },
);
const cuerpo = await r.json();
if (!r.ok) {
if (r.status === 429) {
const s = r.headers.get("Retry-After");
throw new Error(`Reintenta en ${s} s`);
}
throw new Error(`${cuerpo.error}: ${cuerpo.detail}`);
}
console.log(cuerpo.resultados[0].razon_social);
<?php
$ch = curl_init(
"https://api.datario.cl/v1/empresas?razon_social=cobre"
);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer dtr_TU_KEY"],
]);
$cuerpo = json_decode(curl_exec($ch), true);
$estado = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($estado !== 200) {
throw new Exception(
$cuerpo["error"] . ": " . $cuerpo["detail"]
);
}
echo $cuerpo["resultados"][0]["razon_social"];
using var http = new HttpClient();
http.DefaultRequestHeaders.Add(
"Authorization", "Bearer dtr_TU_KEY");
var r = await http.GetAsync(
"https://api.datario.cl/v1/empresas?razon_social=cobre");
var raiz = JsonDocument.Parse(
await r.Content.ReadAsStringAsync()).RootElement;
if (!r.IsSuccessStatusCode)
{
throw new Exception(
raiz.GetProperty("error").GetString() + ": " +
raiz.GetProperty("detail").GetString());
}
var item = raiz.GetProperty("resultados")[0];
Console.WriteLine(
item.GetProperty("razon_social").GetString());
var req = HttpRequest.newBuilder()
.uri(URI.create(
"https://api.datario.cl/v1/empresas?razon_social=cobre"))
.header("Authorization", "Bearer dtr_TU_KEY")
.build();
var r = HttpClient.newHttpClient()
.send(req, BodyHandlers.ofString());
if (r.statusCode() != 200) {
// El cuerpo trae siempre {error, detail}.
throw new IOException(r.body());
}
System.out.println(r.body());
req, _ := http.NewRequest("GET",
"https://api.datario.cl/v1/empresas?razon_social=cobre", nil)
req.Header.Set("Authorization", "Bearer dtr_TU_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
var e struct {
Error string `json:"error"`
Detail string `json:"detail"`
}
json.NewDecoder(res.Body).Decode(&e)
log.Fatalf("%s: %s", e.Error, e.Detail)
}
var cuerpo map[string]any
json.NewDecoder(res.Body).Decode(&cuerpo)
fmt.Println(cuerpo["resultados"])
uri = URI("https://api.datario.cl/v1/empresas?razon_social=cobre")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer dtr_TU_KEY"
res = Net::HTTP.start(
uri.host, uri.port, use_ssl: uri.scheme == "https"
) { |h| h.request(req) }
cuerpo = JSON.parse(res.body)
unless res.code == "200"
raise "#{cuerpo['error']}: #{cuerpo['detail']}"
end
puts cuerpo["resultados"][0]["razon_social"]
Set Variable [ $url ; Value:
"https://api.datario.cl/v1/empresas?razon_social=cobre" ]
Insert from URL [ Select ; With dialog: Off ; Target: $r ;
$url ; cURL options:
"-H \"Authorization: Bearer dtr_TU_KEY\"" ]
Set Variable [ $e ; Value: JSONGetElement ( $r ; "error" ) ]
If [ not IsEmpty ( $e ) ]
Show Custom Dialog [ $e & ": " &
JSONGetElement ( $r ; "detail" ) ]
Exit Script [ Text Result: $e ]
End If
Show Custom Dialog [
JSONGetElement ( $r ; "resultados[0].razon_social" ) ]
Respuestas
{
"resultados": [
{
"rut": "61704000-K",
"rut_formateado": "61.704.000-K",
"razon_social": "CORP NACIONAL DEL COBRE DE CHILE",
"comuna": "SANTIAGO",
"region": "XIII REGION METROPOLITANA",
"tramo_ventas": 13,
"trabajadores": 16946
}
],
"hay_mas": true,
"pagina_siguiente": "eyJsciI6IjYxNzA0In0.q1w2e3",
"fuente": "Nóminas públicas de contribuyentes, SII",
"padron_publicado": "2026-08-05T15:36:37+00:00",
"consultado_en": "2026-08-29T04:12:07+00:00",
"sugerencia": null
}
Headers: X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset X-Plan-Limit X-Plan-Remaining X-Plan-Reset X-Credits-Remaining
{
"error": "api_key_invalida",
"detail": "Falta la API key: envíala en el header Authorization: Bearer dtr_…."
}
{
"error": "api_key_invalida",
"detail": "La API key no existe o fue revocada."
}
{
"error": "parametros_invalidos",
"detail": "Indica al menos un filtro: razon_social, actividad, comuna o region."
}
{
"error": "parametros_invalidos",
"detail": "razon_social necesita al menos 3 caracteres."
}
{
"error": "parametros_invalidos",
"detail": "razon_social admite hasta 100 caracteres."
}
{
"error": "parametros_invalidos",
"detail": "actividad debe ser el código numérico del giro."
}
{
"error": "parametros_invalidos",
"detail": "modo debe ser contiene o empieza."
}
{
"error": "parametros_invalidos",
"detail": "tramo_minimo debe ser un entero entre 1 y 13."
}
{
"error": "parametros_invalidos",
"detail": "trabajadores_minimo debe ser un entero mayor o igual a 0."
}
{
"error": "parametros_invalidos",
"detail": "vigentes debe ser true o false."
}
{
"error": "parametros_invalidos",
"detail": "limite debe ser un entero entre 1 y 50."
}
{
"error": "parametros_invalidos",
"detail": "pagina no es válida: pide la primera página sin ese parámetro."
}
{
"error": "parametros_invalidos",
"detail": "pagina ya lleva los filtros: no los repitas distintos."
}
{
"error": "padron_no_disponible",
"detail": "El padrón aún no está cargado; intenta más tarde. Estado del servicio: https://status.datario.cl"
}
{
"error": "busqueda_expirada",
"detail": "La búsqueda tardó demasiado: acota el texto o agrega un filtro de giro, comuna o región. Si sigue fallando, mira https://status.datario.cl"
}
{
"error": "limite_de_velocidad",
"detail": "Superaste las consultas por minuto de tu plan: X-RateLimit-Limit dice cuántas y Retry-After cuánto esperar."
}
Headers: X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset Retry-After
{
"error": "sin_saldo",
"detail": "Se acabaron las consultas de tu plan y no te queda saldo. Renuevan el día que tu plan cumple el mes (X-Plan-Reset); para seguir ahora, recarga saldo (no vence) en https://datario.cl/panel/packs, o contrata el plan de ese mismo volumen en https://datario.cl/panel/planes, que sale más barato por consulta"
}
Headers: X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset
{
"error": "saldo_protegido",
"detail": "Las consultas del plan no alcanzan y tu saldo está protegido (pediste no gastarlo automáticamente): actívalo en https://datario.cl/panel/configuracion/avisos o renueva tu plan"
}
Headers: X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset
Probar en la consola Este producto por SOAP Este producto por GraphQL Este producto por MCP Qué es Búsqueda de empresas