curl --request POST \
--url https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/ \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/', 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.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job_id": 123,
"status": "queued",
"channel_key": "honorary-authorized-users-sync-456"
}{
"error": "Usuario sin permisos para acceder a la entidad"
}{
"error": "No encontrado"
}Sincronizar usuarios autorizados con el SII
Encola de forma asíncrona (no bloquea la respuesta) una consulta al SII para refrescar el caché local de usuarios autorizados de la entidad. Responde de inmediato con un job_id. El caché nunca queda vacío ni se corrompe por un sync fallido: solo un sync exitoso puede actualizar o desactivar usuarios (nunca los borra). Para saber cuándo terminó, haz polling de GET /honorary/master-entities//authorized-users/ hasta que last_sync_status sea ‘done’ o ‘error’ — el canal WebSocket que expone el avance en tiempo real solo acepta autenticación de sesión (JWT), no API key.
curl --request POST \
--url https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/ \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/', 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.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v2/honorary/master-entities/{master_entity_id}/authorized-users/sync/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job_id": 123,
"status": "queued",
"channel_key": "honorary-authorized-users-sync-456"
}{
"error": "Usuario sin permisos para acceder a la entidad"
}{
"error": "No encontrado"
}Authorizations
API Key para autenticación. Debe proporcionarse en el header Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo 'Api-Key ' seguido de tu API key)
Path Parameters
ID de la entidad emisora
Response
Sincronización encolada exitosamente
