Carbone alternative
Carbone and DocMint solve the same problem: you have a Word, Excel or PowerPoint file with placeholders in it, you have JSON, and you want the filled document back. This page is the comparison written by the people who build DocMint, so read it as such — every number about Carbone was read off carbone.io/pricing.html on 29 August 2026, and every number about DocMint was measured against the live API on this domain on the same day. The last section is the one about when you should not switch.
The short version
Carbone is the older, larger and more capable product. It has a template studio, a bigger formatter library, a choice of PDF converters, on-premise and private-cloud licensing, and a free tier three times the size of ours. DocMint is a narrower tool with two properties Carbone does not have — it will tell you what a template needs before you send data, and it refuses to render a document with a placeholder behind which there is nothing — and it is roughly an order of magnitude cheaper per document at volume.
The one-line version: if the thing that costs you time is guessing which JSON keys a template wants and documents going out with silently empty fields, DocMint was built for exactly that. If the thing you need is a studio, charts, barcodes or an on-premise licence, Carbone has them and we do not.
What counts as one document
This is the first thing to get straight, because the sticker prices are not comparable until you have. Carbone's pricing page defines its unit like this, verbatim:
"A Document is counted each time a report is generated with an injected data
(JSON + images) smaller than 1 MB. Examples:
- 0.5 MB = 1 document
- 1.2 MB = 2 documents
- 2.3 MB = 3 documents."So a Carbone "document" is a megabyte of input, not a document. Push a 2.3 MB payload — an invoice with a few embedded photographs will do it — and one PDF costs three. The page also says that anything over your plan's allowance "will be invoiced separately", so the meter does not stop at the ceiling.
DocMint counts differently and, we would argue, more predictably: one credit per document produced. Converting that document to PDF costs one more, because the conversion is a full LibreOffice process and costs about a hundred times the CPU of the fill. Nothing else is metered. Payload size does not enter into it, up to the flat 8 MB request limit.
The two units disagree in both directions, and it is worth being honest about that: a workflow that renders many small documents is cheaper per document under Carbone's rule than the headline price suggests, because several small payloads still cost one each — no, they do not aggregate; each render is its own count. A workflow that renders large documents, or embeds images, is where the rule bites.
Price per document, worked through
Carbone Cloud, monthly billing, read on 29 August 2026. DocMint's plans are on the pricing section of the home page.
| Plan | Price | Documents / month | Per document |
|---|---|---|---|
| Carbone Free | €0 | 100 | — |
| Carbone Essential | €29 (€26 billed annually) | 1,000 | €0.029 |
| Carbone Advanced | €159 (€149 billed annually) | 20,000 | €0.008 |
| DocMint Free | $0 | 30 | — |
| DocMint Starter | $9 | 2,000 | $0.0045 |
| DocMint Pro | $29 | 20,000 | $0.00145 |
| DocMint Scale | $99 | 100,000 | $0.00099 |
The row that does the work is the 20,000-document row: €159 against $29 for the same number of documents, and that is before Carbone's megabyte rule is applied to a payload with images in it. At the other end, Carbone's free tier is 100 documents a month against our 30 — more than three times ours. If you are evaluating, or if 100 documents a month is genuinely your volume, Carbone's free tier is the better free tier and you should use it.
One more thing the table does not show: Carbone's free plan runs the Community Edition. Their own pricing page says the Enterprise Features — "dynamic images, colors, barcodes, charts, HTML, aggregations, PDF operations and more" — are unlocked by a licence, and "without a license, Carbone runs the free Community Edition". DocMint has no feature ladder; every plan including the free one has every feature we have. That is less impressive than it sounds, because the list of features we have is shorter.
Asking a template what it needs
Here is the loop this replaces. You have a .docx from your finance team. The
placeholder names are inside a zipped binary that your workflow tool cannot open. So you guess the
keys, render, open the result in Word, look for the field that came out empty, and guess again.
DocMint answers the question directly. POST /v1/inspect takes the template and
returns a typed, nested field list — free, no document produced, no credit charged. Run live on
29 August 2026 against a three-placeholder invoice template, abridged:
POST /v1/inspect HTTP 200, 0 credits
{ "fields": [
{ "name": "invoice_no", "scope": "", "type": "string", "required": true,
"locations": ["word/document.xml, paragraph 1"] },
{ "name": "items", "scope": "", "type": "array", "repeating": true,
"formatters": ["sumProduct", "currency"],
"locations": ["word/document.xml, paragraph 2",
"word/document.xml, paragraph 4"] },
{ "name": "price", "scope": "items", "type": "number", "required": true,
"inferred": true } ],
"names": ["invoice_no","customer","description","qty","price","items"],
"sample_data": { … a skeleton you can POST straight back … } }scope is what makes this a tree rather than a flat list of names:
price lives inside items, and the response says so instead of leaving you
to infer it. That is precisely the shape a form builder — or n8n's resourceMapper —
needs in order to render a repeating section instead of a raw JSON textarea.
Carbone's API has no equivalent. Its GET /templates family covers upload, download
and deletion; GET /templates/tags returns organisational folder labels, not the
placeholders inside the file. If you know of an introspection endpoint we have missed, tell us and
this paragraph gets corrected — we would rather be wrong in public than wrong on a customer's
invoice.
A placeholder your data does not have
In Carbone, a tag whose data is absent renders as nothing. The request succeeds, you get a file, and the gap is only discovered by whoever opens the document — which, for an invoice, is usually the customer.
DocMint treats this as an error by default. Measured live on 29 August 2026, with
price removed from the first line item:
POST /v1/render HTTP 422 — no document, no credit
{ "error": {
"code": "placeholder_unresolved",
"message": "The template uses {price|currency} but the data has no \"price\".",
"hint": "Add \"price\" to the data, or write {price|default:} to allow it to be absent.",
"details": {
"field": "price",
"location": "word/document.xml, paragraph 2",
"available": ["invoice_no","customer","items","description","qty"],
"format": "docx" },
"request_id": "dm_T2VKsfB09yAc" } }Three things in that response are the point: the location is where a human would look
(Invoice!C5 in Excel, slide 2, table "Items 5", row 2, cell 3 in
PowerPoint), the available list tells you which names do exist at that point in your
data, and the failure costs nothing. That last one is not a claim, it is a reading: eight
failed renders during the writing of this page, and GET /v1/usage reported
credits: 0 against all of them, with used unchanged at 7 before and after.
If you want Carbone's behaviour, you can have it: onMissing: "empty" relaxes the rule
wholesale, and {price|default:—} does it for one field. The difference is which way
round the default points.
When to stay with Carbone
These are real, and none of them is on a roadmap we can promise you.
- You want a studio. Carbone Studio lets somebody design and preview a template in the browser, and can be embedded white-label in your own application. DocMint has no template editor at all and none planned; you author in Word and upload the file.
- You need charts, barcodes, HTML-into-Word, or PDF operations. Carbone's Enterprise Edition has all of them. DocMint writes plain text, numbers, images and raw OOXML. If you need formatted HTML flowed into a Word document, DocMint is the wrong tool today.
- You need on-premise or a private cloud. Carbone sells both, with a lifetime licence option. DocMint is one hosted service in Frankfurt and nothing else.
- You want a choice of PDF engine. Carbone offers LibreOffice, OnlyOffice, Chromium and their own, plus PDF/A, watermarking and encryption. DocMint has one converter, one profile, no options.
- Their formatter library is bigger than ours. Aggregates such as
aggSumandcumSum, an i18n system, live currency conversion, block operators. Ours is 43 formatters covering the common cases. - You are at or under 100 documents a month. Their free tier is bigger. Use it.
- Uptime matters more than price. See the next section.
What we cannot claim
A comparison page that only lists the author's strengths is one you find out the truth about later, at a worse moment.
- No paying customer from outside our own circle yet. DocMint is new. Carbone has years of production users behind it and we have none to point at.
- The smallest free tier here. 30 documents a month against Carbone's 100.
- One region, one instance, no SLA. Frankfurt, a single small instance that restarts on every deploy, no third-party uptime monitor, no SOC 2 report. If an hour of downtime would damage your business, this is not yet the right dependency.
- PDF conversion runs one at a time per instance. Measured today: 1,346 ms server-side for a one-page PDF. A burst queues rather than slows. Carbone's Advanced plan does 10 renders in parallel.
- Known edges in spreadsheet formula rewriting, macros that do not survive a
.docmround trip, no delivery integrations, no web dashboard. All of them are listed on the home page in the section headed "What DocMint does not do yet", which is there so you read it before you build on it, not after.
If you do want to switch
Templates mostly move without editing. Carbone uses {d.name}-style tags; DocMint
accepts both {name} and {{name}} in all three formats, so a template
written for docxtemplater or for a mustache-style tool renders unchanged, and a Carbone template
needs its d. prefixes dropped. Sections use {#items}…{/items}.
# 1. What does this template actually need? Free, no render.
curl -X POST https://docmint.app.mintapis.com/v1/inspect \
-H "Authorization: Bearer dm_live_xxx" \
-H "Content-Type: application/json" \
-d '{"template_base64":"'"$(base64 -w0 invoice.docx)"'"}'
# 2. Render it. Ask for document, pdf, or both — per request.
curl -X POST https://docmint.app.mintapis.com/v1/render \
-H "Authorization: Bearer dm_live_xxx" \
-H "Content-Type: application/json" \
-d '{"template":"invoice","data":{…},"output":"pdf"}' \
--output invoice.pdfA key is one POST /v1/signup away, no card and no dashboard, and the free tier is
enough to wire a workflow end to end and see it work before deciding anything. The full
API reference documents every error code, and the
n8n page covers the workflow route.