apyhub
Back
DEVELOPER TOOLS · SMART GENERATION

Diagram, Math and Code Render API

What it does

Code Diagram Math Renderer turns source text into rendered images or files for code snippets, diagrams, and TeX expressions. Send a code block, diagram source, or math formula, and get back a rendered asset with metadata such as width, height, format, engine, cache status, warnings, and timing information.

Use the code rendering endpoint when you need highlighted source code with optional line numbers, a theme, a title bar, background colour, and output control through scale, width, and format. It accepts source code plus optional language and theme hints, and can return JSON with a PNG data URI or bytes in SVG, PNG, PDF, JPEG, or WebP.

Use the diagram endpoint for Mermaid, Graphviz, D2, or Vega-Lite input. Provide the engine and source, and you can also set layout, theme, background, width, scale, and download behaviour. This is useful for turning architecture diagrams, flowcharts, and data visualisations into shareable assets for docs, pull requests, or generated reports.

Use the math endpoint to render TeX with MathJax. It supports colour, font size, display mode, background, width, scale, format, and download. That makes it a fit for documentation systems, educational content, and apps that need consistent formula rendering without bundling fonts or a browser renderer.

▣ ENDPOINT 01 / 03
POST
Render source code
https://api.eu.apyhub.com/callable-labs/diagram-math-code-render-api/code

QUICKSTART

GUIDE

Quickstart

Render a small snippet of source code with the default JSON output.

curl -X POST "https://api.eu.apyhub.com/callable-labs/diagram-math-code-render-api/code" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "def add(a, b):\n    return a + b"
  }'

What you'll get back

Returns a JSON object with rendering metadata such as cache, width, engine, format, height, data_uri, warnings, queued_ms, render_ms, media_type, and engine_version. The example output below shows the typical shape.

{
  "format": "png",
  "media_type": "image/png",
  "width": 220,
  "height": 74,
  "data_uri": "data:image/png;base64,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",
  "warnings": [],
  "engine": "code",
  "engine_version": "2.21.0",
  "cache": "hit",
  "render_ms": 0,
  "queued_ms": 0
}
TRY ITLIVE · 50 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
CodeRequest*
Render source code with Pygments highlighting.
Source code. ≤ 64 KiB via POST, ≤ 8 KiB via GET, ≤ 2000 lines. Long listings fit as `format=svg` (no pixel ceiling); raster output is limited to 8192×8192 px (~380 lines at 1×).
Zoom the output 0.5–4×. Ignored when `width` is set. Raster and PDF output is capped at 8192×8192 px on the hosted plans (WebP 4096×4096); SVG has no ceiling.
Pygments style name. Curated: `default`, `friendly`, `monokai`, `dracula`, `github-dark`, `solarized-dark`, `solarized-light`, `nord`, `one-dark`, `gruvbox-dark`; any other Pygments style name is accepted too.
Filename shown in the window bar (implies `window`).

About this endpoint

What it does

Renders source code with Pygments highlighting and returns the rendered output plus metadata about the render. The request body contains the source code and optional rendering options such as format, theme, width, and scale.

Request Body

ParameterTypeMandatoryDescription
sourceStringYesSource code. ≤ 64 KiB via POST, ≤ 8 KiB via GET, ≤ 2000 lines. Long listings fit as format=svg (no pixel ceiling); raster output is limited to 8192×8192 px (~380 lines at 1×).
scaleNumberNoZoom the output 0.5–4×. Ignored when width is set. Raster and PDF output is capped at 8192×8192 px on the hosted plans (WebP 4096×4096); SVG has no ceiling. Default: 1.
themeStringNoPygments style name. Curated: default, friendly, monokai, dracula, github-dark, solarized-dark, solarized-light, nord, one-dark, gruvbox-dark; any other Pygments style name is accepted too. Default: default.
titleStringNoFilename shown in the window bar (implies window).
widthIntegerNoTarget width in pixels (16–4096); height follows the aspect ratio and must stay within the same pixel ceiling. Overrides scale.
formatENUMNoOutput format. Allowed values: json, svg, png, pdf, jpeg, webp. Default: json. json returns a PNG data URI plus metadata; svg/png/pdf/jpeg/webp return the bytes.
windowBooleanNoDraw a macOS-style window title bar. Default: false.
downloadBooleanNoSend Content-Disposition: attachment so browsers save the file. Default: false.
languageStringNoPygments language name, e.g. python; auto-detected when omitted.
backgroundStringNoBackground colour as #rrggbb/#rgb, a CSS name, or transparent for none.
line_numbersBooleanNoPrint a line-number gutter. Default: false.

Response

Returns a JSON object with cache, width, engine, format, height, data_uri, warnings, queued_ms, render_ms, media_type, and engine_version fields. cache is an ENUM string, warnings is an array of strings, width and height are integers, queued_ms and render_ms are integers, and the remaining fields are strings.

