pdfpeek

Build a styled Excel (.xlsx) workbook from JSON sheets, columns and rows (pdfpeek)

pdfpeek: the workbook, base64 in file (an .xlsx), with sheets, rows, cells, formula_like_strings and a sheet_summary per sheet. The header row is bold and frozen with filter buttons, columns are fitted to their content, and a column type (string, number, integer, date, datetime, boolean, currency, percent) sets the cell type and number format. Body: {"sheets": [{"name": "Sales", "columns": [{"header": "Region"}, {"header": "Units", "type": "integer"}, {"header": "Revenue", "type": "currency"}, {"header": "Share", "type": "percent"}, {"header": "Closed", "type": "date"}], "rows": [["North", 120, 4800.5, 0.42, "2026-09-30"], ["South", 85, 3400, 0.31, "2026-10-01"]]}], "filename": "sales-q3.xlsx"}. Rows are arrays (values by position) or objects (values by header); without columns, object rows give the headers from their keys in first-seen order and array rows get no header row. Dates are ISO 8601 (a datetime with a zone is converted to UTC); a percent is a fraction (0.25 shows as 25%). Formulas are never written: any string, also one that begins with = + - or @, is stored as text, so a value such as =HYPERLINK(...) cannot run. Limits: 20 sheets, 50,000 cells in all (header cells included), 32,767 characters per cell, sheet names of at most 31 characters without [ ] : * ? / ; anything over is a 422 and is not charged.. Price: USD 0.005. No free tier (compress, to-images, from-images, OCR, HTML to PDF, website screenshots, Mermaid renders, PDF to Word, document to Markdown, Office to PDF, DOCX template fill, PPTX build, XLSX build, PDF tables and bank statements, PDF form filling, PDF pipelines, document translation and speech to text are never free). Typically under 1 s.

post/v1/docs/xlsx-build

Request

  • Base URL: https://docs.tanod.dev
  • URL: https://docs.tanod.dev/v1/docs/xlsx-build
  • Auth: none required

Request body

filenamestring nullable

Name of the returned file (default workbook.xlsx; .xlsx is added when missing; only letters, digits, space, dot, dash and underscore are kept).

output'base64' | 'url'

base64 (default): the file comes back inline as base64. url: the file is stored for 24 hours and the reply carries a download link (url, expires_at, bytes, content_type, sha256) instead of the base64, which keeps the file out of your context window.

Example request

{
  "filename": "sales-q3.xlsx",
  "sheets": [
    {
      "columns": [
        {
          "header": "Region"
        },
        {
          "header": "Units",
          "type": "integer"
        },
        {
          "header": "Revenue",
          "type": "currency"
        },
        {
          "header": "Share",
          "type": "percent"
        },
        {
          "header": "Closed",
          "type": "date"
        }
      ],
      "name": "Sales",
      "rows": [
        [
          "North",
          120,
          4800.5,
          0.42,
          "2026-09-30"
        ],
        [
          "South",
          85,
          3400,
          0.31,
          "2026-10-01"
        ]
      ]
    }
  ]
}

Response

Workbook: file (base64 .xlsx), sheets, rows, cells, formula_like_strings, sheet_summary and output_bytes.

operationstring required
sheetsinteger required
rowsinteger required
cellsinteger required
formula_like_stringsinteger
output_bytesinteger required

Changes

No recorded changes to this operation across all 1 revision of this API.