curl --request POST \
--url http://localhost:4005/v1/reports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"accounts": {
"account": {
"status": {
"eq": [
"ACTIVE"
]
}
}
}
},
"templateId": "00000000-0000-0000-0000-000000000000"
}
'import requests
url = "http://localhost:4005/v1/reports"
payload = {
"filters": { "accounts": { "account": { "status": { "eq": ["ACTIVE"] } } } },
"templateId": "00000000-0000-0000-0000-000000000000"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
filters: {accounts: {account: {status: {eq: ['ACTIVE']}}}},
templateId: '00000000-0000-0000-0000-000000000000'
})
};
fetch('http://localhost:4005/v1/reports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4005",
CURLOPT_URL => "http://localhost:4005/v1/reports",
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([
'filters' => [
'accounts' => [
'account' => [
'status' => [
'eq' => [
'ACTIVE'
]
]
]
]
],
'templateId' => '00000000-0000-0000-0000-000000000000'
]),
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 := "http://localhost:4005/v1/reports"
payload := strings.NewReader("{\n \"filters\": {\n \"accounts\": {\n \"account\": {\n \"status\": {\n \"eq\": [\n \"ACTIVE\"\n ]\n }\n }\n }\n },\n \"templateId\": \"00000000-0000-0000-0000-000000000000\"\n}")
req, _ := http.NewRequest("POST", 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.post("http://localhost:4005/v1/reports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"accounts\": {\n \"account\": {\n \"status\": {\n \"eq\": [\n \"ACTIVE\"\n ]\n }\n }\n }\n },\n \"templateId\": \"00000000-0000-0000-0000-000000000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4005/v1/reports")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"accounts\": {\n \"account\": {\n \"status\": {\n \"eq\": [\n \"ACTIVE\"\n ]\n }\n }\n }\n },\n \"templateId\": \"00000000-0000-0000-0000-000000000000\"\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2026-01-31T15:04:05Z",
"createdAt": "2026-01-31T15:00:00Z",
"deletedAt": "2026-02-01T09:00:00Z",
"filters": {
"accounts": {
"account": {
"status": {
"eq": [
"ACTIVE"
]
}
}
}
},
"id": "00000000-0000-0000-0000-000000000001",
"metadata": {
"source": "ledger",
"tenant": "sandbox"
},
"status": "Processing",
"templateDescription": "Monthly accounting report",
"templateId": "00000000-0000-0000-0000-000000000002",
"templateOutputFormat": "pdf",
"updatedAt": "2026-01-31T15:04:05Z"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}Crear un informe
Utiliza este endpoint para generar informes de forma asíncrona usando plantillas previamente registradas. Puedes aplicar filtros personalizados para definir criterios específicos por dominio, como IDs de cuentas en onboarding.
La solicitud devuelve un id único para rastrear el estado y descargar el informe cuando esté listo.
curl --request POST \
--url http://localhost:4005/v1/reports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filters": {
"accounts": {
"account": {
"status": {
"eq": [
"ACTIVE"
]
}
}
}
},
"templateId": "00000000-0000-0000-0000-000000000000"
}
'import requests
url = "http://localhost:4005/v1/reports"
payload = {
"filters": { "accounts": { "account": { "status": { "eq": ["ACTIVE"] } } } },
"templateId": "00000000-0000-0000-0000-000000000000"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
filters: {accounts: {account: {status: {eq: ['ACTIVE']}}}},
templateId: '00000000-0000-0000-0000-000000000000'
})
};
fetch('http://localhost:4005/v1/reports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4005",
CURLOPT_URL => "http://localhost:4005/v1/reports",
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([
'filters' => [
'accounts' => [
'account' => [
'status' => [
'eq' => [
'ACTIVE'
]
]
]
]
],
'templateId' => '00000000-0000-0000-0000-000000000000'
]),
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 := "http://localhost:4005/v1/reports"
payload := strings.NewReader("{\n \"filters\": {\n \"accounts\": {\n \"account\": {\n \"status\": {\n \"eq\": [\n \"ACTIVE\"\n ]\n }\n }\n }\n },\n \"templateId\": \"00000000-0000-0000-0000-000000000000\"\n}")
req, _ := http.NewRequest("POST", 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.post("http://localhost:4005/v1/reports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"accounts\": {\n \"account\": {\n \"status\": {\n \"eq\": [\n \"ACTIVE\"\n ]\n }\n }\n }\n },\n \"templateId\": \"00000000-0000-0000-0000-000000000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4005/v1/reports")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"filters\": {\n \"accounts\": {\n \"account\": {\n \"status\": {\n \"eq\": [\n \"ACTIVE\"\n ]\n }\n }\n }\n },\n \"templateId\": \"00000000-0000-0000-0000-000000000000\"\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2026-01-31T15:04:05Z",
"createdAt": "2026-01-31T15:00:00Z",
"deletedAt": "2026-02-01T09:00:00Z",
"filters": {
"accounts": {
"account": {
"status": {
"eq": [
"ACTIVE"
]
}
}
}
},
"id": "00000000-0000-0000-0000-000000000001",
"metadata": {
"source": "ledger",
"tenant": "sandbox"
},
"status": "Processing",
"templateDescription": "Monthly accounting report",
"templateId": "00000000-0000-0000-0000-000000000002",
"templateOutputFormat": "pdf",
"updatedAt": "2026-01-31T15:04:05Z"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "body.templateId",
"message": "expected string to match 'uuid' format",
"value": "not-a-uuid"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}Autorizaciones
Autenticación mediante token Bearer. Formato: 'Bearer {access_token}'. Solo es obligatoria cuando el plugin de autenticación está habilitado.
Encabezados
Clave de idempotencia proporcionada por el cliente que evita la creación duplicada de informes.
Cuerpo
Datos de entrada del informe.
Condiciones de filtro agrupadas por fuente de datos, tabla y campo.
Show child attributes
Show child attributes
{
"accounts": {
"account": { "status": { "eq": ["ACTIVE"] } }
}
}
Identificador de la plantilla utilizada para generar el informe.
"00000000-0000-0000-0000-000000000000"
Respuesta
Creado
Fecha y hora en que finalizó la generación del informe, cuando está disponible.
"2026-01-31T15:04:05Z"
Fecha y hora en que se creó el informe.
"2026-01-31T15:00:00Z"
Fecha y hora en que se eliminó lógicamente el informe, cuando aplica.
"2026-02-01T09:00:00Z"
Condiciones de filtro agrupadas por fuente de datos, tabla y campo.
Show child attributes
Show child attributes
{
"accounts": {
"account": { "status": { "eq": ["ACTIVE"] } }
}
}
Identificador estable del informe.
"00000000-0000-0000-0000-000000000001"
Metadatos adicionales del informe indexados por nombre de atributo.
Show child attributes
Show child attributes
{ "source": "ledger", "tenant": "sandbox" }
Estado actual de generación del informe.
"Processing"
Descripción copiada de la plantilla cuando se creó el informe.
"Monthly accounting report"
Identificador de origen de la instantánea de la plantilla.
"00000000-0000-0000-0000-000000000002"
Formato de salida seleccionado para el informe generado.
"pdf"
Fecha y hora de la última actualización del informe.
"2026-01-31T15:04:05Z"
¿Esta página le ayudó?

