PDF
Generar PDF de un registro
Renderiza una plantilla pdf_template existente contra un registro del tablero.
POST
/
databases
/
{databaseId}
/
records
/
{recordId}
/
pdf-template
Generar PDF de un registro
curl --request POST \
--url https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template \
--header 'Content-Type: application/json' \
--header 'x-ib-api-key: <api-key>' \
--data '
{
"fieldId": "<field-id>",
"templateId": "<template-id>"
}
'import requests
url = "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template"
payload = {
"fieldId": "<field-id>",
"templateId": "<template-id>"
}
headers = {
"x-ib-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fieldId: '<field-id>', templateId: '<template-id>'})
};
fetch('https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fieldId: '<field-id>', templateId: '<template-id>'})
};
fetch('https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template';
const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fieldId: '<field-id>', templateId: '<template-id>'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")
.header("x-ib-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template"
payload := strings.NewReader("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-ib-api-key", "<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))
}require 'uri'
require 'net/http'
url = URI("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-ib-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template",
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([
'fieldId' => '<field-id>',
'templateId' => '<template-id>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-ib-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}")
val request = Request.Builder()
.url("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")
.post(body)
.addHeader("x-ib-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()falseimport Foundation
let parameters = [
"fieldId": "<field-id>",
"templateId": "<template-id>"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-ib-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))$headers=@{}
$headers.Add("x-ib-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"fieldId": "<field-id>",
"templateId": "<template-id>"
}'"<string>"{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}Genera un archivo PDF con una plantilla creada previamente desde la plataforma.
Si es tu primera integración, sigue primero la guía completa. Para llamar este endpoint necesitas:
Consulta Listar plantillas PDF para conocer los IDs y
Sustituye
Respuesta exitosa (
El body es el archivo PDF. Encabezados relevantes:
Los valores enviados no se guardan en el registro. Si una clave también existe en el tablero, el valor del body tiene precedencia solamente durante esta generación.
Sustituye los cuatro IDs. Guarda la API key en
Los errores incluyen un código estable:
Antes de leer el body como PDF, comprueba siempre
- Una API key.
- El ID del tablero (
databaseId). - El ID del registro (
recordId). fieldIdytemplateId, obtenidos con Listar plantillas PDF.
Endpoint
POST /databases/{databaseId}/records/{recordId}/pdf-template
Parámetros de ruta
| Parámetro | Descripción |
|---|---|
databaseId | ID del tablero. |
recordId | ID del registro cuyos valores se insertan en la plantilla. |
Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
fieldId | string | Sí | id del campo con "type": "pdf_template". |
templateId | string | Sí | id de un elemento en pdfTemplateConfig.templates. |
values | object | No | Claves que sustituyen o complementan los valores del registro únicamente para este PDF. |
runtimeFields que acepta la plantilla. También puedes enviar la key de un campo compatible del tablero para sustituir su valor.
No envíes el diseño de la plantilla. La API usa la versión guardada en la plataforma.
Ejemplo: descargar el PDF
curl -X POST "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template" \
-H "Content-Type: application/json" \
-H "x-ib-api-key: TU_API_KEY" \
-d '{
"fieldId": "<field-id>",
"templateId": "<template-id>",
"values": {
"observaciones": "Texto capturado al generar"
}
}' \
--output documento.pdf
{databaseId}, {recordId}, <field-id> y <template-id> por los valores de tu tablero.
Si la plantilla no tiene runtimeFields, puedes omitir values:
{
"fieldId": "<field-id>",
"templateId": "<template-id>"
}
Respuesta exitosa (200)
El body es el archivo PDF. Encabezados relevantes:
| Encabezado | Valor |
|---|---|
Content-Type | application/pdf |
Content-Disposition | attachment; filename="<nombre>.pdf" |
Cache-Control | no-store |
Recibir el archivo con JavaScript
La respuesta no contiene JSON. Lee el body como bytes:import { writeFile } from "node:fs/promises";
const apiUrl =
process.env.IB_API_URL ?? "https://api.insuranceboosters.com/api/v1";
const apiKey = process.env.IB_API_KEY;
const databaseId = "<database-id>";
const recordId = "<record-id>";
const fieldId = "<field-id>";
const templateId = "<template-id>";
if (!apiKey) {
throw new Error("Falta la variable IB_API_KEY");
}
const response = await fetch(
`${apiUrl}/databases/${databaseId}/records/${recordId}/pdf-template`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"x-ib-api-key": apiKey,
},
body: JSON.stringify({
fieldId,
templateId,
values: {
observaciones: "Texto capturado al generar",
},
}),
}
);
if (!response.ok) {
const error = await response.json();
throw new Error(`${error.code}: ${error.message}`);
}
const pdf = Buffer.from(await response.arrayBuffer());
await writeFile("documento.pdf", pdf);
IB_API_KEY; no la incluyas directamente en el código fuente.
Límites
- Máximo 50 propiedades dentro de
values. - Máximo 10,000 caracteres por string.
- Valores permitidos: string, número, booleano o
null. - Máximo 30 generaciones por minuto por API key.
- La renderización puede tardar hasta 58 segundos.
429.
Errores frecuentes
| HTTP | Qué significa | Qué hacer |
|---|---|---|
400 | Faltan IDs o values contiene una clave, tipo o tamaño no permitido. | Consulta el catálogo y corrige los valores enviados. |
401 | API key inválida o faltante. | Verifica x-ib-api-key. |
403 | Tu integración no puede acceder al registro. | Confirma el acceso al tablero y al registro. |
404 | El tablero, registro, campo o plantilla no existe. | Confirma los IDs con Listar plantillas PDF. |
422 | La plantilla no se pudo renderizar. | Revisa el mensaje y corrige la plantilla en el tablero. |
429 | La API key superó 30 generaciones por minuto. | Espera los segundos indicados en Retry-After. |
500 | No fue posible generar el PDF. | Reintenta; si continúa, contacta soporte. |
{
"code": "PDF_RUNTIME_VALUES_INVALID",
"message": "values contains a key not used by this template: \"comentaro\""
}
response.ok o el código HTTP. Las respuestas de error son JSON.Authorizations
API key de Insurance Boosters.
Body
application/json
Valor fieldId devuelto por GET /databases/{databaseId}/pdf-templates.
Minimum string length:
1Valor templateId devuelto por GET /databases/{databaseId}/pdf-templates.
Minimum string length:
1Valores opcionales indexados por key. Incluye aquí los
runtimeFields de la plantilla. Si envías la key de una columna
del tablero, sustituye su valor únicamente para este PDF.
Show child attributes
Show child attributes
Response
Documento PDF generado.
The response is of type file.
Was this page helpful?
Generar PDF de un registro
curl --request POST \
--url https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template \
--header 'Content-Type: application/json' \
--header 'x-ib-api-key: <api-key>' \
--data '
{
"fieldId": "<field-id>",
"templateId": "<template-id>"
}
'import requests
url = "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template"
payload = {
"fieldId": "<field-id>",
"templateId": "<template-id>"
}
headers = {
"x-ib-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fieldId: '<field-id>', templateId: '<template-id>'})
};
fetch('https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fieldId: '<field-id>', templateId: '<template-id>'})
};
fetch('https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template';
const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fieldId: '<field-id>', templateId: '<template-id>'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")
.header("x-ib-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template"
payload := strings.NewReader("{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-ib-api-key", "<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))
}require 'uri'
require 'net/http'
url = URI("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-ib-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template",
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([
'fieldId' => '<field-id>',
'templateId' => '<template-id>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-ib-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"fieldId\": \"<field-id>\",\n \"templateId\": \"<template-id>\"\n}")
val request = Request.Builder()
.url("https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")
.post(body)
.addHeader("x-ib-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()falseimport Foundation
let parameters = [
"fieldId": "<field-id>",
"templateId": "<template-id>"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-ib-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))$headers=@{}
$headers.Add("x-ib-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.insuranceboosters.com/api/v1/databases/{databaseId}/records/{recordId}/pdf-template' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"fieldId": "<field-id>",
"templateId": "<template-id>"
}'"<string>"{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}{
"code": "<string>",
"message": "<string>",
"error": "<string>"
}
