SOAP · ¿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 /soap/v1
ObtenerHistorial — Historial de un RUT
Qué cambió de ESTE RUT en el padrón y cuándo, del cambio más reciente al más antiguo: razón social, clasificación, giros, domicilios y casilla, cada uno con cómo era antes y cómo quedó. Personas con giro incluidas —por su RUT y solo así—, y también el RUT que ya salió del padrón: tiene historial y no ficha. La lista vacía también es respuesta: no cambió.
El RUT está en el padrón o tuvo cambios. Descuenta una consulta — como su gemelo REST.
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="https://api.datario.cl/soap/v1">
<soapenv:Header/>
<soapenv:Body>
<tns:ObtenerHistorial>
<tns:rut>61.704.000-K</tns:rut>
</tns:ObtenerHistorial>
</soapenv:Body>
</soapenv:Envelope>
curl -s -i https://api.datario.cl/soap/v1 \
-H "Authorization: Bearer dtr_TU_KEY" \
-H "Content-Type: text/xml; charset=utf-8" \
--data-binary @peticion.xml
import requests
sobre = open("peticion.xml", "rb").read()
r = requests.post(
"https://api.datario.cl/soap/v1",
data=sobre,
headers={
"Authorization": "Bearer dtr_TU_KEY",
"Content-Type": "text/xml; charset=utf-8",
},
timeout=10,
)
if "<soap:Fault>" in r.text:
raise SystemExit(r.text) # faultstring dice qué pasó
print(r.text)
<?php
// SoapClient lee el WSDL y genera las operaciones solo.
$contexto = stream_context_create(["http" => [
"header" => "Authorization: Bearer dtr_TU_KEY",
]]);
$cliente = new SoapClient(
"https://api.datario.cl/soap/v1?wsdl",
["stream_context" => $contexto]
);
try {
$ficha = $cliente->ObtenerHistorial([
"rut" => "61.704.000-K",
]);
print_r($ficha);
} catch (SoapFault $f) {
echo $f->faultcode . ": " . $f->faultstring;
}
using var http = new HttpClient();
http.DefaultRequestHeaders.Add(
"Authorization", "Bearer dtr_TU_KEY");
var sobre = new StringContent(
File.ReadAllText("peticion.xml"),
Encoding.UTF8, "text/xml");
var r = await http.PostAsync(
"https://api.datario.cl/soap/v1", sobre);
var xml = await r.Content.ReadAsStringAsync();
if (xml.Contains("<soap:Fault>"))
throw new Exception(xml); // faultstring dice qué pasó
Console.WriteLine(xml);
var sobre = Path.of("peticion.xml");
var req = HttpRequest.newBuilder()
.uri(URI.create(
"https://api.datario.cl/soap/v1"))
.header("Authorization", "Bearer dtr_TU_KEY")
.header("Content-Type",
"text/xml; charset=utf-8")
.POST(BodyPublishers.ofFile(sobre))
.build();
var r = HttpClient.newHttpClient()
.send(req, BodyHandlers.ofString());
// 500 = fault: el faultstring dice qué pasó.
System.out.println(r.body());
Set Variable [ $accion ; Value:
"https://api.datario.cl/soap/v1/ObtenerHistorial" ]
Insert from URL [ Select ; With dialog: Off ; Target: $r ;
"https://api.datario.cl/soap/v1" ; cURL options:
"-X POST" &
" -H \"Authorization: Bearer dtr_TU_KEY\"" &
" -H \"Content-Type: text/xml\"" &
" -H \"SOAPAction: " & $accion & "\"" &
" -D @peticion.xml" ]
# 500 = fault: el faultstring dice qué pasó.
Show Custom Dialog [ $r ]
La respuesta
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ObtenerHistorialResponse xmlns="https://api.datario.cl/soap/v1">
<historial>
<rut>61704000-K</rut>
<rut_formateado>61.704.000-K</rut_formateado>
<es_empresa>true</es_empresa>
<cambios/>
<fuente>Padrón del SII, comparado publicación a publicación por Datario</fuente>
<publicado>2026-08-05T15:36:37+00:00</publicado>
<consultado_en>2026-08-29T04:12:07+00:00</consultado_en>
</historial>
</ObtenerHistorialResponse>
</soap:Body>
</soap:Envelope>
POST /soap/v1
ListarCambios — Cambios del padrón
Todos los cambios de las personas jurídicas entre dos días, en el orden en que el SII los publicó: para actualizar tu base con lo que cambió, no con el padrón entero. Como se paga por cambio devuelto, desde es obligatorio. Con filtros por tipo, aspecto, campo, comuna, región o giro; cada página se lee hasta donde tu plan y tu saldo alcanzan.
Hay página que devolver — también la vacía, que descuenta una. Con cambios, descuenta uno por cada uno.
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="https://api.datario.cl/soap/v1">
<soapenv:Header/>
<soapenv:Body>
<tns:ListarCambios>
<tns:desde>2026-08-01</tns:desde>
<tns:hasta>2026-08-31</tns:hasta>
</tns:ListarCambios>
</soapenv:Body>
</soapenv:Envelope>
curl -s -i https://api.datario.cl/soap/v1 \
-H "Authorization: Bearer dtr_TU_KEY" \
-H "Content-Type: text/xml; charset=utf-8" \
--data-binary @peticion.xml
import requests
sobre = open("peticion.xml", "rb").read()
r = requests.post(
"https://api.datario.cl/soap/v1",
data=sobre,
headers={
"Authorization": "Bearer dtr_TU_KEY",
"Content-Type": "text/xml; charset=utf-8",
},
timeout=10,
)
if "<soap:Fault>" in r.text:
raise SystemExit(r.text) # faultstring dice qué pasó
print(r.text)
<?php
// SoapClient lee el WSDL y genera las operaciones solo.
$contexto = stream_context_create(["http" => [
"header" => "Authorization: Bearer dtr_TU_KEY",
]]);
$cliente = new SoapClient(
"https://api.datario.cl/soap/v1?wsdl",
["stream_context" => $contexto]
);
try {
$ficha = $cliente->ListarCambios([
"rut" => "61.704.000-K",
]);
print_r($ficha);
} catch (SoapFault $f) {
echo $f->faultcode . ": " . $f->faultstring;
}
using var http = new HttpClient();
http.DefaultRequestHeaders.Add(
"Authorization", "Bearer dtr_TU_KEY");
var sobre = new StringContent(
File.ReadAllText("peticion.xml"),
Encoding.UTF8, "text/xml");
var r = await http.PostAsync(
"https://api.datario.cl/soap/v1", sobre);
var xml = await r.Content.ReadAsStringAsync();
if (xml.Contains("<soap:Fault>"))
throw new Exception(xml); // faultstring dice qué pasó
Console.WriteLine(xml);
var sobre = Path.of("peticion.xml");
var req = HttpRequest.newBuilder()
.uri(URI.create(
"https://api.datario.cl/soap/v1"))
.header("Authorization", "Bearer dtr_TU_KEY")
.header("Content-Type",
"text/xml; charset=utf-8")
.POST(BodyPublishers.ofFile(sobre))
.build();
var r = HttpClient.newHttpClient()
.send(req, BodyHandlers.ofString());
// 500 = fault: el faultstring dice qué pasó.
System.out.println(r.body());
Set Variable [ $accion ; Value:
"https://api.datario.cl/soap/v1/ListarCambios" ]
Insert from URL [ Select ; With dialog: Off ; Target: $r ;
"https://api.datario.cl/soap/v1" ; cURL options:
"-X POST" &
" -H \"Authorization: Bearer dtr_TU_KEY\"" &
" -H \"Content-Type: text/xml\"" &
" -H \"SOAPAction: " & $accion & "\"" &
" -D @peticion.xml" ]
# 500 = fault: el faultstring dice qué pasó.
Show Custom Dialog [ $r ]
La respuesta
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ListarCambiosResponse xmlns="https://api.datario.cl/soap/v1">
<pagina>
<cambios/>
<hay_mas>false</hay_mas>
<fuente>Padrón del SII, comparado publicación a publicación por Datario</fuente>
<publicado>2026-08-05T15:36:37+00:00</publicado>
<consultado_en>2026-08-29T04:12:07+00:00</consultado_en>
</pagina>
</ListarCambiosResponse>
</soap:Body>
</soap:Envelope>
Probar en la consola Este producto por REST Este producto por GraphQL Este producto por MCP Qué es Cambios e historial