AttributeTypeMandatoryDescription
cacheENUMNoRender cache outcome. Allowed values: hit, miss.
widthIntegerNoRendered output width in pixels.
engineStringNoRendering engine name.
formatStringNoOutput format.
heightIntegerNoRendered output height in pixels.
data_uriStringNoRendered data URI.
warningsString ArrayNoWarning messages returned by the renderer.
queued_msIntegerNoTime spent waiting in queue, in milliseconds.
render_msIntegerNoTime spent rendering, in milliseconds.
media_typeStringNoMedia type of the rendered output.
engine_versionStringNoRendering engine version.

Body

Name
Type
Description
bodyREQUIRED
object
Render source code with Pygments highlighting.
▣ ENDPOINT 02 / 03
POST
Render a diagram
https://api.eu.apyhub.com/callable-labs/diagram-math-code-render-api/diagram

QUICKSTART

GUIDE

Quickstart

Render a simple Mermaid diagram from source and get back a JSON response.

curl -X POST "https://api.eu.apyhub.com/callable-labs/diagram-math-code-render-api/diagram" \
  -H 'apy-token: $APY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "engine": "mermaid",
    "source": "graph TD; A[Start] --> B{Ready?}; B -->|yes| C[Ship]; B -->|no| A;",
    "format": "json"
  }'

What you'll get back

Returns a JSON object with fields such as cache (string), width (integer), engine (string), format (string), height (integer), data_uri (string), warnings (array of strings), queued_ms (integer), render_ms (integer), media_type (string), and engine_version (string).

