{"openapi":"3.1.0","info":{"title":"Template API","version":"1.0.0","description":"Render templates with your data. Pass a Handlebars or Mustache template plus a JSON data object and get back the rendered text — ideal for dynamic emails, SMS and notifications, document and report generation, code scaffolding, and any \"fill in the blanks\" output. Handlebars supports blocks like {{#each}} and {{#if}} and is HTML-escaped by default (turn off with escape=false); Mustache is logic-less with sections and inverted sections. Both engines are safe — there is no arbitrary code execution. Pure local rendering — no key, no third-party service, instant. Live. 3 endpoints. Distinct from a Markdown renderer or a fake-data generator.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/template-api","description":"oanor gateway"}],"tags":[{"name":"Render"},{"name":"Reference"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/render":{"get":{"operationId":"get_v1_render","tags":["Render"],"summary":"Render a template with data","description":"","parameters":[{"name":"template","in":"query","required":true,"description":"Handlebars/Mustache template","schema":{"type":"string"},"example":"Hi {{name}}! {{#each items}}[{{this}}]{{/each}}"},{"name":"data","in":"query","required":false,"description":"JSON data object","schema":{"type":"string"},"example":"{\"name\":\"Ada\",\"items\":[\"a\",\"b\"]}"},{"name":"engine","in":"query","required":false,"description":"handlebars|mustache","schema":{"type":"string"},"example":"handlebars"},{"name":"escape","in":"query","required":false,"description":"false to disable HTML-escaping (Handlebars)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"engine":"handlebars","length":14,"output":"Hi Ada! [a][b]"},"meta":{"timestamp":"2026-06-02T16:51:56.519Z","request_id":"1bb20e13-5cf4-4fb6-a1e7-73286264ff16"},"status":"ok","message":"Render a template","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/engines":{"get":{"operationId":"get_v1_engines","tags":["Reference"],"summary":"Supported engines","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":2,"engines":[{"name":"handlebars","note":"blocks, helpers, partials-free, HTML-escaped by default (escape=false to disable)"},{"name":"mustache","note":"logic-less; sections, inverted sections, HTML-escaped ({{{ }}} for raw)"}]},"meta":{"timestamp":"2026-06-02T16:51:56.628Z","request_id":"5b5a3fd5-f715-470b-982a-1f6022b940d3"},"status":"ok","message":"Supported engines","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"auth":"none upstream; this gateway requires x-api-key","name":"Template API","note":"Render a template with JSON data. /v1/render?template=...&data={...}&engine=handlebars|mustache (Handlebars supports {{#each}}/{{#if}} blocks and is HTML-escaped by default — escape=false to disable; Mustache is logic-less with sections). Safe templating — no arbitrary code execution. Instant, nothing stored.","source":"Local rendering (Handlebars, Mustache) — no key, no upstream","endpoints":3},"meta":{"timestamp":"2026-06-02T16:51:56.707Z","request_id":"33f0bae8-a795-42e1-acb2-aac7c25123d1"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":1360,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":540,"monthly_call_quota":21000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2500,"monthly_call_quota":168000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6100,"monthly_call_quota":860000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/template-api"}