Tanqeet تنقيط

Arabic HTML or URL to PNG

HTML or a public URL in, PNG out — the same Chromium engine, fonts and base CSS as the PDF product, so the image never disagrees with the document. Arabic shaping, joining and font composition are checked on every request; a raster image has no text layer, so that is the guarantee it can carry.

Try it, no signup Full reference

What it is for

Social cards

Arabic Open Graph and Twitter card images generated from the same template as the page, so the preview on WhatsApp or X shows real shaped Arabic, not a row of boxes.

Invoice & receipt thumbnails

A dashboard thumbnail rendered from the exact HTML that produced the PDF. Same engine, same fonts: the thumbnail cannot show something the document does not.

Email receipts

Inline Arabic images for clients that strip attachments or block web fonts, where the email still needs to show a correctly shaped amount and name.

Page screenshots

A public URL in, a full-page PNG out — for QA, archiving, or a preview thumbnail of an Arabic page you do not control the rendering of.

How it works

POST /v1/render/png

Send html or a public url. Control the capture with width, height, scale (2 by default, for a sharp image), full_page and padding. Add verify:true to get the gate report back with the image, base64-encoded, as JSON.

bash
curl -X POST https://api.tanqeet.smeepo.com/v1/render/png \
  -H "Authorization: Bearer $TANQEET_KEY" -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/ar/receipt/42","width":800,"scale":2}' \
  -o receipt.png
JavaScript
const res = await fetch("https://api.tanqeet.smeepo.com/v1/render/png", {
  method: "POST",
  headers: { "Authorization": `Bearer ${process.env.TANQEET_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ html, width: 1200, full_page: true, verify: true })
});
const { png_base64, verification } = await res.json();
if (!verification.passed) {
  throw new Error(verification.gates.filter(g => !g.passed).map(g => g.name).join(", "));
}
await fs.promises.writeFile("card.png", Buffer.from(png_base64, "base64"));

The report carries G0 (input hygiene), G2 (contextual forms), G3 (missing glyphs), G6 (mark collision) and G7 (font composition) — everything about shaping and font choice that a raster image can still get wrong. G1, the PDF text-layer round-trip, does not apply: there is no text layer to extract. See how we verify.

Pricing

No separate charge for images. All three products — Render, Image, Verify — are on every plan, and a PNG counts as one document, the same as a PDF or a verify call.

Pricing