{
  "format": "png",
  "media_type": "image/png",
  "width": 123,
  "height": 367,
  "data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHsAAAFvCAYAAABq97RGAAAc3klEQVR4nO2dCXQUZbbHb1bJwqLsEQQSSWaEBCQgNCigLIpDfMCgo8gyM28UZN7McQQ5HOc9Wc7AOEB4PvSwqGeGTXR4HmAIw0MgQ0BJQBKGZUQTCQqBhEBYlCxACHn3X6FCd5OEdNLVXd/yO6dOdVdXVXL6V/d+9/uquiqQNMoQSBpl0LIVQstWCC1bIbRshdCyFSLYk5WXTPvmoYDKgHjS+J+AoMO/Se7ytSebeCQ7JCRgT+sO4RWk8TMBVJRXgqzc2pOtPJJdcb3y3kHPtQ8M0Mnfr1RUVNL/Lsi9QR6itSmElq0QWrZCaNkKoWUrhJatEFq2QmjZCqFlK4SWrRBatkJo2QqhZSuElq0QWrZCaNkKoWUrhEdXqtiBw4ezKCNjN504kW28T0hIpOjoOOrffxBp6kaoyE5OnkMzZkxm4ZkUHw/JsbR3bxrNmTPNZb0nn+xNa9a8R94GBxr2jbmICBPZ+IK3b0+hKVNeo9Gjx7l8dvZsPmnujjCyjxypiiakbHfatYuqfr12bVVEHz2aVf0aWaBHj0TjoNi06ePqJgCMGvUCNwGDXfaHg6pt26p9btr0EZWUXDHWQ/MBdu7cYuwfDB060uXv2xlhZMfExBpzfOEQVxuVlbfn5muTHTu2sPAzhnxQWJjPTcB0Gj/+ZZow4WWX9QICiI4fz3bJIpW3doi5+75FQBjZiD6HYxBt3LiOZaQY8h2OwVyg9eLXt6Md0hDRKNycBZqfuYP9rF37/h2fodlYuvRDl31HRDQ1DoRhw5LqPODsilDV+OzZyUaKRUrHtHx5srEcB8KsWYvqtY/i4iucxnM4qguMyMYcy3Jzs13E4mBxfi8DwnW9hg9PMiaANhjC09PTjIPAXF4bWA8VPdKwKRKiq+bFLutCtmwIPaiCwmj69NnG6/T0tLuuD9Hx8b1ow4Y0WrhwhTFNmTKNVEG4yHYnMrKpyxyg/+0OIhiTe7fNrPJVQJjIxiAJIhNtqwnSOJYB5+5T27btjardeV0cDBERkUZXygRFGAq++oL9AnS7zPQvEkJ1vVCFo212BgIx0OIsG5U1ulRTp75ovDe7VkjZODgwCgb5aLuxfPnyxfX6H9BsYF848MwRugULVghTmQd4svK7r31T8bOZD/r1V5yIZlTQJjgInFO4J9uL2H0C5q84/yO5a4gn2wnXZiO6GjNi1djtRUaf4lQILVshtGyF0LIVQstWCC1bIbRshdCyFULLVggtWyG0bIXQshVCy1YILVshtGyF8Ph89vGs7z285EHjbW7ebNgvFDySXRkU9Hzm9qKBZHMqK28GHS9Mm9C13RMr67tNeUVpxMmiL0a1b9FtR8Q9rc+R3QkOTCMPkTJGExMTf8KzKVlZWUn13aZPnz5jbt68+UFgYOC5sLCwEXv27PmWJEPKNjsgIOAJnv7h4TbxLPpeFh5XVlb26YgRI+4hyZBSdmVl5ZCgoKBUD7dxOP1wr+v58+c9OlhEQDrZnMJb8Sxq//79R+q7zbPPPhvKkR3j/CtNft+fU/tmkgjpZHMqHsKiPIrqgoKCeBYc5ryM0zn2NfiRRx5JJkmQMY33YXHbPNmgvLy8K29zn/vyioqKprz8148++ui9JAHC/9bLHY7If+PZMk+2YaEPILIDAqo7J6U8zQ8NDf1benr6v0gSpIrsgQMHduTU+w13uXI92Y4PkH/xdv/FsgdERkYinRfx69UyiQZSRXZpaenjLMnjAZHMzMytPNtqvufCbB3LH8AvPyaJkK3Nxs3QdlMj4ZR+jNvrESQZssnuyP3rXdRIeARtJ3n4nEsRkEb2gAEDojgiH9q3b9931Eg+++yzAt7Xgw6H40GSCGlkX716FW3sXvIS3Pbv4S6Z7U/6eII0slmOg6cM8hK8r+08dSWJkEl2FFfQn5OX4H39k1P5GJIIaWSzmLFPP/30QfISPLb+De/z3ltj7VIghey+ffvifhn/nD179k3yIpwt/hoSEtKHJEEK2Tdu3OjDYg6Q9ynifT9CkiCFbBRSPO0n7/NPnh4mSZClzR7A49tfkZfhA0jLtiEJfAKj3hcr1JcDBw7k8axIllOcwsvGKBdXzafT0tKukjWU8oDNQyQBwsvmExZxPB7u0cUKHnKM07kUsoU/xclR/WOerIpq8BX+BkmA8JHNImJ45tHFCp7AUf01j6Z1IAmQoUB7kIUcJ4tg0ae40tdp3A6w6FCW8Q1ZBA+qfMezziQBwstm0Y9mZmbmOV0s6BH5+fmtWGhoXeu89NJLZatXr+4+ePDgi+Qh165du9C1a9drZAOEls0nKXC397MsusEPXuKx735czdd5m+IRI0Z826VLl5/dc889eeQhYWFhW3hmi6fMCd1mBwcHR7Foy7/I8vLysEuXLjUnwRE6srmPfT/PzpDFcERfKS0tjSTBEVo2p9/m3PU6RBYTGhp6paysrBkJjtBpnCO7PctuQhYTERFxkQtBjx7RYEdEr8absewfyHoqdWT7HwiwXDYXgtdliGyhZXMlbqnsnTt3djx06FBLll3OTUZIXeuRAAidxnEChIVfIi+xYcOG2A8++GDaU089tXLfvn1DLl++bEhs3rx5Ud++fYuc18VB8Pbbb086d+6c8VDPxYsXU/fu3VNfffXVLVFRUaVkQ0RP461ZttcP2D179iQlJCRksPjf/epXv0q+fv166MGDB9s5rzNv3rzXeHk4Pt+6devkgQMHrs/Ozu7/xz/+8TmyKULL5sgOqMATzbxMdHT0oZkzZ6YiQseMGZMTGxv7dVFRUQvz8yVLljhKSkpajR07dj0+xzKs36NHj9Tc3FwHop5siOhtdiBPXr18GPTr18+l7965c+cC5/cs3riW3BRt0rNnT+PhnydOnLClbNG7XnwGMtDrst3hDOISFFevXg3jMfVa2+Xvv/8+nGyI0LI5qkt5CiLrcZHdpEmTMh4vr1UoF3S6QPM23Pfls5M3Ishi3JsKM12j7XZevmvXrv4c8WXcDJwmGyJ6GkcEWZ4yuep2OaDQVm/evDknNTX1OW6/W7L8nG3btg05ffp0T1TluutlDV6V3axZs7I2bdrkYO68nE+EBLZq1eqC87KVK1cmc/X9j1OnTsWtWrVqKrphzz777DJU5WRThI5sHtm6yMWT19rsoUOH5vF0x03u+AC4/vzzz6e5L587d24KCYTQkc3t9TWW3YYsBhcv8DntMhIc0fvZGMK0/PfTOBESHh7ui7NrliL6CNoFrsgtH8DgfvMDYWFhtiy6PEH0atwnkc1pvBn3nYWPbKFl8+DGea6CC6gRcGa4yKNwda5TWFjYlMnm9TyObj5QrpNNEPqxEXzasRmfCDmVmZnZgixi8ODBTYqLiy/y37DlEKgnCN1m79+/H6k1YMCAAU3JIngcvJ2n9y+3KzL8sO8MC7mfLIIzRyf+G8JfRgyEl81Rd9rKX1niXuQ8O0USIMMP+44HBQVZFtnMA/w3pJAtQxo/zSNpVt52EtehefwbLzsiw++zT/AUTRbBUX0fZ44TJAEyPEnAUtmcOXpxkSaFbOEjOyQkBHddsOwkBcuOPnDggJZtBzIyMvAD+XiHw3EfeZnExERL79fia2S56V02bpFFXobb6k7crZPmMY1SyOZUm8OyY8nL8D6789i58OexTWSJ7KMchZ3J+yBbZJMkSCEbD27jCOxFXoa7XT/myes3wPUXUjzEjUUf45nX71XGopvwgSSNbCkiG49jZDHf4dHI5CVwJ2KuBeL4zFohSYJMD3FrfvLkyQTyEmVlZd1Y9pckETLJPspy4sl7dOcUrh+8akc4je/jmddOdbJoPJ7xC5IImSL7BEe2156wx/t6gmffkkRIE9lNmjQ5UlpaarTZffr06RgcHIxTk1d4OPWo83r4AT/NoSCaRRV3uQ1mPO/jKEmE0LJRfZ85cyYWz8y8evUqnrDbrHfv3uyzEr8WwSq/5slF2Op5p1aENguccH3ezTX89uWa9vvYY4+15wJt361xd2kQWnZBQUE7HtLcwy/v5b62y2fc5l7myHQpsFb94eR7DzwUMSF+YMsmR/dcmMDvadJ/drpD+LVr15AhfPG7b58idJv9+eef48bvn7iLvkVBaGho9ROBnEXjPeZ4j+XuG96q6qVK4UD4Ao3PNb+Mh6Q6X+h/697juWlpaZfxwl20SW3CtWwbwxE8gaquWDHALzdY+Aa8rk20SS3C43l7LduO7N2798uQkJA/sWSjoOLILOTXGXcTbVKD8PjOnTtLJ1uaIiQvLy+rQ4cOCSw5gaPyy6lJ67vWR7RJ207hwddKb3RzxI3vkZWzKWjnzp3vkmRIVXFyN2xDVFTUv495bPbNboldnqivaBMIL78a1DWsolNJ2hd/XUKSIfQP+2pi1bzv3n/gx5HjPRXtDHfLrp46VrKmpm6ZyMg0XFpVjDVSNKirWyYy0kR2fYsxT5AtwqWQbYVoE5mECy/bStEmsggXWrYvRJsc3X3h6umvS1ZP+H2nySQowsr2pWgT0YULKdsfok1EFi6cbH+KNhFVuFCy7SDaREThwsi2k2gT0YQLIduOok1EEm572XYWbSKKcFvLFkG0iQjCbStbJNEmdhduS9kiijaxs3DbyRZZtIldhdtKtgyiTewo3DYXL8gkGsQPatnk/h9FTFwz/+Rysgm2iGzZRDtzhCP8THbJqglvdJpCfsbvsmUWbWIX4X6VrYJoEzsI95tslUSb+Fu4X2SrKNrEn8J9Lltl0Sb+Eu5T2Vr0bfwh3Geyteg78bVwn8jWomvHl8Itl61F3x1fCbdUthZdf3wh3LKxcS3aMxIwlh4bMWn1vJPLyCIsiWwtuuEcSeOzZdklKyf+vtMr5GW8LluLbjxWCfeqbC3ae1gh3GuytWjv423hXpGtRVuHN4U3WrYWbT3eEt4o2Vq07/CG8AbL1qJ9T2OFN0i27KJzc6se5RUT4/WHADaaxgj3WLYVordvT6GdO7dUv2/bNoqn9jR06Ehq1y6KfM3rr1dd/btw4QpPNqMdO7bwlFL93uEYTKNHv0DepqHCPRoutSqiCwsL6PDhLKqsJGM6ezafNmxYR5MmPUPp6WkkAvj/ly1bRNHRsRQfn0jh4ZG0fHkyrVnj/VupJQxu2aRDXMTPPR1arffN5X2Rup0jqbj4Ck2cmERr175P/fsPJrsTExNLq1enUGRk0+plr7wyjjIydtOECd6/yRKE8wzCqb4RXi/Z/mij8aWhzTxyJOuOz9aufc9Yjmjq0SPRSPfDhydVf47M8OGH73Pbm2O0v9gPZEye/JqLDIB9fPjhe8Yc62EdZ7D9ihWLjeXubfjGjeuM7WbPTr5jvwD3PccjLKzCU+F1pnE8PMWfxVhJSTFFRES6LJszZ7qR4h2OQbRgwQojZSYnz3FJl2gW8CWPGvW8sQ7mhw9n0tSpL7rsC6JmzJhspNxZsxYZ682ZM83Y3gSCcfBs3PjRHf8fsk5NkgH+JxwoVkS1M56k9Doje8W0E09EdQt/wVeinaMYxQ6+rPHjb39Z6elpxrR06YfVUYbIBps2fVT9xWKZubyKREpISDRqADMbAEQ02lhEpgmKQxwAKBBNhg1LMvaPpsWUi6IS72sqwHDg4fNp02b5pAmC8JB7Ap9753e5X//mv2P+p7b16pQ9ZXFMKkf2R3h4ii+Em1WwybBhI10iAwcDvmxEvPOBgWX44p1FgvT03XTihOsTkbGduQ7Wdz6YAD5zzyb4P9B0pKenVTcX6D3gQHFP7ThAse6UKa+5NC1Wcqs6X1+XaHDXNhu3cMRTchjLhX/6aaYxxxeGtInoRuSYXyjaYEh1PyjcwfYzZkwxpCFS0V5HRLimW+wH4DN33AWi+wfhmzZ9bAhEWseBgsh1p7i42JhHR/umj+5JN6xeBZovhQN82dOnzzaicM6c17nK3Wwshzx8hjReF0ijWBfVsTOIOBMzHeMAck+1aLOd0zhAKkd6x4GEgxD7rylyIyMjjSYDc6vxtL9d7342hONmrbhpK/kIpNjCwnyj/QNIsfiyzRGu2kCadxeISHQHQt33hajF33QHfxvrmxmnthSNgxFdSKtH3xoysOLRoIqvheMLxReMqheMHj3OeJ+cPNdoj02QAVD9miDqzAIPQLTz5yY4mNAPhkCkdYieO/f1O9psEzQp2C/WHTWq5pExZJUnn+xd48HlLXwyggZ8Ldw9upcuXUdt2rQzukj4UjGhDb9y5YfqbaZMmcbrtDe6Wvgc644f/9Id+8bBhP1jpOunP33cqNbRpastKpHKAdK0P4ZxgU/Hxk3scDIEkYuCyLWbdZuqlFxQ6+fOVA2qxNbabzb3hwMChZmvKm1n/HLWy0S105wY0MEB5l74+QJvnM9u1INXfV2l+ws0E2a/HiNtvsYWV6qYqHB+G80FikNft9W2ugbNRF+54n1seXWpiRbuPWx93bhJ1YPUWPggLbyhCPGLEJM1806u6PCjiIlauOcI9VsvEy3cc6wUDSz9fbYWXn+sFg0sv/OCFn53fCEa+OSeKlp47fhKNPDZ3ZK08DvxpWjg0/ugaeG38bVo4PM7HGrh/hEN/HLvUpWF+0s08NtdiVUU7k/RwK/3G1dJuL9FA78/SUAF4XYQDWzxjBAIx8NTEiQUbhfRwDaPesJTcu6Pi5gkk3A7iQa2eq6XTMLtJhrY7ol9Mgi3o2hgO9lAZOF2FQ1sKRuIKNzOooFtZQORhNtdNLC1bCCCcBFEA9vLBnYWLopoIIRsYEfhIokGwsgGdhIummgglGxgB+EiigbCyQaG8FgWPtj3wkUVDSx7+o+V4HFI+MLxxZMPEVk0EDKyTXCjN9zwzRcRLrpoILRs4AvhMogGwssGVgqXRTSQQjawQrhMooE0soE3hcsmGkglG3hDuIyigXSyQWOEyyoaSCkbNES4zKKBtLKBJ8JlFw2klg3qI1wF0UB62aAu4aqIBkrIBjUJV0k0UEY2cBaummiglGwA4S3ahI6/fO76WpVEgyBSjLwfPu9dkH8uf+6ysS+RYjTqrsSiklOQ+h0piJAXL2gahpatEFq2QmjZCqFcgRYYGFheWVmp5EGunOybN2+GkKKo2PX6nhQcTAIqym5OiqILNIVQsUDDcxx1GlcBLtCakaLoNK4QWrZCKJfGAwICrnG7rdtsFeDRs3sqKipIRXQaVwgV0/h1nvTYuApwGg/liVREp3GF0LIVQsXh0hucxnXXSwV4uFTJK2qBTuMKIWQ6O3/+/EiO0ChqACkpKSMxT0pK2kINgJuB/NatWzdoW3+jI1shlGu/goKCynWBpgg8Lq7sBYc6jSuElq0QyqXxkJCQMlIU5WSXl5eHkaIILfvQoUMt33777UnPPPPMljFjxuQ4f7ZkyRLHwYMHHStXrlxsLvvLX/7SMy0tzXH58uXmq1evdnTp0uXwq6++uiUqKqrUXOfdd991pKenD+F1OuJ9ixYt8oYNG7blF7/4xSESHKFl9+zZ88L169fDt23bNsRd9meffTayXbt235jv33rrrSF79ux5rlu3btmJiYk5TZs2Pfz3v//9uenTp8euW7fuD1gHB8PWrVt/3rt37y287/VYlpOT0/HKlStSZAPh03i/fv1SWfbPEeWQj2UbNmyILSkpafX444+vwvv8/PzwjIyMkZDI61/DsqeffvrQww8/nPfGG2/MRxb47W9/m/Htt992RCTPnTs3xelP5JAkCF+Njx079jCKLhbc31y2a9eu/uHh4RfMaN+3b18HbqvD27RpU3T8+PH2mHBAnDhxoiVvW1pUVNQK67Vq1aoI6XvGjBnP7dy5syNJhvCRjfY2Li4u/auvvurHb1MQxbm5uY6BAweuN9fhqI/DHCnaadPqg+Ps2bMdMEd0Q/yxY8ccixcvHvLOO++UdurU6dAvf/nLLWbWEBkpqvFx48alcjoegja3sLCwJZZNnDgxw/ycC7G8zMxMmj9//ht5eXkOLKvtRMitFJ6CyOZtYjn9J3ER2NK50BMVKQZVEHWconNYjCMrK+uJmJiYDOcKG20z5s6p/m4MHTo0b+bMmak9evRIPXfuXBxJgDQjaL169Uo/ffp0z1uFWbrzZzgYunfvnsqROpKr9K6XLl0yqmtE75tvvjnSbJ/5dRK6Xij2zM+5fe+BA4kkQKrz2Vyszcf8k08+eaOm7dD94ugfzcVa9ckQVN9ckC3DAYHCLDs7u7/zwAtEc198pdlmi3w+W5oRNERjaWlpS+fCzB2k5ZSUlDBej4vwkC/d++YLFizAtuuxLy7UwpHKSSKkkf3nP/95JLpgzoVZbXC3rJwLtFpT860oFr76dkd42Whn0Rbj9VNPPbXSuTCrieDg4Ov64gVB4VSczpGYHR0dfaE+feEbN26EkqIILxuCZRjw8AX64gWFUK7t4pMhM/Bj/C+++OJPpBgq/joijPvopCI6jSuEcrJxo1qe3SAF0TeqVQidxhVCy1YIfQtqhdC3oFYIncYVQsX7oF3WZ70UgUW3IEXRaVwhVEzjJTqNKwKLjiBF0QWaQugCTSGUOML79u17nk+AtOKoxokQRLexHHOWX3TgwIHWpABKVOMsdDPmeIIAbj8N4ZjwmoX/jRRBCdkhISELWOrpGj46zZ8tJEVQQvbevXuzeZYaFBRUvQwpnKdPb32mBMoMqrDYBZy2q3/OExgYmKdSVANlZO/fv/8YC07lCaKxaLtKUQ2UGi4NDg5+i2eI7tMc6cpdStygrtfS6Tk/qawMHFkp4JNV8i5mPol5x/t6f0qCwQdowE2q2Pyb5Lj/owbQoEGVgOCgj7v3bxEZ2iSIRKM3jTBfvkKCca2sgr5Kv/Qiv2zQw2MbJpvHJjrHN6Pwpso+gcEvlHx/g77ed7nBjxvUpzgVQstWCC1bIbRshdCyFULLVggtWyG0bIXQshVCy1YILVshtGyF0LIVQstWCC1bIbRshZBadm5uNp09m1+v9TDJjpCXmhQXX6FNmz6i9PTd1ZJiYuIoISGRRo16ntq1q3qixPLli41lEya8XOf+sB5YuHAFyYyQsufOnU7Hj2fT8OFJNHnya1RScoWOHMli+bvI4RhULbu+DBs2klRAONmHD2cZ07RpswzZJv37D6YpU6YZUe8pzvuRGWGvGGzbtubojYxseseyjRs/orVr3zMOBHyOAwUHh8ny5cnGHAcLQNOwYsVibhJeMJoLHFzAzCQ1/Q0REE5227btjTlkjB//MksbVOf6GRm7KSIikt58c5HxHmKTk+cYbbkpLTfX9dkwxcXFhmAsHz/+JUNwYWEBLVo0m+f5tGCBmG27cNU42mNE5tmzZ2jOnGn05JO9acaMyUb01pTCi4t/oFmzFlGPHonGhNdYD2383UD7P3r0OKP4M5uJqoNAzMpdyK4X0unq1SmGdBRX6F4hYqdOffGOrlZ0dKxL2jWLN/dorolhw5Lu+LugPgeKHRG2nw2B+PKnT59dLR4pFm2zM4hKb4M0LyLSDKpAPNpztK1WExkZSSIinOzaulZYDtEoxrzFjh0pLu+3b696j+JORISrxtHWopoePnxk9ZeOtGqmbxRU3iI9Pc0o/BISevGBdNboAeBvWtE0+AIhu1748hFla9bcbp8hAV0iVNwmMTGx1V01Z7Cu83KsVxOovnfs2FLdD0cxaPbFRUQ42aimUZTVh9rEuI+B17YeBm5kGi/XpzgVQstWCP1r+hpAG472v7a2XFS07BrAgI1zoScLOo0rhJatEFq2QmjZCqFlK4SWrRBatkJo2QqhZSuElq0QWrZCaNkK0aATIcGBgRf3/a2wPCAw4CZpfEZlRWVgYFDgD9RAGiS7vIQeP1tS1ps0PicwKOgANRAln0mpKrrNVggtWyG0bIXQshVCy1YILVsh/h9RL5x/SvzW6gAAAABJRU5ErkJggg==",
  "warnings": [],
  "engine": "mermaid",
  "engine_version": "11.17.2",
  "cache": "hit",
  "render_ms": 0,
  "queued_ms": 0
}
TRY ITLIVE · 50 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
DiagramRequest*
Render diagram-as-code source to an image.
Diagram engine: `mermaid`, `graphviz`, `d2` or `vegalite` (Vega-Lite JSON spec).
Diagram source: Mermaid text, DOT, D2 or a Vega-Lite JSON spec. ≤ 64 KiB via POST, ≤ 8 KiB via GET. Vega-Lite specs must inline their data (`url` is refused); Graphviz attributes that read local files (`image=`, `shapefile=`, …) are refused.
Zoom the output 0.5–4×. Ignored when `width` is set. Raster and PDF output is capped at 8192×8192 px on the hosted plans (WebP 4096×4096); SVG has no ceiling.
Engine-specific theme. Mermaid: `default|base|dark|forest|neutral`. D2: a numeric theme id — `0` (neutral default), `1`, `3`, `4`, `5`, `8`, `101`, `200` (dark), `300`, `301`. Vega-Lite: `default|dark`. Graphviz ignores it.
Target width in pixels (16–4096); height follows the aspect ratio and must stay within the same pixel ceiling. Overrides `scale`.

