Business template

Report

Magazine-style multi-page business report with cover, executive summary, metric grid, sections with quotes / lists / callouts, and page numbers.

Free on every planLanguage: en
slug: reportRendered with sample data
01

Quick start

Reference the template by its slug and pass your data. The same call works from any language; pick whichever fits your stack. Replace $KAMY_API_KEY with a key from the dashboard.

curl
curl https://kamy.dev/api/v1/render \
  -H "Authorization: Bearer $KAMY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateSlug": "report",
    "data": {
      "reportType": "Quarterly Business Review",
      "title": "Q1 2026 Performance Report",
      "subtitle": "Revenue, growth, and customer metrics across all product lines.",
      "organizationName": "Acme Studio",
      "reportDate": "2026-04-15",
      "metrics": [
        {
          "label": "Total Revenue",
          "value": "$2.4M",
          "delta": "+18% QoQ"
        },
        {
          "label": "Active Customers",
          "value": "1,284",
          "delta": "+9% QoQ"
        },
        {
          "label": "Avg. Contract Value",
          "value": "$1,870",
          "delta": "+8% QoQ"
        },
        {
          "label": "Net Retention",
          "value": "112%",
          "delta": "+3 pts"
        }
      ],
      // …
    }
  }'
node.js
import { Kamy } from "@kamydev/sdk";

const kamy = new Kamy({ apiKey: process.env.KAMY_API_KEY! });

const { url } = await kamy.render({
  templateSlug: "report",
  data: {
    "reportType": "Quarterly Business Review",
    "title": "Q1 2026 Performance Report",
    "subtitle": "Revenue, growth, and customer metrics across all product lines.",
    "organizationName": "Acme Studio",
    "reportDate": "2026-04-15",
    "metrics": [
      {
        "label": "Total Revenue",
        "value": "$2.4M",
        "delta": "+18% QoQ"
      },
      {
        "label": "Active Customers",
        "value": "1,284",
        "delta": "+9% QoQ"
      },
      {
        "label": "Avg. Contract Value",
        "value": "$1,870",
        "delta": "+8% QoQ"
      },
      {
        "label": "Net Retention",
        "value": "112%",
        "delta": "+3 pts"
      }
    ],
    // …
  },
});

console.log(url); // signed URL, valid for 1 hour
python
import os, requests

resp = requests.post(
    "https://kamy.dev/api/v1/render",
    headers={"Authorization": f"Bearer {os.environ['KAMY_API_KEY']}"},
    json={
        "templateSlug": "report",
        "data": {
          "reportType": "Quarterly Business Review",
          "title": "Q1 2026 Performance Report",
          "subtitle": "Revenue, growth, and customer metrics across all product lines.",
          "organizationName": "Acme Studio",
          "reportDate": "2026-04-15",
          "metrics": [
            {
              "label": "Total Revenue",
              "value": "$2.4M",
              "delta": "+18% QoQ"
            },
            {
              "label": "Active Customers",
              "value": "1,284",
              "delta": "+9% QoQ"
            },
            {
              "label": "Avg. Contract Value",
              "value": "$1,870",
              "delta": "+8% QoQ"
            },
            {
              "label": "Net Retention",
              "value": "112%",
              "delta": "+3 pts"
            }
          ],
          // …
        },
    },
)
resp.raise_for_status()
print(resp.json()["url"])
02

Sample payload

The full sample data the live preview above renders from. Use it as a starting point for your own integration — every field is optional except those marked required in the schema below.

json
{
  "reportType": "Quarterly Business Review",
  "title": "Q1 2026 Performance Report",
  "subtitle": "Revenue, growth, and customer metrics across all product lines.",
  "organizationName": "Acme Studio",
  "reportDate": "2026-04-15",
  "metrics": [
    {
      "label": "Total Revenue",
      "value": "$2.4M",
      "delta": "+18% QoQ"
    },
    {
      "label": "Active Customers",
      "value": "1,284",
      "delta": "+9% QoQ"
    },
    {
      "label": "Avg. Contract Value",
      "value": "$1,870",
      "delta": "+8% QoQ"
    },
    {
      "label": "Net Retention",
      "value": "112%",
      "delta": "+3 pts"
    }
  ],
  "sections": [
    {
      "title": "Executive Summary",
      "body": "Q1 2026 delivered the strongest growth quarter on record, driven by enterprise expansion and the successful launch of the new template marketplace. Revenue grew 18% quarter-over-quarter to $2.4M."
    },
    {
      "title": "Revenue Breakdown",
      "body": "Subscription revenue contributed 78% of total revenue. Usage-based billing accounted for 19%, with the remainder from professional services. The Pro plan was the fastest-growing tier with 24% expansion."
    },
    {
      "title": "Customer Highlights",
      "body": "We added 142 net-new logos in Q1, including three Fortune 500 customers. Net retention improved to 112%, reflecting strong upsell motion in the mid-market segment."
    },
    {
      "title": "Outlook",
      "body": "We expect continued momentum into Q2 driven by the upcoming API v2 release and expansion into the European market. Sales pipeline grew 31% QoQ and is well-positioned for full-year targets."
    }
  ]
}
03

JSON Schema

The render endpoint validates your payload against this JSON Schema before queuing the render. Validation errors come back with HTTP 400 and a VALIDATION_FAILED code listing every offending path.

json
{
  "type": "object",
  "required": [
    "title",
    "sections"
  ],
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1
    },
    "subtitle": {
      "type": "string"
    },
    "author": {
      "type": "string"
    },
    "date": {
      "type": "string"
    },
    "sections": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "heading"
        ],
        "properties": {
          "heading": {
            "type": "string",
            "minLength": 1
          },
          "body": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}
Report template — Kamy PDF API — Kamy