curl --request PUT \
--url https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"only_material": true,
"monitor_since_score": 500
}
'import requests
url = "https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring"
payload = {
"only_material": True,
"monitor_since_score": 500
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({only_material: true, monitor_since_score: 500})
};
fetch('https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'only_material' => true,
'monitor_since_score' => 500
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring"
payload := strings.NewReader("{\n \"only_material\": true,\n \"monitor_since_score\": 500\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"only_material\": true,\n \"monitor_since_score\": 500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"only_material\": true,\n \"monitor_since_score\": 500\n}"
response = http.request(request)
puts response.read_body{
"monitoring_id": "7c9e2f14-5b6a-4c8d-9e1f-3a7b5c2d8e91",
"subject_id": "8f5fb0d2-1d45-4a0e-9d5c-2d39f2b7a112",
"active": true,
"only_material": true,
"created_at": "2026-08-08T16:11:40Z",
"doc_id": "12.345.678-5",
"country": "CL",
"subject_type": "person",
"monitor_since_score": 500
}{
"error": "invalid_payload",
"message": "monitor_since_score must be between 1 and 999"
}{
"error": "report_required",
"message": "purchase a report for this subject before enabling monitoring"
}Suscribirse a un sujeto (monitoreo)
Crea o actualiza la suscripción de monitoreo de tu cuenta a un sujeto (persona o empresa). El monitoreo es gratuito, pero exige que tu organización ya haya comprado un informe ready de ese sujeto — la línea base de la suscripción se siembra desde esa data comprada. Por diseño (anti-oráculo), un sujeto inexistente y un sujeto existente sin informe comprado reciben LA MISMA respuesta 403 report_required: este endpoint jamás revela si un documento existe en el buró.
La suscripción es idempotente por (cuenta, sujeto): re-crearla devuelve la suscripción existente con su línea base preservada. only_material (default false) limita el trigger new_records a registros materialmente negativos (cobranzas abiertas, instrumentos protestados, quiebras, juicios). monitor_since_score (1..999) arma el trigger score_drop_below: una alerta se dispara cuando el score cruza ese umbral a la baja.
curl --request PUT \
--url https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"only_material": true,
"monitor_since_score": 500
}
'import requests
url = "https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring"
payload = {
"only_material": True,
"monitor_since_score": 500
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({only_material: true, monitor_since_score: 500})
};
fetch('https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'only_material' => true,
'monitor_since_score' => 500
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring"
payload := strings.NewReader("{\n \"only_material\": true,\n \"monitor_since_score\": 500\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"only_material\": true,\n \"monitor_since_score\": 500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qbank.cl/platform/v1/qscore/subjects/{docID}/monitoring")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"only_material\": true,\n \"monitor_since_score\": 500\n}"
response = http.request(request)
puts response.read_body{
"monitoring_id": "7c9e2f14-5b6a-4c8d-9e1f-3a7b5c2d8e91",
"subject_id": "8f5fb0d2-1d45-4a0e-9d5c-2d39f2b7a112",
"active": true,
"only_material": true,
"created_at": "2026-08-08T16:11:40Z",
"doc_id": "12.345.678-5",
"country": "CL",
"subject_type": "person",
"monitor_since_score": 500
}{
"error": "invalid_payload",
"message": "monitor_since_score must be between 1 and 999"
}{
"error": "report_required",
"message": "purchase a report for this subject before enabling monitoring"
}Autorizaciones
JWT de sesión (de register/login) o llave de API (pk_...).
X-API-Key: <token> se acepta como header alternativo.
Parámetros de ruta
Parámetros de consulta
País ISO del documento (default CL). También puede enviarse en el body del request como country.
Respuesta
Suscripción de monitoreo (creada o actualizada).