GraphQL · ¿Qué cambió y cuándo?
Cambios e historial
Cada cambio de razón social, giro, domicilio o casilla, con cómo era antes y cómo quedó, por RUT o por publicación. 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
El historial de un RUT, solo
historial es un bloque con costo propio dentro de contribuyente: una consulta, como /v1/rut/{rut}/historial. Sin ningún otro campo, solo esa. Viene vacío mientras el RUT no haya cambiado desde historial_desde.
Solo el bloque del historial: una consulta, sin la ficha.
{
contribuyente(rut: "61.704.000-K") {
historial {
cambios { publicado aspecto tipo campos antes despues }
historial_desde
}
}
}
# 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": {
"historial": {
"cambios": [],
"historial_desde": null
}
}
},
"extensions": {
"consumo": {
"consultas_cobradas": 1,
"ruts_resueltos": 0,
"paginas_busqueda": 0,
"plan_restante": 19999,
"saldo_restante": 0,
"por_operacion": {
"historial": 1
}
}
}
}
POST /graphql
Los cambios del padrón entre dos días
cambios cuesta por cambio DEVUELTO, mínimo una consulta por página, como /v1/cambios: va sola en su query (no se mezcla con campos de costo fijo), desde es obligatorio y la página se lee hasta donde el plan y el saldo alcanzan. consultas_cobradas dice lo que costó de verdad.
La página vacía descuenta una; con cambios, uno por cada uno.
{
cambios(desde: "2026-08-01", hasta: "2026-08-31") {
cambios { rut razon_social publicado aspecto tipo campos }
hay_mas
pagina_siguiente
}
}
# 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": {
"cambios": {
"cambios": [],
"hay_mas": false,
"pagina_siguiente": null
}
},
"extensions": {
"consumo": {
"consultas_cobradas": 1,
"ruts_resueltos": 0,
"paginas_busqueda": 0,
"plan_restante": 19999,
"saldo_restante": 0,
"por_operacion": {
"cambios": 1
}
}
}
}
Probar en la consola Este producto por REST Este producto por SOAP Este producto por MCP Qué es Cambios e historial