JSON to Excel API

Post JSON, get a real .xlsx file back, with styles.

Generates real Excel files from JSON, with styles. Formula-looking cell values are neutralized by default, so user data cannot inject a formula. Small files return synchronously; large ones run in the background with an optional webhook.

What it does

  • Real .xlsx output with cell styles
  • Formula injection is neutralized by default
  • Synchronous for small files, background jobs with a webhook for large ones
  • Accepts the legacy Excelerant payload shape unchanged
  • Never charged on a 4xx or a 5xx

Endpoints

MethodPathDescriptionModes
POST /v1/xlsx/generate Generate a spreadsheet sync, async (sync: 5,000 rows)

Base URL: https://api.justapi.tech

Pricing

OperationPrice
Generate$0.005per file
Cells$0.00002per 1,000 cells

You are not charged for a failed request, and never for a job whose output is not smaller than its input.

Limits

Max Rows1,048,576
Max Columns16,384
Max Sheets64

It is just a ZIP of XML

An .xlsx file is a ZIP archive containing XML. That is why this one runs at the edge with no container, no native binary, and a response in well under a second for a typical file.

curl https://api.justapi.tech/v1/xlsx/generate \
  -H "Authorization: Bearer ak_live_..." \
  -d '{"sheets":[{"name":"Report","columns":[{"header":"ID","key":"id"}],"rows":[{"id":"1"}]}]}'

Things that go wrong elsewhere

Types. A number written as a string gets the "number stored as text" warning and breaks every formula downstream. We infer and declare types properly.

Formula injection. A cell beginning with =, +, - or @ can execute a command when the file is opened. If your rows come from user input, this is a real vulnerability. We neutralize it by default.

Control characters. A single null byte in your data produces a file Excel refuses to open with an unhelpful error. We strip characters that are illegal in XML 1.0.

Memory. Building the whole document in memory before writing it works fine until someone asks for 200,000 rows. We stream.

Already using another provider?

We accept the legacy payload shape — an array with name, cols and rows — without modification. Point your existing call at this URL, change the auth header, and you are done.