Coming Soon — REST API

Generate PDFs with
a single API call.

POST your document schema as JSON, get pixel-perfect PDF bytes back. Works with Python, Ruby, Go, PHP — any language that can make HTTP requests.

You're on the list! We'll reach out when the API is ready for early access.

Be first to get access. No spam, just one email when we launch.

Three lines of code. Any language.

curl -X POST https://api.tangentflow.com/v1/render \
  -H "Authorization: Bearer tf_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "blocks": [
      { "type": "heading", "text": "Invoice #1047", "level": 1 },
      { "type": "table", "headers": "Item, Qty, Price",
        "rows": "Widget Pro, 1, $299.00" },
      { "type": "qr-code", "data": "https://pay.example.com/inv/1047" }
    ]
  }' \
  -o invoice.pdf
import requests

response = requests.post(
    "https://api.tangentflow.com/v1/render",
    headers={"Authorization": "Bearer tf_your_key"},
    json={
        "blocks": [
            {"type": "heading", "text": "Invoice #1047", "level": 1},
            {"type": "table", "headers": "Item, Qty, Price",
             "rows": "Widget Pro, 1, $299.00"}
        ]
    }
)

with open("invoice.pdf", "wb") as f:
    f.write(response.content)
const response = await fetch("https://api.tangentflow.com/v1/render", {
  method: "POST",
  headers: {
    "Authorization": "Bearer tf_your_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    blocks: [
      { type: "heading", text: "Invoice #1047", level: 1 },
      { type: "table", headers: "Item, Qty, Price",
        rows: "Widget Pro, 1, $299.00" },
    ],
  }),
})

const pdf = Buffer.from(await response.arrayBuffer())
fs.writeFileSync("invoice.pdf", pdf)
body := strings.NewReader(`{
  "blocks": [
    {"type":"heading","text":"Invoice #1047","level":1},
    {"type":"table","headers":"Item, Qty, Price",
     "rows":"Widget Pro, 1, $299.00"}
  ]
}`)

req, _ := http.NewRequest("POST",
    "https://api.tangentflow.com/v1/render", body)
req.Header.Set("Authorization", "Bearer tf_your_key")
req.Header.Set("Content-Type", "application/json")

resp, _ := http.DefaultClient.Do(req)
pdf, _ := io.ReadAll(resp.Body)
os.WriteFile("invoice.pdf", pdf, 0644)

Tables That Wrap

Per-cell text wrapping with auto-sized columns, right-aligned numbers, and header repeat on page breaks.

Every Language

Pixel-perfect text wrapping for Latin, CJK, Arabic, Hindi, emoji, and mixed-direction text.

Form Filling

Upload a PDF template, fill form fields with your data, get a completed PDF back.

QR Codes

Generate QR codes inline in your documents. Payment links, URLs, or any data.

Visual Builder

Design your template visually, export as JSON, use it in your API calls. No JSON writing needed.

No Data Stored

Documents generated in-memory, streamed back, never stored. EU servers. GDPR compliant by design.

Simple, usage-based pricing.

Free tier included. Scale as you grow.

Plan Price PDFs / month Rate limit
Free$010010 req/min
Starter$9/mo1,00060 req/min
Growth$29/mo10,000120 req/min
Scale$99/mo100,000300 req/min

Get early access.

Join the waitlist and be first to generate PDFs via API.

Join the Waitlist