GraphQL · ¿Quién está detrás?
Sociedades y grupos
En qué sociedades participa un RUT, quiénes participan en él y el grupo que se arma siguiendo esas participaciones. 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.
POST /graphql
Sociedades y socios, junto a la ficha
sociedades es un BLOQUE con costo propio dentro de contribuyente: pedirlo descuenta dos consultas, como /v1/rut/{rut}/sociedades. Con razon_social al lado se paga además la ficha: tres en total. Sin ningún otro campo, solo dos.
La ficha (una) más el bloque de sociedades (dos): tres consultas.
{
contribuyente(rut: "61.704.000-K") {
razon_social
sociedades {
participaciones { rut razon_social participacion }
socios { rut }
personas_naturales { participacion }
}
}
}
# consulta.graphql = el bloque de arriba (jq lo empaqueta)
curl -s -i https://api.datario.cl/graphql \
-H "Authorization: Bearer dtr_TU_KEY" \
-H "Content-Type: application/json" \
--data "{\"query\": $(jq -Rs . consulta.graphql)}"
import requests
query = open("consulta.graphql").read()
r = requests.post(
"https://api.datario.cl/graphql",
json={"query": query},
headers={"Authorization": "Bearer dtr_TU_KEY"},
timeout=10,
)
cuerpo = r.json()
for e in cuerpo.get("errors", []):
print(e["extensions"]["code"], e["message"])
print(cuerpo.get("data"))
consumo = cuerpo["extensions"]["consumo"]
print(consumo["consultas_cobradas"], "cobradas")
import { readFileSync } from "node:fs";
const query = readFileSync("consulta.graphql", "utf8");
const r = await fetch("https://api.datario.cl/graphql", {
method: "POST",
headers: {
"Authorization": "Bearer dtr_TU_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ query }),
});
const cuerpo = await r.json();
for (const e of cuerpo.errors ?? []) {
console.error(e.extensions.code, e.message);
}
console.log(cuerpo.data);
console.log(cuerpo.extensions.consumo);
La respuesta, con su consumo
{
"data": {
"contribuyente": {
"razon_social": "CORP NACIONAL DEL COBRE DE CHILE",
"sociedades": {
"participaciones": [
{
"rut": "76028880-2",
"razon_social": "SOCIEDAD CONTRACTUAL MINERA PUREN",
"participacion": 35.0
},
{
"rut": "76148338-2",
"razon_social": "SOCIEDAD DE PROCESAMIENTO DE MOLIBDENO SPA",
"participacion": 100.0
}
],
"socios": [],
"personas_naturales": null
}
}
},
"extensions": {
"consumo": {
"consultas_cobradas": 3,
"ruts_resueltos": 1,
"paginas_busqueda": 0,
"plan_restante": 19997,
"saldo_restante": 0,
"por_operacion": {
"ficha": 1,
"sociedades": 2
}
}
}
}
POST /graphql
El grupo, solo
grupos(saltos) es el otro bloque con costo propio: cinco consultas, como /v1/rut/{rut}/grupos. Esta query no pide ningún campo de la ficha, así que descuenta exactamente esas cinco.
Solo el bloque del grupo: cinco consultas, sin la ficha.
{
contribuyente(rut: "61.704.000-K") {
grupos(saltos: 2) {
empresas { rut razon_social distancia }
truncado
}
}
}
# consulta.graphql = el bloque de arriba (jq lo empaqueta)
curl -s -i https://api.datario.cl/graphql \
-H "Authorization: Bearer dtr_TU_KEY" \
-H "Content-Type: application/json" \
--data "{\"query\": $(jq -Rs . consulta.graphql)}"
import requests
query = open("consulta.graphql").read()
r = requests.post(
"https://api.datario.cl/graphql",
json={"query": query},
headers={"Authorization": "Bearer dtr_TU_KEY"},
timeout=10,
)
cuerpo = r.json()
for e in cuerpo.get("errors", []):
print(e["extensions"]["code"], e["message"])
print(cuerpo.get("data"))
consumo = cuerpo["extensions"]["consumo"]
print(consumo["consultas_cobradas"], "cobradas")
import { readFileSync } from "node:fs";
const query = readFileSync("consulta.graphql", "utf8");
const r = await fetch("https://api.datario.cl/graphql", {
method: "POST",
headers: {
"Authorization": "Bearer dtr_TU_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ query }),
});
const cuerpo = await r.json();
for (const e of cuerpo.errors ?? []) {
console.error(e.extensions.code, e.message);
}
console.log(cuerpo.data);
console.log(cuerpo.extensions.consumo);
La respuesta, con su consumo
{
"data": {
"contribuyente": {
"grupos": {
"empresas": [
{
"rut": "76063022-5",
"razon_social": "INCA DE ORO S.A.",
"distancia": 1
},
{
"rut": "76092641-8",
"razon_social": "PANAUST MINERA IDO LIMITADA",
"distancia": 2
}
],
"truncado": true
}
}
},
"extensions": {
"consumo": {
"consultas_cobradas": 5,
"ruts_resueltos": 0,
"paginas_busqueda": 0,
"plan_restante": 19995,
"saldo_restante": 0,
"por_operacion": {
"grupos": 5
}
}
}
}
Probar en la consola Este producto por REST Este producto por SOAP Este producto por MCP Qué es Sociedades y grupos