About this endpoint

What it does

Renders diagram-as-code source into an output image or JSON response. You send the diagram source plus the selected engine and optional rendering settings; the response returns render metadata and, when format is json, a data_uri for the rendered PNG.

Request Body

ParameterTypeMandatoryDescription
engineENUMYesDiagram engine. Allowed values: mermaid, graphviz, d2, vegalite.
sourceStringYesDiagram source text or spec. Must be 1–65536 characters. Mermaid text, DOT, D2, or a Vega-Lite JSON spec. Via POST the limit is 64 KiB. Vega-Lite specs must inline their data (url is refused); Graphviz attributes that read local files (image=, shapefile=, …) are refused.
scaleNumberNoZoom factor from 0.5 to 4. Default: 1. Ignored when width is set. Raster and PDF output is capped at 8192×8192 px on hosted plans; WebP is capped at 4096×4096; SVG has no ceiling.
themeStringNoEngine-specific theme. Mermaid: default, base, dark, forest, neutral. D2: numeric theme id 0, 1, 3, 4, 5, 8, 101, 200, 300, 301. Vega-Lite: default, dark. Graphviz ignores this field. Nullable.
widthIntegerNoTarget width in pixels from 16 to 4096. Height follows the aspect ratio and must stay within the same pixel ceiling. Overrides scale. Nullable.
formatENUMNoOutput format. Allowed values: json, svg, png, pdf, jpeg, webp. Default: json. json returns a PNG data URI plus metadata; svg, png, pdf, jpeg, and webp return the bytes.
layoutStringNoGraphviz layout: dot, neato, fdp, sfdp, circo, twopi; or D2 layout: dagre, elk. Mermaid and Vega-Lite ignore this field. Nullable.
downloadBooleanNoWhen true, sends Content-Disposition: attachment so browsers save the file. Default: false.
backgroundStringNoBackground colour as #rrggbb, #rgb, a CSS name, or transparent for no background. Nullable.

