curl --request POST \
--url https://api.tupana.ai/v2/scheduled-documents/ \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"sender": 123,
"dte_type": "33",
"receiver_tax_id": "76111111-1",
"frequency": "monthly",
"day_of_month": 10,
"currency": "CLP",
"currency_day": 10,
"status": "active",
"references": [
{
"dte_type_code": "33",
"reference_folio": "100",
"reference_date": "2024-01-15",
"reference_reason": "ANULA DOCUMENTO DE LA REFERENCIA"
}
],
"details": [
{
"item_name": "Servicio mensual de consultoría",
"item_description": "Asistencia contable mensual",
"quantity": 1,
"unit_price": 150000
}
]
}
'import requests
url = "https://api.tupana.ai/v2/scheduled-documents/"
payload = {
"sender": 123,
"dte_type": "33",
"receiver_tax_id": "76111111-1",
"frequency": "monthly",
"day_of_month": 10,
"currency": "CLP",
"currency_day": 10,
"status": "active",
"references": [
{
"dte_type_code": "33",
"reference_folio": "100",
"reference_date": "2024-01-15",
"reference_reason": "ANULA DOCUMENTO DE LA REFERENCIA"
}
],
"details": [
{
"item_name": "Servicio mensual de consultoría",
"item_description": "Asistencia contable mensual",
"quantity": 1,
"unit_price": 150000
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sender: 123,
dte_type: '33',
receiver_tax_id: '76111111-1',
frequency: 'monthly',
day_of_month: 10,
currency: 'CLP',
currency_day: 10,
status: 'active',
references: [
{
dte_type_code: '33',
reference_folio: '100',
reference_date: '2024-01-15',
reference_reason: 'ANULA DOCUMENTO DE LA REFERENCIA'
}
],
details: [
{
item_name: 'Servicio mensual de consultoría',
item_description: 'Asistencia contable mensual',
quantity: 1,
unit_price: 150000
}
]
})
};
fetch('https://api.tupana.ai/v2/scheduled-documents/', 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/scheduled-documents/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sender' => 123,
'dte_type' => '33',
'receiver_tax_id' => '76111111-1',
'frequency' => 'monthly',
'day_of_month' => 10,
'currency' => 'CLP',
'currency_day' => 10,
'status' => 'active',
'references' => [
[
'dte_type_code' => '33',
'reference_folio' => '100',
'reference_date' => '2024-01-15',
'reference_reason' => 'ANULA DOCUMENTO DE LA REFERENCIA'
]
],
'details' => [
[
'item_name' => 'Servicio mensual de consultoría',
'item_description' => 'Asistencia contable mensual',
'quantity' => 1,
'unit_price' => 150000
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.tupana.ai/v2/scheduled-documents/"
payload := strings.NewReader("{\n \"sender\": 123,\n \"dte_type\": \"33\",\n \"receiver_tax_id\": \"76111111-1\",\n \"frequency\": \"monthly\",\n \"day_of_month\": 10,\n \"currency\": \"CLP\",\n \"currency_day\": 10,\n \"status\": \"active\",\n \"references\": [\n {\n \"dte_type_code\": \"33\",\n \"reference_folio\": \"100\",\n \"reference_date\": \"2024-01-15\",\n \"reference_reason\": \"ANULA DOCUMENTO DE LA REFERENCIA\"\n }\n ],\n \"details\": [\n {\n \"item_name\": \"Servicio mensual de consultoría\",\n \"item_description\": \"Asistencia contable mensual\",\n \"quantity\": 1,\n \"unit_price\": 150000\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.post("https://api.tupana.ai/v2/scheduled-documents/")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sender\": 123,\n \"dte_type\": \"33\",\n \"receiver_tax_id\": \"76111111-1\",\n \"frequency\": \"monthly\",\n \"day_of_month\": 10,\n \"currency\": \"CLP\",\n \"currency_day\": 10,\n \"status\": \"active\",\n \"references\": [\n {\n \"dte_type_code\": \"33\",\n \"reference_folio\": \"100\",\n \"reference_date\": \"2024-01-15\",\n \"reference_reason\": \"ANULA DOCUMENTO DE LA REFERENCIA\"\n }\n ],\n \"details\": [\n {\n \"item_name\": \"Servicio mensual de consultoría\",\n \"item_description\": \"Asistencia contable mensual\",\n \"quantity\": 1,\n \"unit_price\": 150000\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v2/scheduled-documents/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sender\": 123,\n \"dte_type\": \"33\",\n \"receiver_tax_id\": \"76111111-1\",\n \"frequency\": \"monthly\",\n \"day_of_month\": 10,\n \"currency\": \"CLP\",\n \"currency_day\": 10,\n \"status\": \"active\",\n \"references\": [\n {\n \"dte_type_code\": \"33\",\n \"reference_folio\": \"100\",\n \"reference_date\": \"2024-01-15\",\n \"reference_reason\": \"ANULA DOCUMENTO DE LA REFERENCIA\"\n }\n ],\n \"details\": [\n {\n \"item_name\": \"Servicio mensual de consultoría\",\n \"item_description\": \"Asistencia contable mensual\",\n \"quantity\": 1,\n \"unit_price\": 150000\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "scdo_6f1d8b3a9e2c7",
"sender": {
"id": "ment_4829301923847",
"name": "Empresa Ejemplo SpA",
"rut": "76543210-1"
},
"receiver": {
"id": "ment_4829301923847",
"name": "Cliente ABC Ltda",
"rut": "12345678-9"
},
"dte_type": {
"id": "dtty_4d5e6f7a8b9c0",
"code": "33",
"description": "Factura Electrónica"
},
"frequency": "monthly",
"frequency_display": "Mensual",
"day_of_month": 10,
"day_of_week": null,
"next_execution": "2024-03-10T10:00:00Z",
"status": "active",
"status_display": "Activo",
"amount": 150000,
"currency": "CLP",
"currency_day": 10,
"completed_occurrences": 0,
"max_occurrences": null,
"references": [
{
"id": "sdr_9e8d7c6b5a4f3",
"dte_type_code": "33",
"reference_folio": "100",
"reference_date": "2024-01-15",
"reference_reason": "ANULA DOCUMENTO DE LA REFERENCIA"
}
],
"details": [
{
"id": "scdoc_2a3b4c5d6e7f8",
"item_name": "Servicio mensual de consultoría",
"item_description": "Asistencia contable mensual",
"quantity": 1,
"unit_price": 150000
}
],
"created_at": "2024-02-05T12:15:00Z",
"updated_at": "2024-02-05T12:15:00Z"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}Crear documento programado
Crea un nuevo documento programado que se ejecutará automáticamente según la frecuencia especificada.
curl --request POST \
--url https://api.tupana.ai/v2/scheduled-documents/ \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"sender": 123,
"dte_type": "33",
"receiver_tax_id": "76111111-1",
"frequency": "monthly",
"day_of_month": 10,
"currency": "CLP",
"currency_day": 10,
"status": "active",
"references": [
{
"dte_type_code": "33",
"reference_folio": "100",
"reference_date": "2024-01-15",
"reference_reason": "ANULA DOCUMENTO DE LA REFERENCIA"
}
],
"details": [
{
"item_name": "Servicio mensual de consultoría",
"item_description": "Asistencia contable mensual",
"quantity": 1,
"unit_price": 150000
}
]
}
'import requests
url = "https://api.tupana.ai/v2/scheduled-documents/"
payload = {
"sender": 123,
"dte_type": "33",
"receiver_tax_id": "76111111-1",
"frequency": "monthly",
"day_of_month": 10,
"currency": "CLP",
"currency_day": 10,
"status": "active",
"references": [
{
"dte_type_code": "33",
"reference_folio": "100",
"reference_date": "2024-01-15",
"reference_reason": "ANULA DOCUMENTO DE LA REFERENCIA"
}
],
"details": [
{
"item_name": "Servicio mensual de consultoría",
"item_description": "Asistencia contable mensual",
"quantity": 1,
"unit_price": 150000
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sender: 123,
dte_type: '33',
receiver_tax_id: '76111111-1',
frequency: 'monthly',
day_of_month: 10,
currency: 'CLP',
currency_day: 10,
status: 'active',
references: [
{
dte_type_code: '33',
reference_folio: '100',
reference_date: '2024-01-15',
reference_reason: 'ANULA DOCUMENTO DE LA REFERENCIA'
}
],
details: [
{
item_name: 'Servicio mensual de consultoría',
item_description: 'Asistencia contable mensual',
quantity: 1,
unit_price: 150000
}
]
})
};
fetch('https://api.tupana.ai/v2/scheduled-documents/', 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/scheduled-documents/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sender' => 123,
'dte_type' => '33',
'receiver_tax_id' => '76111111-1',
'frequency' => 'monthly',
'day_of_month' => 10,
'currency' => 'CLP',
'currency_day' => 10,
'status' => 'active',
'references' => [
[
'dte_type_code' => '33',
'reference_folio' => '100',
'reference_date' => '2024-01-15',
'reference_reason' => 'ANULA DOCUMENTO DE LA REFERENCIA'
]
],
'details' => [
[
'item_name' => 'Servicio mensual de consultoría',
'item_description' => 'Asistencia contable mensual',
'quantity' => 1,
'unit_price' => 150000
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.tupana.ai/v2/scheduled-documents/"
payload := strings.NewReader("{\n \"sender\": 123,\n \"dte_type\": \"33\",\n \"receiver_tax_id\": \"76111111-1\",\n \"frequency\": \"monthly\",\n \"day_of_month\": 10,\n \"currency\": \"CLP\",\n \"currency_day\": 10,\n \"status\": \"active\",\n \"references\": [\n {\n \"dte_type_code\": \"33\",\n \"reference_folio\": \"100\",\n \"reference_date\": \"2024-01-15\",\n \"reference_reason\": \"ANULA DOCUMENTO DE LA REFERENCIA\"\n }\n ],\n \"details\": [\n {\n \"item_name\": \"Servicio mensual de consultoría\",\n \"item_description\": \"Asistencia contable mensual\",\n \"quantity\": 1,\n \"unit_price\": 150000\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.post("https://api.tupana.ai/v2/scheduled-documents/")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sender\": 123,\n \"dte_type\": \"33\",\n \"receiver_tax_id\": \"76111111-1\",\n \"frequency\": \"monthly\",\n \"day_of_month\": 10,\n \"currency\": \"CLP\",\n \"currency_day\": 10,\n \"status\": \"active\",\n \"references\": [\n {\n \"dte_type_code\": \"33\",\n \"reference_folio\": \"100\",\n \"reference_date\": \"2024-01-15\",\n \"reference_reason\": \"ANULA DOCUMENTO DE LA REFERENCIA\"\n }\n ],\n \"details\": [\n {\n \"item_name\": \"Servicio mensual de consultoría\",\n \"item_description\": \"Asistencia contable mensual\",\n \"quantity\": 1,\n \"unit_price\": 150000\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v2/scheduled-documents/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sender\": 123,\n \"dte_type\": \"33\",\n \"receiver_tax_id\": \"76111111-1\",\n \"frequency\": \"monthly\",\n \"day_of_month\": 10,\n \"currency\": \"CLP\",\n \"currency_day\": 10,\n \"status\": \"active\",\n \"references\": [\n {\n \"dte_type_code\": \"33\",\n \"reference_folio\": \"100\",\n \"reference_date\": \"2024-01-15\",\n \"reference_reason\": \"ANULA DOCUMENTO DE LA REFERENCIA\"\n }\n ],\n \"details\": [\n {\n \"item_name\": \"Servicio mensual de consultoría\",\n \"item_description\": \"Asistencia contable mensual\",\n \"quantity\": 1,\n \"unit_price\": 150000\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "scdo_6f1d8b3a9e2c7",
"sender": {
"id": "ment_4829301923847",
"name": "Empresa Ejemplo SpA",
"rut": "76543210-1"
},
"receiver": {
"id": "ment_4829301923847",
"name": "Cliente ABC Ltda",
"rut": "12345678-9"
},
"dte_type": {
"id": "dtty_4d5e6f7a8b9c0",
"code": "33",
"description": "Factura Electrónica"
},
"frequency": "monthly",
"frequency_display": "Mensual",
"day_of_month": 10,
"day_of_week": null,
"next_execution": "2024-03-10T10:00:00Z",
"status": "active",
"status_display": "Activo",
"amount": 150000,
"currency": "CLP",
"currency_day": 10,
"completed_occurrences": 0,
"max_occurrences": null,
"references": [
{
"id": "sdr_9e8d7c6b5a4f3",
"dte_type_code": "33",
"reference_folio": "100",
"reference_date": "2024-01-15",
"reference_reason": "ANULA DOCUMENTO DE LA REFERENCIA"
}
],
"details": [
{
"id": "scdoc_2a3b4c5d6e7f8",
"item_name": "Servicio mensual de consultoría",
"item_description": "Asistencia contable mensual",
"quantity": 1,
"unit_price": 150000
}
],
"created_at": "2024-02-05T12:15:00Z",
"updated_at": "2024-02-05T12:15:00Z"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}Qué hace
- Crea un nuevo documento programado que se ejecutará automáticamente según la frecuencia especificada
- Permite definir la frecuencia de ejecución (diaria, semanal, mensual, trimestral)
- Configura automáticamente la próxima ejecución según la frecuencia
- Busca o crea automáticamente el receptor si no existe
- Establece el estado inicial del documento programado (activo o inactivo)
Ejemplos de uso
- Crear facturas recurrentes mensuales a clientes específicos
- Programar servicios de suscripción que se facturen automáticamente
- Automatizar facturación de servicios periódicos (consulta, mantenimiento, etc.)
- Configurar facturas trimestrales para reportes o servicios continuos
- Establecer documentos programados que se ejecuten diariamente
Endpoints relacionados
- Listar Documentos Programados - Ver todos los documentos programados
- Obtener Documento Programado - Ver detalles de un documento específico
- Actualizar Documento Programado - Modificar un documento programado existente
- Preview de Documento Programado - Ver preview del próximo documento a emitir
- Listar Documentos - Consultar documentos ya emitidos
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)
Body
Datos del documento programado a crear
ID de la entidad maestra emisora (obligatorio)
123
Código del tipo de DTE (ej: '33' para Factura Electrónica)
"33"
RUT del receptor (formato: 12345678-9). El sistema buscará un cliente existente con este RUT. Si no existe, creará uno nuevo automáticamente. Campo requerido.
"12345678-9"
Frecuencia de ejecución del documento programado. Valores: 'daily' (diario), 'weekly' (semanal), 'monthly' (mensual), 'quarterly' (trimestral), 'semiannual' (semestral), 'yearly' (anual).
daily, weekly, monthly, quarterly, semiannual, yearly "monthly"
Detalles/productos del documento
1Show child attributes
Show child attributes
Día del mes en que se ejecutará el documento (1-31). Requerido para frecuencias: monthly, quarterly, semiannual, yearly. Si el día no existe en un mes (ej: 31 en febrero), se usará el último día del mes.
1 <= x <= 3115
Día de la semana en que se ejecutará el documento (1=Lunes, 2=Martes, 3=Miércoles, 4=Jueves, 5=Viernes, 6=Sábado, 7=Domingo). Requerido para frecuencia semanal (weekly).
1 <= x <= 71
Fecha de inicio de la programación (YYYY-MM-DD). Define desde cuándo comenzará a ejecutarse el documento programado. Si no se proporciona, se usa la fecha actual. La primera ejecución será calculada a partir de esta fecha según la frecuencia configurada.
"2024-02-01"
Ajuste de fecha de emisión a días hábiles. Si la fecha calculada cae en fin de semana o feriado, se ajusta según esta opción: 'none' (sin ajuste, emite en la fecha calculada aunque sea fin de semana), 'next' (ajusta al próximo día hábil), 'previous' (ajusta al anterior día hábil). Por defecto: 'none'.
none, next, previous "none"
Tipo de finalización de la programación: 'never' (nunca finaliza, se ejecuta indefinidamente), 'on_date' (finaliza en una fecha específica, requiere end_date), 'after_occurrences' (finaliza después de un número máximo de ejecuciones, requiere max_occurrences). Por defecto: 'never'.
never, on_date, after_occurrences "never"
Fecha de finalización de la programación (YYYY-MM-DD). Solo aplica y es requerido si end_type es 'on_date'. El documento programado dejará de ejecutarse después de esta fecha.
"2024-12-31"
Moneda del documento
CLP, UF, USD, EUR "CLP"
Día del mes (1-31) para tomar el valor del tipo de cambio (UF o USD). Si no se indica, se usa el día de emisión.
1 <= x <= 3110
Referencias a documentos (ej. factura anulada por nota de crédito). Máximo 3 referencias.
3Show child attributes
Show child attributes
Estado inicial del documento programado
active, inactive "active"
Número máximo de ejecuciones (opcional, null = infinito). Solo aplica si end_type es 'after_occurrences'.
x >= 112
Response
Documento programado creado exitosamente
ID único del documento programado
"scdo_6f1d8b3a9e2c7"
Información de la entidad emisora
Show child attributes
Show child attributes
Información de la entidad receptora
Show child attributes
Show child attributes
Tipo de documento tributario
Show child attributes
Show child attributes
Frecuencia de ejecución
daily, weekly, monthly, quarterly, semiannual, yearly "monthly"
Frecuencia en formato legible
"Mensual"
Día del mes en que se ejecutará el documento (1-31). Requerido para frecuencias: monthly, quarterly, semiannual, yearly. Si el día no existe en un mes (ej: 31 en febrero), se usará el último día del mes.
15
Día de la semana para ejecución (1=Lunes, 7=Domingo)
null
Fecha y hora de la próxima ejecución
"2024-02-15T10:00:00Z"
Estado del documento programado
active, inactive, completed "active"
Estado en formato legible
"Activo"
Monto del documento
100000
Moneda del documento
CLP, UF, USD, EUR "CLP"
Día del mes (1-31) para tomar el valor del tipo de cambio. Aplica cuando la moneda es UF o USD; si no se indica, se usa el día de emisión.
1 <= x <= 3110
Número de veces que se ha ejecutado
5
Número máximo de ejecuciones
null
Fecha de inicio de la programación (YYYY-MM-DD). Define desde cuándo comenzará a ejecutarse el documento programado. Si no se proporciona, se usa la fecha actual. La primera ejecución será calculada a partir de esta fecha según la frecuencia configurada.
"2024-02-01"
Ajuste de fecha de emisión a días hábiles: 'none' (sin ajuste), 'next' (próximo día hábil), 'previous' (anterior día hábil)
none, next, previous "none"
Tipo de finalización de la programación: 'never' (nunca finaliza, se ejecuta indefinidamente), 'on_date' (finaliza en una fecha específica, requiere end_date), 'after_occurrences' (finaliza después de un número máximo de ejecuciones, requiere max_occurrences). Por defecto: 'never'.
never, on_date, after_occurrences "never"
Fecha de finalización de la programación (YYYY-MM-DD). Solo aplica y es requerido si end_type es 'on_date'. El documento programado dejará de ejecutarse después de esta fecha.
"2024-12-31"
Detalles/productos del documento
Show child attributes
Show child attributes
Referencias a documentos (ej. factura anulada por nota de crédito). Máximo 3 referencias.
3Show child attributes
Show child attributes
Fecha de creación
"2024-01-15T10:00:00Z"
Fecha de última actualización
"2024-01-20T15:30:00Z"
