Generate a meeting minutes template with decisions and action items
Three agenda topics become three numbered sections, each with room for discussion notes, decisions and action items with an owner: enter the title, date, attendees and agenda before the meeting starts, and nothing is invented. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Turn a meeting title, date, attendee list, and agenda into a consistent minutes document before the conversation begins. The generator creates an ordered section for every agenda item, with dedicated space for discussion notes, decisions, and accountable action items. It returns both structured data and ready-to-edit Markdown, making the result useful for a person taking notes as well as an application preparing documents automatically. Nothing is inferred or invented, so the template stays faithful to the meeting information you provide.
Prepare the inputs before the meeting
Start with the meeting title exactly as it should appear in the record, then supply a date or date-and-time label that your participants will recognize. Add attendee names in the order that makes sense for your organization; the generator preserves that order rather than sorting or rewriting names. Finally, enter each agenda topic as a separate item and arrange the list in the sequence planned for the meeting.
Clear, outcome-oriented topics such as “Approve the release scope” or “Assign onboarding owners” make the resulting document easier to use than vague labels. At least one agenda item is required because the core purpose of the capability is to create a working section for every planned topic. The input is treated as display-ready information: the generator normalizes unnecessary whitespace, but it does not correct names, interpret dates, or add participants.
Review those details before generating the template so the final minutes begin with an accurate header and a dependable attendance record.
Capture discussion, decisions, and actions consistently
Each agenda item becomes a numbered section with three distinct places to record what happened. Use discussion notes for context, alternatives, questions, and evidence considered during the conversation. Put only agreed outcomes in decisions, phrased so someone who did not attend can understand what was settled.
Use the action items table for work that must happen after the meeting, including a clear action, one accountable owner, a due date, and a status. Keeping these categories separate prevents an interesting comment from being mistaken for a commitment and makes later follow-up much faster. The structured output mirrors the same organization with empty discussion notes, decision arrays, and action item arrays for each topic.
Applications can populate or transform those fields, while people can work directly in the Markdown template. Because no generated prose is inserted into the blank sections, the document remains neutral and does not imply that a decision or assignment occurred before participants actually agreed to it.
Store, share, and automate the finished record
After the meeting, remove unused blank rows, confirm owners and dates, and circulate the minutes while the conversation is still fresh. The Markdown output works well in repositories, knowledge bases, ticket descriptions, and editors that support simple text formatting. The structured agenda records are useful when another system needs to create tasks, index decisions, or render the same content in a different document format.
Stable ordering makes repeated generation predictable, so teams can use the capability inside a workflow without manual rearrangement. Processing is deterministic and local to the capability: it makes no network calls, uses no model, and never adds facts beyond the supplied title, date, attendees, and topics. The result is intentionally a starting document; recording and approving the actual minutes remains the responsibility of the meeting participants.
What you can do with it
Prepare recurring team meetings
Create the same clear note-taking structure from each meeting's current attendees and agenda without copying an old document.
Standardize governance records
Give every review topic an explicit decisions area and action table so approvals and responsibilities are easy to audit.
Build a meeting workflow
Generate predictable structured records that another application can publish, enrich, or connect to task creation after the meeting.
FAQ
Does the generator write the meeting minutes for me?
No. It creates blank, organized sections for notes, decisions, and action items without inventing meeting outcomes.
What formats are returned?
The result includes a ready-to-edit Markdown template and structured agenda data for programmatic use.
Are attendees and agenda items reordered?
No. Their original order is preserved so the generated template follows the sequence you supplied.
Can I include a time or time zone in the date?
Yes. The date is a display label, so it can include a time and time zone exactly as you want them shown.
What goes in the action items table of the minutes?
Each action item gets a clear action, one accountable owner, a due date and a status. Keep it for work that must happen after the meeting, and put agreed outcomes under decisions instead.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/doc/meeting-minutes-template \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"meeting_title":"Product launch readiness review","date":"2026-08-04, 10:00 UTC","attendees":["Maya Chen","Jordan Lee","Alex Morgan"],"agenda_items":["Confirm launch scope","Review operational risks","Assign launch-day owners"]}'const res = await fetch("https://api.kit.forhosting.com/doc/meeting-minutes-template", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"meeting_title": "Product launch readiness review",
"date": "2026-08-04, 10:00 UTC",
"attendees": [
"Maya Chen",
"Jordan Lee",
"Alex Morgan"
],
"agenda_items": [
"Confirm launch scope",
"Review operational risks",
"Assign launch-day owners"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/meeting-minutes-template",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"meeting_title": "Product launch readiness review",
"date": "2026-08-04, 10:00 UTC",
"attendees": [
"Maya Chen",
"Jordan Lee",
"Alex Morgan"
],
"agenda_items": [
"Confirm launch scope",
"Review operational risks",
"Assign launch-day owners"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/meeting-minutes-template", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"meeting_title":"Product launch readiness review","date":"2026-08-04, 10:00 UTC","attendees":["Maya Chen","Jordan Lee","Alex Morgan"],"agenda_items":["Confirm launch scope","Review operational risks","Assign launch-day owners"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"meeting_title":"Product launch readiness review","date":"2026-08-04, 10:00 UTC","attendees":["Maya Chen","Jordan Lee","Alex Morgan"],"agenda_items":["Confirm launch scope","Review operational risks","Assign launch-day owners"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/meeting-minutes-template", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"meeting_title": "Product launch readiness review",
"date": "2026-08-04, 10:00 UTC",
"attendees": [
"Maya Chen",
"Jordan Lee",
"Alex Morgan"
],
"agenda_items": [
"Confirm launch scope",
"Review operational risks",
"Assign launch-day owners"
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.meeting_minutes_template",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_attendees | 500 |
max_agenda_items | 100 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Store, share, and automate the finished record
You can run it free in the browser for an individual meeting or call the API for $0.002 when preparing templates from calendars, planning systems, or internal forms.
Technical questions
What happens if I provide no agenda items?
The request returns an invalid_input error because at least one agenda item is required.
How much does it cost?
It is free to run in your browser, or $0.002 per request through the API.