Response

Returns a JSON object with render metadata. The top-level fields are cache (hit or miss), width (integer), engine (string), format (string), height (integer), data_uri (string), warnings (array of strings), queued_ms (integer), render_ms (integer), media_type (string), and engine_version (string).

ParameterTypeMandatoryDescription
cacheENUMNoCache outcome. Allowed values: hit, miss.
widthIntegerNoRendered width in pixels.
engineStringNoEngine used for the render.
formatStringNoOutput format produced by the render.
heightIntegerNoRendered height in pixels.
data_uriStringNoPNG data URI returned when format is json.
warningsString ArrayNoWarning messages produced during rendering.
queued_msIntegerNoTime spent queued, in milliseconds.
render_msIntegerNoTime spent rendering, in milliseconds.
media_typeStringNoMedia type of the returned content.
engine_versionStringNoVersion of the rendering engine used.

Notes

source is limited to 64 KiB when sent with POST, and some inputs are explicitly refused: Vega-Lite specs must inline data instead of using url, and Graphviz file-loading attributes such as image= and shapefile= are not allowed.

Body

Name
Type
Description
bodyREQUIRED
object
Render diagram-as-code source to an image.
▣ ENDPOINT 03 / 03
POST
Render a TeX expression
https://api.eu.apyhub.com/callable-labs/diagram-math-code-render-api/math

