210 × 297 mm
Resumes
Two-column resume
An A4 two-column resume: a coloured sidebar with contact details, skill level bars drawn from a 1–5 rating, languages and interests, and a main column with a Markdown profile, a timeline of roles with highlights, and education with formatted dates.
Opens Dynamic Document API with this template preloaded in a free workspace.
Template language features
- Loops
- Conditionals
- Macros
- Filters
- Date formatting
- Markdown
Filters such as format_currency and qrcode are described in the template language reference.
Variables
Derived from the sample data: 7 top-level fields, 30 paths in total. Send the same shape as data.
| Path | Type | Example |
|---|---|---|
| person | object | |
| person.name | string | "Anouk Delacroix-Hart" |
| person.initials | string | "AD" |
| person.headline | string | "Senior Product Designer" |
| person.location | string | "Manchester, United Kingdom" |
| person.email | string | "anouk.hart@example.com" |
| person.phone | string | "+44 20 7946 0321" |
| person.website | string | "anoukhart.example.net" |
| person.availability | string | "Open to hybrid roles in the North West from No…" |
| profile | string | "Product designer with **more than ten years of…" |
| skills | array<object> · 8 | |
| skills[].name | string | "Interaction design" |
| skills[].level | number | 5 |
| languages | array<object> · 3 | |
| languages[].name | string | "English" |
| languages[].level | string | "Native" |
| interests | array<string> · 3 | "Risograph printing" |
| experience | array<object> · 4 | |
| experience[].role | string | "Senior Product Designer" |
| experience[].company | string | "Lanternfish Health" |
| experience[].location | string | "Manchester" |
| experience[].start_date | date | "2022-03-01" |
| experience[].end_date | date | "2022-02-01" |
| experience[].highlights | array<string> · 3 | "Led the redesign of appointment booking for 40…" |
| education | array<object> · 2 | |
| education[].qualification | string | "MA Interaction Design" |
| education[].institution | string | "Northgate School of Art" |
| education[].start_date | date | "2014-09-01" |
| education[].end_date | date | "2015-09-01" |
| education[].detail | string | "Distinction. Thesis on paper prototyping with …" |
Sample data
Fictional records used for previews. Replace them with your own data when you call the API.
{
"person": {
"name": "Anouk Delacroix-Hart",
"initials": "AD",
"headline": "Senior Product Designer",
"location": "Manchester, United Kingdom",
"email": "anouk.hart@example.com",
"phone": "+44 20 7946 0321",
"website": "anoukhart.example.net",
"availability": "Open to hybrid roles in the North West from November 2026"
},
"profile": "Product designer with **more than ten years of experience** shaping everyday services, from appointment booking for community clinics to planning tools for logistics teams. I work side by side with researchers and engineers, turn messy problems into prototypes that can be tested within days, and care about accessible, well-documented design systems.",
"skills": [
{ "name": "Interaction design", "level": 5 },
{ "name": "Design systems", "level": 5 },
{ "name": "Prototyping", "level": 4 },
{ "name": "Usability research", "level": 4 },
{ "name": "Accessibility (WCAG 2.2)", "level": 4 },
{ "name": "Workshop facilitation", "level": 4 },
{ "name": "Information architecture", "level": 3 },
{ "name": "HTML and CSS", "level": 3 }
],
"languages": [
{ "name": "English", "level": "Native" },
{ "name": "French", "level": "Fluent" },
{ "name": "Dutch", "level": "Conversational" }
],
"interests": ["Risograph printing", "Fell running", "Community garden volunteering"],
"experience": [
{
"role": "Senior Product Designer",
"company": "Lanternfish Health",
"location": "Manchester",
"start_date": "2022-03-01",
"end_date": null,
"highlights": [
"Led the redesign of appointment booking for 40 community clinics, cutting abandoned bookings by 23% in six months.",
"Built and documented a library of 60 accessible components now shared by four product teams.",
"Mentor two junior designers and run fortnightly design critiques open to the whole product group."
]
},
{
"role": "Product Designer",
"company": "Cobbleworks Logistics",
"location": "Leeds",
"start_date": "2019-01-01",
"end_date": "2022-02-01",
"highlights": [
"Designed route-planning tools that cut the time to build a daily dispatch plan from 90 to 35 minutes.",
"Ran more than 50 usability sessions with drivers and depot staff across three regions.",
"Worked with engineering to replace a legacy desktop application with a responsive web product."
]
},
{
"role": "UX Designer",
"company": "Paperkite Studio",
"location": "Manchester",
"start_date": "2016-06-01",
"end_date": "2018-12-01",
"highlights": [
"Delivered websites and service prototypes for charities, universities and local councils.",
"Introduced a short accessibility review to every project before handover."
]
},
{
"role": "Junior Designer",
"company": "Harbour & Vale Print Co.",
"location": "Liverpool",
"start_date": "2015-09-01",
"end_date": "2016-05-01",
"highlights": [
"Prepared print and digital layouts for independent publishers and arts venues."
]
}
],
"education": [
{
"qualification": "MA Interaction Design",
"institution": "Northgate School of Art",
"start_date": "2014-09-01",
"end_date": "2015-09-01",
"detail": "Distinction. Thesis on paper prototyping with older adults."
},
{
"qualification": "BA (Hons) Graphic Communication",
"institution": "University of Westmere",
"start_date": "2011-09-01",
"end_date": "2014-06-01",
"detail": "First-class honours."
}
]
}Source
The body markup with Jinja, the stylesheet placed in <head>.
{#- Two-column resume: sidebar for contact, skills and languages; main column for profile, experience and education. -#}
{%- set date_pattern = "%b %Y" -%}
{%- macro period(start, end) -%}
{{ start | format_date(date_pattern) }} – {% if end %}{{ end | format_date(date_pattern) }}{% else %}Present{% endif %}
{%- endmacro -%}
{%- macro icon(name) -%}
<svg class="icon" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="#7dd3b0" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round">
{%- if name == "email" %}<rect x="1.5" y="3.5" width="13" height="9" rx="1.5"/><path d="M2 4.5l6 4.5 6-4.5"/>
{%- elif name == "phone" %}<path d="M4.2 1.8l2 3.1-1.4 1.4a8 8 0 0 0 4.9 4.9l1.4-1.4 3.1 2-.9 2.1c-.3.6-1 .9-1.6.7A13 13 0 0 1 1.3 6c-.2-.6.1-1.3.7-1.6z"/>
{%- elif name == "web" %}<circle cx="8" cy="8" r="6.5"/><path d="M1.5 8h13M8 1.5c2 2 2.6 4.2 2.6 6.5S10 12.5 8 14.5C6 12.5 5.4 10.3 5.4 8S6 3.5 8 1.5z"/>
{%- else %}<path d="M8 14.5s5-4.6 5-8.3A5 5 0 0 0 3 6.2c0 3.7 5 8.3 5 8.3z"/><circle cx="8" cy="6.3" r="1.8"/>
{%- endif %}
</svg>
{%- endmacro %}
<div class="sheet">
<main class="main">
<header class="intro">
<h1>{{ person.name }}</h1>
<p class="headline">{{ person.headline }}</p>
{%- if person.availability %}
<p class="availability">{{ person.availability }}</p>
{%- endif %}
</header>
<section class="profile">
<h2 class="main-title">Profile</h2>
{{ profile | markdown }}
</section>
<section>
<h2 class="main-title">Experience</h2>
<div class="timeline">
{%- for job in experience %}
<article class="entry{{ ' current' if not job.end_date else '' }}">
<div class="entry-head">
<h3>{{ job.role }}</h3>
<span class="dates">{{ period(job.start_date, job.end_date) }}</span>
</div>
<p class="org">{{ job.company }} · {{ job.location }}</p>
<ul class="highlights">
{%- for point in job.highlights %}
<li>{{ point }}</li>
{%- endfor %}
</ul>
</article>
{%- endfor %}
</div>
</section>
<section>
<h2 class="main-title">Education</h2>
{%- for study in education %}
<article class="study">
<div class="entry-head">
<h3>{{ study.qualification }}</h3>
<span class="dates">{{ period(study.start_date, study.end_date) }}</span>
</div>
<p class="org">{{ study.institution }}{% if study.detail %} · <span class="detail">{{ study.detail }}</span>{% endif %}</p>
</article>
{%- endfor %}
</section>
</main>
<aside class="sidebar">
<div class="monogram" aria-hidden="true">{{ person.initials }}</div>
<section class="side-section">
<h2>Contact</h2>
<ul class="contact">
<li>{{ icon("email") }}<span>{{ person.email }}</span></li>
<li>{{ icon("phone") }}<span>{{ person.phone }}</span></li>
<li>{{ icon("web") }}<span>{{ person.website }}</span></li>
<li>{{ icon("location") }}<span>{{ person.location }}</span></li>
</ul>
</section>
<section class="side-section">
<h2>Skills</h2>
<ul class="skills">
{%- for skill in skills %}
<li>
<span class="skill-name">{{ skill.name }}</span>
<span class="bar" role="img" aria-label="{{ skill.level }} out of 5"><span class="fill" style="width: {{ (skill.level / 5 * 100) | round | int }}%"></span></span>
</li>
{%- endfor %}
</ul>
</section>
<section class="side-section">
<h2>Languages</h2>
<ul class="languages">
{%- for language in languages %}
<li><span>{{ language.name }}</span><span class="lang-level">{{ language.level }}</span></li>
{%- endfor %}
</ul>
</section>
{%- if interests %}
<section class="side-section">
<h2>Interests</h2>
<p class="interests">{{ interests | join(" · ") }}</p>
</section>
{%- endif %}
</aside>
</div><title>{{ person.name }} – CV</title>
<style>
:root {
--teal: #12393a;
--teal-2: #1b4d4e;
--mint: #7dd3b0;
--mint-dark: #247a62;
--side-text: #dcebe7;
--side-muted: #a3c2bb;
--ink: #1d2626;
--muted: #5b6766;
--rule: #dfe6e4;
}
* { box-sizing: border-box; }
html {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
background: linear-gradient(90deg, var(--teal) 0, var(--teal) 66mm, #ffffff 66mm, #ffffff 100%);
}
body {
margin: 0;
color: var(--ink);
font-family: "Noto Sans", "Liberation Sans", Arial, sans-serif;
font-size: 8.6pt;
line-height: 1.45;
}
h1, h2, h3, p, ul { margin: 0; padding: 0; }
ul { list-style: none; }
.sheet { display: grid; grid-template-columns: 66mm 1fr; min-height: 296mm; }
/* The main column comes first in the markup, so the name is read first; `order` keeps the sidebar on the left. */
.sheet > .sidebar { order: -1; }
/* Sidebar */
.sidebar { padding: 14mm 8mm 12mm 9mm; background: var(--teal); color: var(--side-text); }
.monogram {
display: flex;
align-items: center;
justify-content: center;
width: 22mm;
height: 22mm;
margin-bottom: 9mm;
border: 0.6mm solid var(--mint);
border-radius: 50%;
font-family: "Playfair Display", "Liberation Serif", Georgia, serif;
font-size: 19pt;
font-weight: 700;
letter-spacing: 0.04em;
color: #ffffff;
}
.side-section { margin-bottom: 8mm; }
.side-section h2 {
margin-bottom: 3mm;
padding-bottom: 1.5mm;
border-bottom: 0.25mm solid var(--teal-2);
font-size: 7.2pt;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--mint);
}
.contact li { display: flex; align-items: flex-start; gap: 2.5mm; margin-bottom: 2mm; font-size: 8pt; line-height: 1.35; }
.icon { flex: none; width: 3.6mm; height: 3.6mm; margin-top: 0.3mm; }
.contact span { overflow-wrap: anywhere; }
.skills li { margin-bottom: 2.6mm; }
.skill-name { display: block; margin-bottom: 1mm; font-size: 8pt; }
.bar { display: block; height: 1.5mm; border-radius: 1mm; background: var(--teal-2); overflow: hidden; }
.fill { display: block; height: 100%; border-radius: 1mm; background: var(--mint); }
.languages li { display: flex; justify-content: space-between; gap: 2mm; margin-bottom: 1.6mm; font-size: 8pt; }
.lang-level { color: var(--side-muted); }
.interests { font-size: 8pt; line-height: 1.55; color: var(--side-text); }
/* Main column */
.main { padding: 14mm 13mm 12mm 11mm; background: #ffffff; }
.intro { margin-bottom: 7mm; padding-bottom: 5mm; border-bottom: 0.3mm solid var(--rule); }
.intro h1 {
font-family: "Playfair Display", "Liberation Serif", Georgia, serif;
font-size: 27pt;
font-weight: 700;
line-height: 1.1;
color: var(--teal);
}
.headline {
margin-top: 1.5mm;
font-size: 9pt;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--mint-dark);
}
.availability { margin-top: 1.5mm; font-size: 8pt; color: var(--muted); }
.main-title {
display: flex;
align-items: center;
gap: 3mm;
margin-bottom: 3mm;
font-family: "Playfair Display", "Liberation Serif", Georgia, serif;
font-size: 13pt;
font-weight: 700;
color: var(--teal);
break-after: avoid;
page-break-after: avoid;
}
.main-title::after { content: ""; flex: 1; border-top: 0.3mm solid var(--rule); }
.profile { margin-bottom: 6mm; }
.profile p { margin-bottom: 2mm; font-size: 9pt; line-height: 1.55; }
.profile strong { color: var(--teal); }
.timeline { position: relative; margin-bottom: 5mm; padding-left: 5mm; }
.timeline::before { content: ""; position: absolute; top: 1.5mm; bottom: 2mm; left: 0.7mm; border-left: 0.3mm solid var(--rule); }
.entry { position: relative; margin-bottom: 4.5mm; break-inside: avoid; page-break-inside: avoid; }
.entry::before {
content: "";
position: absolute;
top: 1.3mm;
left: -5.3mm;
width: 2.2mm;
height: 2.2mm;
border: 0.4mm solid var(--mint-dark);
border-radius: 50%;
background: #ffffff;
}
.entry.current::before { background: var(--mint-dark); }
.entry-head { display: flex; justify-content: space-between; align-items: baseline; gap: 4mm; }
.entry-head h3 { font-size: 10pt; font-weight: 700; color: var(--ink); }
.dates { flex: none; font-size: 7.8pt; font-weight: 700; color: var(--mint-dark); font-variant-numeric: tabular-nums; }
.org { font-size: 8.4pt; color: var(--muted); }
.highlights { margin-top: 1.2mm; }
.highlights li { position: relative; margin-bottom: 0.8mm; padding-left: 3.5mm; }
.highlights li::before {
content: "";
position: absolute;
top: 1.9mm;
left: 0.4mm;
width: 1.2mm;
height: 1.2mm;
border-radius: 50%;
background: var(--mint);
}
.study { margin-bottom: 3mm; break-inside: avoid; page-break-inside: avoid; }
.detail { font-style: italic; }
</style>Render it with the API
After adding the template to your workspace, render it by ID and pass your data. Arrays are shortened here.
curl -X POST https://api-eu.dynamicdocumentapi.com/v1/renders \
-H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C"
},
"data": {
"person": {
"name": "Anouk Delacroix-Hart",
"initials": "AD",
"headline": "Senior Product Designer",
"location": "Manchester, United Kingdom",
"email": "anouk.hart@example.com",
"phone": "+44 20 7946 0321",
"website": "anoukhart.example.net",
"availability": "Open to hybrid roles in the North West from November 2026"
},
"profile": "Product designer with **more than ten years of experience** shaping everyday services, from appointment booking for community clinics to planning tools for logistics teams. I work side by side with researchers and engineers, turn messy problems into prototypes that can be tested within days, and care about accessible, well-documented design systems.",
"skills": [
{
"name": "Interaction design",
"level": 5
},
{
"name": "Design systems",
"level": 5
}
],
"languages": [
{
"name": "English",
"level": "Native"
},
{
"name": "French",
"level": "Fluent"
}
],
"interests": [
"Risograph printing",
"Fell running"
],
"experience": [
{
"role": "Senior Product Designer",
"company": "Lanternfish Health",
"location": "Manchester",
"start_date": "2022-03-01",
"end_date": null,
"highlights": [
"Led the redesign of appointment booking for 40 community clinics, cutting abandoned bookings by 23% in six months.",
"Built and documented a library of 60 accessible components now shared by four product teams."
]
},
{
"role": "Product Designer",
"company": "Cobbleworks Logistics",
"location": "Leeds",
"start_date": "2019-01-01",
"end_date": "2022-02-01",
"highlights": [
"Designed route-planning tools that cut the time to build a daily dispatch plan from 90 to 35 minutes.",
"Ran more than 50 usability sessions with drivers and depot staff across three regions."
]
}
],
"education": [
{
"qualification": "MA Interaction Design",
"institution": "Northgate School of Art",
"start_date": "2014-09-01",
"end_date": "2015-09-01",
"detail": "Distinction. Thesis on paper prototyping with older adults."
},
{
"qualification": "BA (Hons) Graphic Communication",
"institution": "University of Westmere",
"start_date": "2011-09-01",
"end_date": "2014-06-01",
"detail": "First-class honours."
}
]
},
"output": {
"format": "pdf",
"filename": "resume-two-column.pdf"
}
}'const response = await fetch("https://api-eu.dynamicdocumentapi.com/v1/renders", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C"
},
"data": {
"person": {
"name": "Anouk Delacroix-Hart",
"initials": "AD",
"headline": "Senior Product Designer",
"location": "Manchester, United Kingdom",
"email": "anouk.hart@example.com",
"phone": "+44 20 7946 0321",
"website": "anoukhart.example.net",
"availability": "Open to hybrid roles in the North West from November 2026"
},
"profile": "Product designer with **more than ten years of experience** shaping everyday services, from appointment booking for community clinics to planning tools for logistics teams. I work side by side with researchers and engineers, turn messy problems into prototypes that can be tested within days, and care about accessible, well-documented design systems.",
"skills": [
{
"name": "Interaction design",
"level": 5
},
{
"name": "Design systems",
"level": 5
}
],
"languages": [
{
"name": "English",
"level": "Native"
},
{
"name": "French",
"level": "Fluent"
}
],
"interests": [
"Risograph printing",
"Fell running"
],
"experience": [
{
"role": "Senior Product Designer",
"company": "Lanternfish Health",
"location": "Manchester",
"start_date": "2022-03-01",
"end_date": null,
"highlights": [
"Led the redesign of appointment booking for 40 community clinics, cutting abandoned bookings by 23% in six months.",
"Built and documented a library of 60 accessible components now shared by four product teams."
]
},
{
"role": "Product Designer",
"company": "Cobbleworks Logistics",
"location": "Leeds",
"start_date": "2019-01-01",
"end_date": "2022-02-01",
"highlights": [
"Designed route-planning tools that cut the time to build a daily dispatch plan from 90 to 35 minutes.",
"Ran more than 50 usability sessions with drivers and depot staff across three regions."
]
}
],
"education": [
{
"qualification": "MA Interaction Design",
"institution": "Northgate School of Art",
"start_date": "2014-09-01",
"end_date": "2015-09-01",
"detail": "Distinction. Thesis on paper prototyping with older adults."
},
{
"qualification": "BA (Hons) Graphic Communication",
"institution": "University of Westmere",
"start_date": "2011-09-01",
"end_date": "2014-06-01",
"detail": "First-class honours."
}
]
},
"output": {
"format": "pdf",
"filename": "resume-two-column.pdf"
}
}),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const result = await response.json();
console.log(result);import os
import uuid
import requests
response = requests.post(
"https://api-eu.dynamicdocumentapi.com/v1/renders",
headers={
"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C",
},
"data": {
"person": {
"name": "Anouk Delacroix-Hart",
"initials": "AD",
"headline": "Senior Product Designer",
"location": "Manchester, United Kingdom",
"email": "anouk.hart@example.com",
"phone": "+44 20 7946 0321",
"website": "anoukhart.example.net",
"availability": "Open to hybrid roles in the North West from November 2026",
},
"profile": "Product designer with **more than ten years of experience** shaping everyday services, from appointment booking for community clinics to planning tools for logistics teams. I work side by side with researchers and engineers, turn messy problems into prototypes that can be tested within days, and care about accessible, well-documented design systems.",
"skills": [
{
"name": "Interaction design",
"level": 5,
},
{
"name": "Design systems",
"level": 5,
},
],
"languages": [
{
"name": "English",
"level": "Native",
},
{
"name": "French",
"level": "Fluent",
},
],
"interests": ["Risograph printing", "Fell running"],
"experience": [
{
"role": "Senior Product Designer",
"company": "Lanternfish Health",
"location": "Manchester",
"start_date": "2022-03-01",
"end_date": None,
"highlights": ["Led the redesign of appointment booking for 40 community clinics, cutting abandoned bookings by 23% in six months.", "Built and documented a library of 60 accessible components now shared by four product teams."],
},
{
"role": "Product Designer",
"company": "Cobbleworks Logistics",
"location": "Leeds",
"start_date": "2019-01-01",
"end_date": "2022-02-01",
"highlights": ["Designed route-planning tools that cut the time to build a daily dispatch plan from 90 to 35 minutes.", "Ran more than 50 usability sessions with drivers and depot staff across three regions."],
},
],
"education": [
{
"qualification": "MA Interaction Design",
"institution": "Northgate School of Art",
"start_date": "2014-09-01",
"end_date": "2015-09-01",
"detail": "Distinction. Thesis on paper prototyping with older adults.",
},
{
"qualification": "BA (Hons) Graphic Communication",
"institution": "University of Westmere",
"start_date": "2011-09-01",
"end_date": "2014-06-01",
"detail": "First-class honours.",
},
],
},
"output": {
"format": "pdf",
"filename": "resume-two-column.pdf",
},
},
timeout=90,
)
response.raise_for_status()
print(response.json())