Template gallery / certificate
certificate
Landscape Letter certificate in three variants selected by `kind`: course completion, completion of work, and product/workmanship warranty. Bordered, with seal, credential ID and signature lines.
chromium default PDF 15 top-level fields 1 unit per page
Fields
The full JSON Schema is below. Required fields are marked; anything missing comes back as a 422 naming the path, the expected type and a value that would be accepted.
| Field | Type | Required | Description |
|---|---|---|---|
| kind | "course" | "completion" | "warranty" | required | course = training/CEU certificate; completion = work finished on a job; warranty = workmanship or product warranty. |
| title | string | optional | Overrides the heading implied by `kind`. |
| lede | string | optional | The short line above the recipient name. |
| eyebrow | string | optional | Small spaced line at the top. Defaults to the issuer name. |
| statement | string | optional | The body paragraph. |
| issued_on | string (date) | optional | |
| expires_on | string (date) | optional | Warranty expiry, or the date a credential lapses. |
| credential_id | string | optional | Printed in the footer so the certificate can be verified. |
| accent | string | optional | Border and rule colour. |
| paper | string | optional | Sheet background colour. |
| recipient | object { name, detail } | required | |
| issuer | object { name, license_number, website, logo_url } | required | |
| facts | array of object { label, value } | optional | Label/value pairs in the row under the body: hours and CEUs for a course, scope and warranty term for work. |
| signatures | array of object { name, role, signature } | optional | |
| seal | object { top, center, bottom } | optional | Round seal at the end of the signature row. |
Default render options
Applied unless you override them. Options are part of the cache key.
| page_size | "Letter" |
| landscape | true |
| margin | "0.35in" |
| print_background | true |
Example payload
This exact object renders the preview above. It is also what the API echoes back in a validation error, so an agent can repair a payload without a round trip to the docs.
{
"kind": "completion",
"statement": "The hall bathroom remodel at 412 Ash Street was completed in accordance with the signed contract dated July 8, 2026, inc… [283 characters, shortened for display]",
"issued_on": "2026-09-16",
"expires_on": "2027-09-16",
"credential_id": "HR-2026-118-C",
"accent": "#0f4c5c",
"recipient": {
"name": "Dana and Marcus Reyes",
"detail": "412 Ash Street, Fernandina Beach, FL 32034"
},
"issuer": {
"name": "Halyard Remodeling LLC",
"license_number": "CBC1259847",
"website": "halyardremodel.test"
},
"facts": [
{
"label": "Contract",
"value": "HR-2026-118"
},
{
"label": "Scope",
"value": "Hall bathroom remodel"
},
{
"label": "Final inspection",
"value": "Sep 14, 2026"
}
],
"signatures": [
{
"name": "Priya Raman",
"role": "Owner, Halyard Remodeling",
"signature": "Priya Raman"
},
{
"name": "Dana Reyes",
"role": "Homeowner",
"signature": "Dana Reyes"
}
],
"seal": {
"top": "Completed",
"center": "2026",
"bottom": "Nassau Co."
}
}
Values longer than 240 characters — data URIs, inline SVG — are shortened here so the
shape of the payload stays readable, and the replacement says how much was left out.
get_template and GET /v1/templates/:ref return them in full.
Render it
curl -sS https://api.galleyrender.com/v1/render \
-H "Authorization: Bearer $GALLEY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"template": "certificate@1",
"format": "pdf",
"data": {
"kind": "completion",
"statement": "The hall bathroom remodel at 412 Ash Street was completed in accordance with the signed contract dated July 8, 2026, including all authorized change orders, and passed final inspection by Nassau County on September 14, 2026. Workmanship is warranted for one year from the date below.",
"issued_on": "2026-09-16",
"expires_on": "2027-09-16",
"credential_id": "HR-2026-118-C",
"accent": "#0f4c5c",
"recipient": {
"name": "Dana and Marcus Reyes",
"detail": "412 Ash Street, Fernandina Beach, FL 32034"
},
"issuer": {
"name": "Halyard Remodeling LLC",
"license_number": "CBC1259847",
"website": "halyardremodel.test"
},
"facts": [
{
"label": "Contract",
"value": "HR-2026-118"
},
{
"label": "Scope",
"value": "Hall bathroom remodel"
},
{
"label": "Final inspection",
"value": "Sep 14, 2026"
}
],
"signatures": [
{
"name": "Priya Raman",
"role": "Owner, Halyard Remodeling",
"signature": "Priya Raman"
},
{
"name": "Dana Reyes",
"role": "Homeowner",
"signature": "Dana Reyes"
}
],
"seal": {
"top": "Completed",
"center": "2026",
"bottom": "Nassau Co."
}
}
}' # No API key. The first call mints a 50-render trial.
curl -sS https://mcp.galleyrender.com/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "render",
"arguments": {
"template": "certificate",
"format": "pdf",
"data": { … see the example payload above … }
}
}
}'
Pin the version — certificate@1 — in anything you ship. Publishing a new
version never changes an old one. Render endpoint reference →
Renders the example payload on the production service. No account, no key.
JSON Schema
schema.json (15 top-level properties)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Certificate",
"description": "One certificate template with three variants. `kind` picks the default heading and wording: course, completion (of work), or warranty.",
"type": "object",
"required": [
"kind",
"recipient",
"issuer"
],
"additionalProperties": true,
"properties": {
"kind": {
"type": "string",
"enum": [
"course",
"completion",
"warranty"
],
"default": "course",
"description": "course = training/CEU certificate; completion = work finished on a job; warranty = workmanship or product warranty.",
"examples": [
"completion"
]
},
"title": {
"type": "string",
"description": "Overrides the heading implied by `kind`.",
"examples": [
"Certificate of Completion"
]
},
"lede": {
"type": "string",
"description": "The short line above the recipient name.",
"examples": [
"This certifies that the work described below has been completed"
]
},
"eyebrow": {
"type": "string",
"description": "Small spaced line at the top. Defaults to the issuer name.",
"examples": [
"Halyard Remodeling LLC"
]
},
"statement": {
"type": "string",
"description": "The body paragraph.",
"examples": [
"The hall bathroom remodel at 412 Ash Street was completed in accordance with the signed contract and passed final inspection by Nassau County on September 14, 2026."
]
},
"issued_on": {
"type": "string",
"format": "date",
"examples": [
"2026-09-16"
]
},
"expires_on": {
"type": "string",
"format": "date",
"description": "Warranty expiry, or the date a credential lapses.",
"examples": [
"2027-09-16"
]
},
"credential_id": {
"type": "string",
"description": "Printed in the footer so the certificate can be verified.",
"examples": [
"HR-2026-118-C"
]
},
"accent": {
"type": "string",
"description": "Border and rule colour.",
"examples": [
"#0f4c5c"
]
},
"paper": {
"type": "string",
"description": "Sheet background colour.",
"examples": [
"#fffdf8"
]
},
"recipient": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Printed large, in serif.",
"examples": [
"Dana and Marcus Reyes"
]
},
"detail": {
"type": "string",
"description": "Line under the recipient name, e.g. the project address.",
"examples": [
"412 Ash Street, Fernandina Beach, FL 32034"
]
}
}
},
"issuer": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Halyard Remodeling LLC"
]
},
"license_number": {
"type": "string",
"description": "Printed in the footer.",
"examples": [
"CBC1259847"
]
},
"website": {
"type": "string",
"examples": [
"halyardremodel.test"
]
},
"logo_url": {
"type": "string",
"format": "uri",
"examples": [
"https://example.com/logo.png"
]
}
}
},
"facts": {
"type": "array",
"description": "Label/value pairs in the row under the body: hours and CEUs for a course, scope and warranty term for work.",
"items": {
"type": "object",
"required": [
"label",
"value"
],
"properties": {
"label": {
"type": "string",
"examples": [
"Contract"
]
},
"value": {
"type": "string",
"examples": [
"HR-2026-118"
]
}
}
}
},
"signatures": {
"type": "array",
"maxItems": 3,
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Priya Raman"
]
},
"role": {
"type": "string",
"examples": [
"Owner, Halyard Remodeling"
]
},
"signature": {
"type": "string",
"description": "Text drawn in italic serif above the rule. Defaults to the name.",
"examples": [
"Priya Raman"
]
}
}
}
},
"seal": {
"type": "object",
"description": "Round seal at the end of the signature row.",
"properties": {
"top": {
"type": "string",
"examples": [
"Completed"
]
},
"center": {
"type": "string",
"examples": [
"2026"
]
},
"bottom": {
"type": "string",
"examples": [
"Nassau Co."
]
}
}
}
}
}