QUICKSTART

GUIDE

Quickstart

Render a simple TeX expression as JSON using the required tex field.

curl -X POST "https://api.eu.apyhub.com/callable-labs/diagram-math-code-render-api/math" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "tex": "\\frac{a}{b}"
}'

What you'll get back

Returns a JSON object with fields such as cache (hit or miss), width and height (integers), engine and engine_version (strings), format and media_type (strings), data_uri (string), warnings (array of strings), queued_ms and render_ms (integers), and, when present, width/height reflect the rendered output size.

{
  "format": "png",
  "media_type": "image/png",
  "width": 18,
  "height": 33,
  "data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAhCAYAAADUIPtUAAABW0lEQVR4nO1Vy1XDMBAcggswJ67pAFMBzpFbOsBUQDqgBagAc+MGVIBTAU4FmBs3TAfsPq0iRehjvXCDeW/eOhvteD1eyQXiuCIuiCXxUeI9cXAXFhGRO+IpsSaOxJZ4QVznCC2JjQiNkhskdr6CA/jxJv/NrVwnsfYVzDy5UgSenPwZAt2EhOYSeytXw3TFj11NEWKBLyd3bQk1ML5tcQg/Pogr4jHxEuqVn8tvvsmDWxAyW6OCeUTtXe9bmBKajBl+Cf9Cadib9oZ4gjxsoOZtR6iFmpUcbCf8j84RHxcvwgZ7CPHmfIY5s6OIHf6Ddd1hDyFIN5spHaXM1uc0z1cVWxibIy58hfJqLWI8+Qtfh7GOaom3UNugIR7J9Q8UCSH2p7Vyn8j4rmm43zHt04CMjiop7LDbIaPPERqdyOBJf4c6biYLDVJUWt0sEfCHkXr9LYwnKwT8YXwDbINAQMEZMTgAAAAASUVORK5CYII=",
  "warnings": [],
  "engine": "mathjax",
  "engine_version": "3.2.2",
  "cache": "hit",
  "render_ms": 0,
  "queued_ms": 0
}
TRY ITLIVE · 50 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
MathRequest*
Render a TeX expression with MathJax (SVG paths, no fonts required).
TeX source, e.g. `\frac{a}{b}` or `\int_0^\infty e^{-x}\,dx`. ≤ 64 KiB via POST, ≤ 8 KiB via GET.
Text colour as `#rrggbb`/`#rgb`.
Zoom the output 0.5–4×. Ignored when `width` is set. Raster and PDF output is capped at 8192×8192 px on the hosted plans (WebP 4096×4096); SVG has no ceiling.
Target width in pixels (16–4096); height follows the aspect ratio and must stay within the same pixel ceiling. Overrides `scale`.

