Education template

Certificate

Elegant certificate of completion with decorative border and signature line.

Free on every planLanguage: en
slug: certificateRendered 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": "certificate",
    "data": {
      "organizationName": "Kamy Academy",
      "certificateType": "Completion",
      "recipientName": "Jordan Avery",
      "achievementText": "has successfully completed the Advanced PDF Engineering program with distinction.",
      "issueDate": "2026-04-15",
      "signatories": [
        {
          "name": "Dr. Sarah Mitchell",
          "title": "Program Director"
        },
        {
          "name": "Marcus Liu",
          "title": "Lead Instructor"
        }
      ]
    }
  }'
node.js
import { Kamy } from "@kamydev/sdk";

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

const { url } = await kamy.render({
  templateSlug: "certificate",
  data: {
    "organizationName": "Kamy Academy",
    "certificateType": "Completion",
    "recipientName": "Jordan Avery",
    "achievementText": "has successfully completed the Advanced PDF Engineering program with distinction.",
    "issueDate": "2026-04-15",
    "signatories": [
      {
        "name": "Dr. Sarah Mitchell",
        "title": "Program Director"
      },
      {
        "name": "Marcus Liu",
        "title": "Lead Instructor"
      }
    ]
  },
});

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": "certificate",
        "data": {
          "organizationName": "Kamy Academy",
          "certificateType": "Completion",
          "recipientName": "Jordan Avery",
          "achievementText": "has successfully completed the Advanced PDF Engineering program with distinction.",
          "issueDate": "2026-04-15",
          "signatories": [
            {
              "name": "Dr. Sarah Mitchell",
              "title": "Program Director"
            },
            {
              "name": "Marcus Liu",
              "title": "Lead Instructor"
            }
          ]
        },
    },
)
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
{
  "organizationName": "Kamy Academy",
  "certificateType": "Completion",
  "recipientName": "Jordan Avery",
  "achievementText": "has successfully completed the Advanced PDF Engineering program with distinction.",
  "issueDate": "2026-04-15",
  "signatories": [
    {
      "name": "Dr. Sarah Mitchell",
      "title": "Program Director"
    },
    {
      "name": "Marcus Liu",
      "title": "Lead Instructor"
    }
  ]
}
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": [
    "recipientName",
    "title"
  ],
  "properties": {
    "recipientName": {
      "type": "string",
      "minLength": 1
    },
    "title": {
      "type": "string",
      "minLength": 1
    },
    "subtitle": {
      "type": "string"
    },
    "issueDate": {
      "type": "string"
    },
    "issuer": {
      "type": "string"
    },
    "signature": {
      "type": "string"
    },
    "signatureTitle": {
      "type": "string"
    }
  }
}
Certificate template — Kamy PDF API — Kamy