About this endpoint

What it does

Renders a TeX expression into the requested output format using the fields in the request body. The response returns a JSON object with render metadata and, for json output, a data_uri field containing the rendered image data.

Request Body

ParameterTypeMandatoryDescription
texStringYesTeX source, e.g. \frac{a}{b} or \int_0^\infty e^{-x}\,dx. ≤ 64 KiB via POST, ≤ 8 KiB via GET.
colorStringNoText colour as #rrggbb/#rgb.
scaleNumberNoZoom the output 0.5–4×. Default: 1. Ignored when width is set. Raster and PDF output is capped at 8192×8192 px on the hosted plans (WebP 4096×4096); SVG has no ceiling.
widthIntegerNoTarget width in pixels (16–4096); height follows the aspect ratio and must stay within the same pixel ceiling. Overrides scale.
formatENUMNoOutput format. Allowed values: json, svg, png, pdf, jpeg, webp. Default: json. json returns a PNG data URI plus metadata; svg/png/pdf/jpeg/webp return the bytes.
displayBooleanNoDisplay style (centred, larger) vs inline style. Default: true.
downloadBooleanNoSend Content-Disposition: attachment so browsers save the file. Default: false.
font_sizeIntegerNoFont size in pixels (6–96). Default: 16.
backgroundStringNoBackground colour as #rrggbb/#rgb, a CSS name, or transparent for none.

Response

Returns a JSON object with cache, width, engine, format, height, data_uri, warnings, queued_ms, render_ms, media_type, and engine_version fields. cache is a string enum, width/height/queued_ms/render_ms are integers, warnings is an array of strings, and the remaining fields are strings.

AttributeTypeMandatoryDescription
cacheENUMNohit or miss.
widthIntegerNoRendered output width in pixels.
engineStringNoRendering engine used.
formatStringNoOutput format returned.
heightIntegerNoRendered output height in pixels.
data_uriStringNoData URI for the rendered output.
warningsString ArrayNoRender warnings, if any.
queued_msIntegerNoTime spent queued, in milliseconds.
render_msIntegerNoTime spent rendering, in milliseconds.
media_typeStringNoMedia type of the rendered output.
engine_versionStringNoRendering engine version.

Body

Name
Type
Description
bodyREQUIRED
object
Render a TeX expression with MathJax (SVG paths, no fonts required).
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.