{"openapi":"3.1.0","info":{"title":"Finekot API","description":"REST and MCP server for AI agents; pay per call with x402 (no account) or from a prepaid balance; errors are free. Flat price per call, charged only on HTTP 200; every response carries X-Cost and X-Balance. Get a key with €1 free credit: POST /v1/keys. MCP server: https://api.finekot.com/mcp (card: /.well-known/mcp.json). Live services: 97.","version":"0.2"},"paths":{"/.well-known/mcp.json":{"get":{"summary":"Well Known Mcp","operationId":"well_known_mcp__well_known_mcp_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/status":{"get":{"summary":"Status","operationId":"status_api_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/services":{"get":{"summary":"Api Services","operationId":"api_services_api_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stats":{"get":{"summary":"Api Stats","operationId":"api_stats_api_stats_get","parameters":[{"name":"x-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/keys":{"post":{"summary":"Make Key","operationId":"make_key_v1_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/me":{"get":{"summary":"Me","operationId":"me_v1_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/me/email":{"post":{"summary":"Me Email","description":"Необязательная привязка email к ключу: для счёта и восстановления ключа письмом (когда появится).","operationId":"me_email_v1_me_email_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/f/{fid}/{name}":{"get":{"summary":"File Out","operationId":"file_out_f__fid___name__get","parameters":[{"name":"fid","in":"path","required":true,"schema":{"type":"string","title":"Fid"}},{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"e","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"E"}},{"name":"s","in":"query","required":false,"schema":{"type":"string","default":"","title":"S"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay/prices":{"get":{"summary":"Pay Prices","operationId":"pay_prices_api_pay_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/pay/create":{"post":{"summary":"Pay Create","operationId":"pay_create_api_pay_create_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/pay/status":{"get":{"summary":"Pay Status","operationId":"pay_status_api_pay_status_get","parameters":[{"name":"ref","in":"query","required":true,"schema":{"type":"string","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay/hook":{"post":{"summary":"Pay Hook","operationId":"pay_hook_api_pay_hook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/paid":{"get":{"summary":"Paid","operationId":"paid_paid_get","parameters":[{"name":"ref","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/robots.txt":{"get":{"summary":"Robots","description":"AI-краулеры явно разрешены: они и есть канал продаж (память fine-api-agent-first). Файлы результатов и оплата — закрыты.","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms.txt":{"get":{"summary":"Llms","operationId":"llms_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/remove-bg":{"post":{"tags":["services"],"operationId":"remove_background","summary":"Background removal — €0.02 per image","description":"Cut-out with alpha channel. Input: url or file (JPEG/PNG/WebP up to 25 MB). Output: PNG with transparency. Engine: rembg isnet-general-use · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https image url)"},"format":{"type":"string","description":"png | webp (default png)"}},"example":{"url":"https://example.com/photo.jpg"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https image url)"},"format":{"type":"string","description":"png | webp (default png)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/remove-bg":{"post":{"tags":["playground"],"operationId":"try_remove_background","summary":"Background removal — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https image url)"},"format":{"type":"string","description":"png | webp (default png)"}},"example":{"url":"https://example.com/photo.jpg"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https image url)"},"format":{"type":"string","description":"png | webp (default png)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/screenshot":{"post":{"tags":["services"],"operationId":"screenshot","summary":"Website screenshot — €0.004 per shot","description":"Rendered screenshot of any public URL. Viewport, full page, element by CSS selector, dark mode, retina 2x. Output: PNG, JPEG or WebP. Engine: Chromium headless · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https page url)"},"width":{"type":"string","description":"int 320–3840 (default 1280)"},"height":{"type":"string","description":"int 240–3840 (default 720)"},"full_page":{"type":"string","description":"bool (default false)"},"selector":{"type":"string","description":"CSS selector — shoot one element"},"format":{"type":"string","description":"png | jpeg | webp (default png)"},"scale":{"type":"string","description":"1 | 2 (retina)"},"dark":{"type":"string","description":"bool — prefers-color-scheme: dark"},"wait":{"type":"string","description":"ms to wait after load, 0–8000"}},"example":{"url":"https://example.com","full_page":"true"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/screenshot":{"post":{"tags":["playground"],"operationId":"try_screenshot","summary":"Website screenshot — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https page url)"},"width":{"type":"string","description":"int 320–3840 (default 1280)"},"height":{"type":"string","description":"int 240–3840 (default 720)"},"full_page":{"type":"string","description":"bool (default false)"},"selector":{"type":"string","description":"CSS selector — shoot one element"},"format":{"type":"string","description":"png | jpeg | webp (default png)"},"scale":{"type":"string","description":"1 | 2 (retina)"},"dark":{"type":"string","description":"bool — prefers-color-scheme: dark"},"wait":{"type":"string","description":"ms to wait after load, 0–8000"}},"example":{"url":"https://example.com","full_page":"true"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/scrape-md":{"post":{"tags":["services"],"operationId":"url_to_markdown","summary":"URL to Markdown — €0.0015 per page","description":"Main content of a page as clean Markdown for LLM context: title, author, date, text with links and tables; navigation, ads and cookie banners stripped. JS-rendered pages supported. Engine: Chromium + trafilatura · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https page url)"},"js":{"type":"string","description":"bool — render with Chromium (default true); false = plain fetch, faster"},"links":{"type":"string","description":"bool — keep links (default true)"},"images":{"type":"string","description":"bool — keep images (default true)"},"main_only":{"type":"string","description":"bool — main article only (default true)"},"wait":{"type":"string","description":"ms to wait after load, 0–8000"}},"example":{"url":"https://example.com/article"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/scrape-md":{"post":{"tags":["playground"],"operationId":"try_url_to_markdown","summary":"URL to Markdown — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (http/https page url)"},"js":{"type":"string","description":"bool — render with Chromium (default true); false = plain fetch, faster"},"links":{"type":"string","description":"bool — keep links (default true)"},"images":{"type":"string","description":"bool — keep images (default true)"},"main_only":{"type":"string","description":"bool — main article only (default true)"},"wait":{"type":"string","description":"ms to wait after load, 0–8000"}},"example":{"url":"https://example.com/article"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/web-answer":{"post":{"tags":["services"],"operationId":"web_answer","summary":"Web answer with citations — €0.008 per question","description":"Answers a question grounded in live web search: searches, reads the top pages and replies with numbered citations, or says the answer wasn't found instead of guessing. Engine: DuckDuckGo + trafilatura + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"string","description":"question to answer"},"region":{"type":"string","description":"ddgs region, e.g. de-de, us-en (default wt-wt)"}},"example":{"question":"What is the x402 payment protocol?"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/web-answer":{"post":{"tags":["playground"],"operationId":"try_web_answer","summary":"Web answer with citations — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"string","description":"question to answer"},"region":{"type":"string","description":"ddgs region, e.g. de-de, us-en (default wt-wt)"}},"example":{"question":"What is the x402 payment protocol?"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/news-brief":{"post":{"tags":["services"],"operationId":"news_brief","summary":"News brief — €0.01 per brief","description":"3–8 bullet summary of the latest news on a topic with sources and dates; deduplicates reprints of the same story and scores its own confidence. Full article text is never returned. Engine: DuckDuckGo News + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","description":"search topic"},"period":{"type":"string","description":"24h (default) | 7d"},"language":{"type":"string","description":"output language (default English)"},"max_items":{"type":"string","description":"1–15 (default 8)"}},"example":{"topic":"artificial intelligence regulation","period":"7d"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/news-brief":{"post":{"tags":["playground"],"operationId":"try_news_brief","summary":"News brief — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","description":"search topic"},"period":{"type":"string","description":"24h (default) | 7d"},"language":{"type":"string","description":"output language (default English)"},"max_items":{"type":"string","description":"1–15 (default 8)"}},"example":{"topic":"artificial intelligence regulation","period":"7d"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/llms-txt":{"post":{"tags":["services"],"operationId":"llms_txt","summary":"llms.txt generator — €0.01 per site","description":"Returns a site's existing /llms.txt as is, or builds one from its sitemap (falling back to the homepage links) per the llmstxt.org spec, respecting robots.txt. Engine: robots.txt + sitemap + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"site url"},"max_pages":{"type":"string","description":"1–20 pages to crawl when no llms.txt exists (default 20)"}},"example":{"url":"https://api.finekot.com"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/llms-txt":{"post":{"tags":["playground"],"operationId":"try_llms_txt","summary":"llms.txt generator — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"site url"},"max_pages":{"type":"string","description":"1–20 pages to crawl when no llms.txt exists (default 20)"}},"example":{"url":"https://api.finekot.com"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/tts":{"post":{"tags":["services"],"operationId":"text_to_speech","summary":"Text to speech — €0.015 per 1 000 chars","description":"Natural voice from text, 24 kHz. 21 voices: English US/UK, Spanish, French, Italian, Portuguese, Hindi, Japanese, Chinese. Output: MP3, OGG or WAV. Up to 5 000 chars per call; billed per started 1 000 chars. Engine: Kokoro-82M ONNX · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"string, up to 5 000 chars"},"voice":{"type":"string","description":"af_heart (default) | af_bella | am_adam | bf_emma | bm_george | ef_dora | ff_siwis | if_sara | pf_dora | jf_alpha | zf_xiaoxiao | …"},"speed":{"type":"string","description":"0.5–2.0 (default 1.0)"},"format":{"type":"string","description":"mp3 | ogg | wav (default mp3)"}},"example":{"text":"Hello from Finekot API.","voice":"af_heart"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/tts":{"post":{"tags":["playground"],"operationId":"try_text_to_speech","summary":"Text to speech — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"string, up to 5 000 chars"},"voice":{"type":"string","description":"af_heart (default) | af_bella | am_adam | bf_emma | bm_george | ef_dora | ff_siwis | if_sara | pf_dora | jf_alpha | zf_xiaoxiao | …"},"speed":{"type":"string","description":"0.5–2.0 (default 1.0)"},"format":{"type":"string","description":"mp3 | ogg | wav (default mp3)"}},"example":{"text":"Hello from Finekot API.","voice":"af_heart"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/stt":{"post":{"tags":["services"],"operationId":"speech_to_text","summary":"Speech to text — €0.004 per minute","description":"Transcription with timestamps and language detection, 99 languages. Input: url or file (mp3, m4a, wav, ogg, webm, mp4) up to 25 MB / 30 min. Output: text, segments, optional SRT/VTT. Billed per started minute. Engine: faster-whisper small int8 · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (audio/video url)"},"language":{"type":"string","description":"ISO code, e.g. en, ru, uk (default: auto)"},"translate":{"type":"string","description":"bool — translate to English"},"format":{"type":"string","description":"json | srt | vtt (default json, adds subtitles field)"}},"example":{"url":"https://example.com/talk.mp3","language":"en"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (audio/video url)"},"language":{"type":"string","description":"ISO code, e.g. en, ru, uk (default: auto)"},"translate":{"type":"string","description":"bool — translate to English"},"format":{"type":"string","description":"json | srt | vtt (default json, adds subtitles field)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/stt":{"post":{"tags":["playground"],"operationId":"try_speech_to_text","summary":"Speech to text — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (audio/video url)"},"language":{"type":"string","description":"ISO code, e.g. en, ru, uk (default: auto)"},"translate":{"type":"string","description":"bool — translate to English"},"format":{"type":"string","description":"json | srt | vtt (default json, adds subtitles field)"}},"example":{"url":"https://example.com/talk.mp3","language":"en"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"string (audio/video url)"},"language":{"type":"string","description":"ISO code, e.g. en, ru, uk (default: auto)"},"translate":{"type":"string","description":"bool — translate to English"},"format":{"type":"string","description":"json | srt | vtt (default json, adds subtitles field)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/compress":{"post":{"tags":["services"],"operationId":"compress","summary":"Image compress & convert — €0.001 per image","description":"Convert and shrink images: JPEG, PNG, WebP, AVIF, GIF out; HEIC and AVIF in. Resize to fit, EXIF orientation applied and metadata stripped. Engine: Pillow + libheif · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"format":{"type":"string","description":"webp | jpeg | png | avif | gif (default webp)"},"quality":{"type":"string","description":"1–100 (default 82)"},"width":{"type":"string","description":"max width px"},"height":{"type":"string","description":"max height px"}},"example":{"url":"https://example.com/photo.heic","format":"webp","width":"1600"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"format":{"type":"string","description":"webp | jpeg | png | avif | gif (default webp)"},"quality":{"type":"string","description":"1–100 (default 82)"},"width":{"type":"string","description":"max width px"},"height":{"type":"string","description":"max height px"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/compress":{"post":{"tags":["playground"],"operationId":"try_compress","summary":"Image compress & convert — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"format":{"type":"string","description":"webp | jpeg | png | avif | gif (default webp)"},"quality":{"type":"string","description":"1–100 (default 82)"},"width":{"type":"string","description":"max width px"},"height":{"type":"string","description":"max height px"}},"example":{"url":"https://example.com/photo.heic","format":"webp","width":"1600"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"format":{"type":"string","description":"webp | jpeg | png | avif | gif (default webp)"},"quality":{"type":"string","description":"1–100 (default 82)"},"width":{"type":"string","description":"max width px"},"height":{"type":"string","description":"max height px"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/watermark":{"post":{"tags":["services"],"operationId":"watermark","summary":"Watermark & overlay — €0.001 per image","description":"Text or logo watermark: corner, center or tiled, with opacity. Output JPEG, PNG or WebP. Engine: Pillow · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"text":{"type":"string","description":"watermark text (or logo_url)"},"logo_url":{"type":"string","description":"PNG/SVG-rendered logo url"},"position":{"type":"string","description":"bottom-right (default) | bottom-left | top-right | top-left | center | tile"},"opacity":{"type":"string","description":"5–100 (default 35)"},"format":{"type":"string","description":"jpeg | png | webp"}},"example":{"url":"https://example.com/photo.jpg","text":"© Studio","position":"bottom-right"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"text":{"type":"string","description":"watermark text (or logo_url)"},"logo_url":{"type":"string","description":"PNG/SVG-rendered logo url"},"position":{"type":"string","description":"bottom-right (default) | bottom-left | top-right | top-left | center | tile"},"opacity":{"type":"string","description":"5–100 (default 35)"},"format":{"type":"string","description":"jpeg | png | webp"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/watermark":{"post":{"tags":["playground"],"operationId":"try_watermark","summary":"Watermark & overlay — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"text":{"type":"string","description":"watermark text (or logo_url)"},"logo_url":{"type":"string","description":"PNG/SVG-rendered logo url"},"position":{"type":"string","description":"bottom-right (default) | bottom-left | top-right | top-left | center | tile"},"opacity":{"type":"string","description":"5–100 (default 35)"},"format":{"type":"string","description":"jpeg | png | webp"}},"example":{"url":"https://example.com/photo.jpg","text":"© Studio","position":"bottom-right"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"text":{"type":"string","description":"watermark text (or logo_url)"},"logo_url":{"type":"string","description":"PNG/SVG-rendered logo url"},"position":{"type":"string","description":"bottom-right (default) | bottom-left | top-right | top-left | center | tile"},"opacity":{"type":"string","description":"5–100 (default 35)"},"format":{"type":"string","description":"jpeg | png | webp"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/qr":{"post":{"tags":["services"],"operationId":"qr","summary":"QR & barcodes — €0.0005 per code","description":"QR codes (optional logo in the middle, custom colors) and barcodes EAN-13, EAN-8, UPC-A, ISBN-13, Code128. SVG or PNG. mode=read decodes a QR/MicroQR from an image (url or file) back to text — for any other barcode format use the barcode service. Engine: segno + python-barcode · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"text or url to encode (generate)"},"type":{"type":"string","description":"qr (default) | ean13 | ean8 | upca | isbn13 | code128"},"format":{"type":"string","description":"svg (default) | png"},"scale":{"type":"string","description":"module size px, 2–40"},"color":{"type":"string","description":"#rrggbb dark (default #000000)"},"background":{"type":"string","description":"#rrggbb | transparent"},"ec":{"type":"string","description":"QR error correction l | m | q | h"},"logo_url":{"type":"string","description":"logo for QR center (png only)"},"mode":{"type":"string","description":"generate (default) | read — read a QR from url/file instead of making one"},"url":{"type":"string","description":"image url (mode=read)"}},"example":{"data":"https://example.com","format":"png","ec":"h"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"text or url to encode (generate)"},"type":{"type":"string","description":"qr (default) | ean13 | ean8 | upca | isbn13 | code128"},"format":{"type":"string","description":"svg (default) | png"},"scale":{"type":"string","description":"module size px, 2–40"},"color":{"type":"string","description":"#rrggbb dark (default #000000)"},"background":{"type":"string","description":"#rrggbb | transparent"},"ec":{"type":"string","description":"QR error correction l | m | q | h"},"logo_url":{"type":"string","description":"logo for QR center (png only)"},"mode":{"type":"string","description":"generate (default) | read — read a QR from url/file instead of making one"},"url":{"type":"string","description":"image url (mode=read)"},"file":{"type":"string","format":"binary","description":"multipart file (mode=read)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/qr":{"post":{"tags":["playground"],"operationId":"try_qr","summary":"QR & barcodes — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"text or url to encode (generate)"},"type":{"type":"string","description":"qr (default) | ean13 | ean8 | upca | isbn13 | code128"},"format":{"type":"string","description":"svg (default) | png"},"scale":{"type":"string","description":"module size px, 2–40"},"color":{"type":"string","description":"#rrggbb dark (default #000000)"},"background":{"type":"string","description":"#rrggbb | transparent"},"ec":{"type":"string","description":"QR error correction l | m | q | h"},"logo_url":{"type":"string","description":"logo for QR center (png only)"},"mode":{"type":"string","description":"generate (default) | read — read a QR from url/file instead of making one"},"url":{"type":"string","description":"image url (mode=read)"}},"example":{"data":"https://example.com","format":"png","ec":"h"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"text or url to encode (generate)"},"type":{"type":"string","description":"qr (default) | ean13 | ean8 | upca | isbn13 | code128"},"format":{"type":"string","description":"svg (default) | png"},"scale":{"type":"string","description":"module size px, 2–40"},"color":{"type":"string","description":"#rrggbb dark (default #000000)"},"background":{"type":"string","description":"#rrggbb | transparent"},"ec":{"type":"string","description":"QR error correction l | m | q | h"},"logo_url":{"type":"string","description":"logo for QR center (png only)"},"mode":{"type":"string","description":"generate (default) | read — read a QR from url/file instead of making one"},"url":{"type":"string","description":"image url (mode=read)"},"file":{"type":"string","format":"binary","description":"multipart file (mode=read)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/barcode":{"post":{"tags":["services"],"operationId":"barcode","summary":"Barcode & QR reader — €0.001 per code","description":"op=read (default): decodes every linear and 2D symbology from a photo or scan — EAN-13/8, UPC-A/E, Code128/39/93, ITF, Codabar, QR, Micro QR, Data Matrix, PDF417, Aztec — returns text, format and the 4 corner points per code found; found:0 if none. op=generate reuses the qr service's generator (same type/format params). Engine: zxing-cpp · CPU (+ segno/python-barcode for op=generate).","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"read (default) | generate"},"url":{"type":"string","description":"image url (op=read)"},"formats":{"type":"string","description":"comma list of symbologies to limit the search to, e.g. qrcode,ean13 (default all)"},"data":{"type":"string","description":"text to encode (op=generate)"},"type":{"type":"string","description":"barcode type (op=generate), see qr service"}},"example":{"url":"https://example.com/receipt.jpg"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"read (default) | generate"},"url":{"type":"string","description":"image url (op=read)"},"formats":{"type":"string","description":"comma list of symbologies to limit the search to, e.g. qrcode,ean13 (default all)"},"data":{"type":"string","description":"text to encode (op=generate)"},"type":{"type":"string","description":"barcode type (op=generate), see qr service"},"file":{"type":"string","format":"binary","description":"multipart file (op=read, alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/barcode":{"post":{"tags":["playground"],"operationId":"try_barcode","summary":"Barcode & QR reader — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"read (default) | generate"},"url":{"type":"string","description":"image url (op=read)"},"formats":{"type":"string","description":"comma list of symbologies to limit the search to, e.g. qrcode,ean13 (default all)"},"data":{"type":"string","description":"text to encode (op=generate)"},"type":{"type":"string","description":"barcode type (op=generate), see qr service"}},"example":{"url":"https://example.com/receipt.jpg"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"read (default) | generate"},"url":{"type":"string","description":"image url (op=read)"},"formats":{"type":"string","description":"comma list of symbologies to limit the search to, e.g. qrcode,ean13 (default all)"},"data":{"type":"string","description":"text to encode (op=generate)"},"type":{"type":"string","description":"barcode type (op=generate), see qr service"},"file":{"type":"string","format":"binary","description":"multipart file (op=read, alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/og-image":{"post":{"tags":["services"],"operationId":"og_image","summary":"OG / social image — €0.012 per image","description":"1200×630 PNG for social previews from a template (post, minimal, product) or your own HTML. Fonts, colors and product image supported. Engine: Chromium · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"template":{"type":"string","description":"post (default) | minimal | product | html"},"title":{"type":"string","description":"headline"},"subtitle":{"type":"string","description":"second line"},"eyebrow":{"type":"string","description":"small label above"},"site":{"type":"string","description":"footer text"},"bg":{"type":"string","description":"background color"},"fg":{"type":"string","description":"text color"},"accent":{"type":"string","description":"accent color"},"image_url":{"type":"string","description":"product image (template=product)"},"html":{"type":"string","description":"full HTML body (template=html)"}},"example":{"template":"post","title":"Pricing that makes sense","site":"example.com"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/og-image":{"post":{"tags":["playground"],"operationId":"try_og_image","summary":"OG / social image — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"template":{"type":"string","description":"post (default) | minimal | product | html"},"title":{"type":"string","description":"headline"},"subtitle":{"type":"string","description":"second line"},"eyebrow":{"type":"string","description":"small label above"},"site":{"type":"string","description":"footer text"},"bg":{"type":"string","description":"background color"},"fg":{"type":"string","description":"text color"},"accent":{"type":"string","description":"accent color"},"image_url":{"type":"string","description":"product image (template=product)"},"html":{"type":"string","description":"full HTML body (template=html)"}},"example":{"template":"post","title":"Pricing that makes sense","site":"example.com"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/color-palette":{"post":{"tags":["services"],"operationId":"color_palette","summary":"Dominant color palette — €0.001 per image","description":"N dominant colors as hex, rgb and their share of the image, sorted by prevalence. Brand colors, mood boards, product shots. Engine: numpy k-means · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"colors":{"type":"string","description":"2–16 (default 5)"}},"example":{"url":"https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?w=640","colors":5}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"colors":{"type":"string","description":"2–16 (default 5)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/color-palette":{"post":{"tags":["playground"],"operationId":"try_color_palette","summary":"Dominant color palette — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"colors":{"type":"string","description":"2–16 (default 5)"}},"example":{"url":"https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?w=640","colors":5}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"colors":{"type":"string","description":"2–16 (default 5)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/exif-strip":{"post":{"tags":["services"],"operationId":"exif_strip","summary":"EXIF / GPS stripper — €0.0005 per image","description":"Removes EXIF, XMP and GPS metadata from JPEG, PNG and WebP by cutting the raw marker/chunk — pixels are never recompressed. GPS values are never returned, only which groups were found and removed. Engine: byte-level marker strip · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"}},"example":{"url":"https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?w=640"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/exif-strip":{"post":{"tags":["playground"],"operationId":"try_exif_strip","summary":"EXIF / GPS stripper — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"}},"example":{"url":"https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?w=640"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/html-pdf":{"post":{"tags":["services"],"operationId":"html_pdf","summary":"HTML / URL to PDF — €0.006 per document","description":"Pixel-accurate PDF from a URL or your HTML: print CSS, page size, margins, header, footer with page numbers. Invoices, reports, contracts. Engine: Chromium · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url (or html)"},"html":{"type":"string","description":"raw HTML string"},"format":{"type":"string","description":"A4 (default) | A3 | A5 | Letter | Legal"},"landscape":{"type":"string","description":"bool"},"margin":{"type":"string","description":"e.g. 15mm"},"header":{"type":"string","description":"header text"},"footer":{"type":"string","description":"footer text, page numbers appended"},"page_numbers":{"type":"string","description":"bool"},"print_css":{"type":"string","description":"bool, use @media print (default true)"},"wait":{"type":"string","description":"ms after load"}},"example":{"url":"https://example.com/invoice/42","footer":"Example Ltd","page_numbers":"true"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/html-pdf":{"post":{"tags":["playground"],"operationId":"try_html_pdf","summary":"HTML / URL to PDF — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url (or html)"},"html":{"type":"string","description":"raw HTML string"},"format":{"type":"string","description":"A4 (default) | A3 | A5 | Letter | Legal"},"landscape":{"type":"string","description":"bool"},"margin":{"type":"string","description":"e.g. 15mm"},"header":{"type":"string","description":"header text"},"footer":{"type":"string","description":"footer text, page numbers appended"},"page_numbers":{"type":"string","description":"bool"},"print_css":{"type":"string","description":"bool, use @media print (default true)"},"wait":{"type":"string","description":"ms after load"}},"example":{"url":"https://example.com/invoice/42","footer":"Example Ltd","page_numbers":"true"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/pdf-tools":{"post":{"tags":["services"],"operationId":"pdf_tools","summary":"PDF merge / split / compress — €0.002 per operation","description":"merge (list of urls), split/extract pages, rotate, compress, protect with AES-256, unlock, info. Up to 200 pages. Engine: pypdf · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"merge | split | rotate | compress | protect | unlock | info"},"url":{"type":"string","description":"pdf url"},"urls":{"type":"string","description":"list for merge"},"pages":{"type":"string","description":"e.g. 1-3,5 (split, rotate)"},"degrees":{"type":"string","description":"90 | 180 | 270"},"password":{"type":"string","description":"protect / unlock"},"quality":{"type":"string","description":"image quality for compress (default 70)"}},"example":{"op":"merge","urls":["https://example.com/a.pdf","https://example.com/b.pdf"]}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"merge | split | rotate | compress | protect | unlock | info"},"url":{"type":"string","description":"pdf url"},"urls":{"type":"string","description":"list for merge"},"pages":{"type":"string","description":"e.g. 1-3,5 (split, rotate)"},"degrees":{"type":"string","description":"90 | 180 | 270"},"password":{"type":"string","description":"protect / unlock"},"quality":{"type":"string","description":"image quality for compress (default 70)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/pdf-tools":{"post":{"tags":["playground"],"operationId":"try_pdf_tools","summary":"PDF merge / split / compress — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"merge | split | rotate | compress | protect | unlock | info"},"url":{"type":"string","description":"pdf url"},"urls":{"type":"string","description":"list for merge"},"pages":{"type":"string","description":"e.g. 1-3,5 (split, rotate)"},"degrees":{"type":"string","description":"90 | 180 | 270"},"password":{"type":"string","description":"protect / unlock"},"quality":{"type":"string","description":"image quality for compress (default 70)"}},"example":{"op":"merge","urls":["https://example.com/a.pdf","https://example.com/b.pdf"]}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"merge | split | rotate | compress | protect | unlock | info"},"url":{"type":"string","description":"pdf url"},"urls":{"type":"string","description":"list for merge"},"pages":{"type":"string","description":"e.g. 1-3,5 (split, rotate)"},"degrees":{"type":"string","description":"90 | 180 | 270"},"password":{"type":"string","description":"protect / unlock"},"quality":{"type":"string","description":"image quality for compress (default 70)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/pdf-text":{"post":{"tags":["services"],"operationId":"pdf_text","summary":"PDF to Markdown — €0.005 per page","description":"Text layer of a PDF as Markdown: headings by font size, bullets, tables as Markdown tables. Flags scanned PDFs (no text layer) so you can send them to OCR. Billed per page. Engine: pdfplumber · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 1-5 (default all)"},"tables":{"type":"string","description":"bool, include tables (default true)"}},"example":{"url":"https://example.com/report.pdf","pages":"1-5"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 1-5 (default all)"},"tables":{"type":"string","description":"bool, include tables (default true)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/pdf-text":{"post":{"tags":["playground"],"operationId":"try_pdf_text","summary":"PDF to Markdown — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 1-5 (default all)"},"tables":{"type":"string","description":"bool, include tables (default true)"}},"example":{"url":"https://example.com/report.pdf","pages":"1-5"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 1-5 (default all)"},"tables":{"type":"string","description":"bool, include tables (default true)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/table-extract":{"post":{"tags":["services"],"operationId":"table_extract","summary":"Tables from PDF — €0.025 per page","description":"Every table on the given pages as JSON rows, CSV file or Markdown. Bank statements, price lists, invoices with a text layer. Billed per page. Engine: pdfplumber · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 2-4 (default all)"},"format":{"type":"string","description":"json (default) | csv | markdown"}},"example":{"url":"https://example.com/statement.pdf","format":"csv"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 2-4 (default all)"},"format":{"type":"string","description":"json (default) | csv | markdown"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/table-extract":{"post":{"tags":["playground"],"operationId":"try_table_extract","summary":"Tables from PDF — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 2-4 (default all)"},"format":{"type":"string","description":"json (default) | csv | markdown"}},"example":{"url":"https://example.com/statement.pdf","format":"csv"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"pdf url"},"pages":{"type":"string","description":"e.g. 2-4 (default all)"},"format":{"type":"string","description":"json (default) | csv | markdown"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/doc-convert":{"post":{"tags":["services"],"operationId":"doc_convert","summary":"Office conversion — €0.005 per document","description":"DOCX, XLSX, PPTX, ODT, ODS, RTF, CSV, HTML → PDF, DOCX, ODT, HTML, TXT, XLSX, CSV, PNG. Faithful layout, fonts embedded in PDF. Engine: LibreOffice headless · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"document url"},"source":{"type":"string","description":"source extension if url has none, e.g. docx"},"to":{"type":"string","description":"pdf (default) | docx | odt | html | txt | xlsx | ods | csv | pptx | png | jpg"}},"example":{"url":"https://example.com/deck.pptx","to":"pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"document url"},"source":{"type":"string","description":"source extension if url has none, e.g. docx"},"to":{"type":"string","description":"pdf (default) | docx | odt | html | txt | xlsx | ods | csv | pptx | png | jpg"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/doc-convert":{"post":{"tags":["playground"],"operationId":"try_doc_convert","summary":"Office conversion — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"document url"},"source":{"type":"string","description":"source extension if url has none, e.g. docx"},"to":{"type":"string","description":"pdf (default) | docx | odt | html | txt | xlsx | ods | csv | pptx | png | jpg"}},"example":{"url":"https://example.com/deck.pptx","to":"pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"document url"},"source":{"type":"string","description":"source extension if url has none, e.g. docx"},"to":{"type":"string","description":"pdf (default) | docx | odt | html | txt | xlsx | ods | csv | pptx | png | jpg"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/csv-convert":{"post":{"tags":["services"],"operationId":"csv_convert","summary":"Table format convert — €0.006 per file","description":"Convert between csv, tsv, json, ndjson, xlsx and parquet. Delimiter and encoding (utf-8, utf-8-sig, cp1251, latin-1) auto-detected for csv/tsv, format auto-detected from the file signature when 'from' is omitted. schema_only=true returns just column names and types. Up to 10 MB, 1M cells. Engine: pandas + openpyxl + pyarrow · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original name, helps auto-detection"},"source":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (default auto)"},"to":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (required unless schema_only)"},"sheet":{"type":"string","description":"sheet name/index for xlsx input or output"},"delimiter":{"type":"string","description":"csv/tsv delimiter override"},"schema_only":{"type":"string","description":"bool, return column names and types only, no file"}},"example":{"url":"https://example.com/report.xlsx","source":"xlsx","to":"csv"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original name, helps auto-detection"},"source":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (default auto)"},"to":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (required unless schema_only)"},"sheet":{"type":"string","description":"sheet name/index for xlsx input or output"},"delimiter":{"type":"string","description":"csv/tsv delimiter override"},"schema_only":{"type":"string","description":"bool, return column names and types only, no file"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/csv-convert":{"post":{"tags":["playground"],"operationId":"try_csv_convert","summary":"Table format convert — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original name, helps auto-detection"},"source":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (default auto)"},"to":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (required unless schema_only)"},"sheet":{"type":"string","description":"sheet name/index for xlsx input or output"},"delimiter":{"type":"string","description":"csv/tsv delimiter override"},"schema_only":{"type":"string","description":"bool, return column names and types only, no file"}},"example":{"url":"https://example.com/report.xlsx","source":"xlsx","to":"csv"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original name, helps auto-detection"},"source":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (default auto)"},"to":{"type":"string","description":"csv | tsv | json | ndjson | xlsx | parquet (required unless schema_only)"},"sheet":{"type":"string","description":"sheet name/index for xlsx input or output"},"delimiter":{"type":"string","description":"csv/tsv delimiter override"},"schema_only":{"type":"string","description":"bool, return column names and types only, no file"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/text-diff":{"post":{"tags":["services"],"operationId":"text_diff","summary":"Text diff — €0.001 per text","description":"Unified diff, added/removed lines and similarity percent between two texts, or two files given by url/upload (PDF, DOCX, plain text extracted on our side). Billed ×3 when a side is a PDF or DOCX. Side b only can be a multipart file. Engine: difflib (stdlib) · CPU, pdfplumber/python-docx for files.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text_a":{"type":"string","description":"first text"},"url_a":{"type":"string","description":"url to pdf/docx/txt (alternative to text_a)"},"text_b":{"type":"string","description":"second text"},"url_b":{"type":"string","description":"url (alternative to text_b)"},"context":{"type":"string","description":"unified diff context lines, 0–10 (default 3)"},"ignore_whitespace":{"type":"string","description":"bool, trim each line before comparing (default false)"}},"example":{"text_a":"The quick brown fox jumps over the lazy dog.","text_b":"The quick brown fox leaps over the lazy dog."}}},"multipart/form-data":{"schema":{"type":"object","properties":{"text_a":{"type":"string","description":"first text"},"url_a":{"type":"string","description":"url to pdf/docx/txt (alternative to text_a)"},"text_b":{"type":"string","description":"second text"},"url_b":{"type":"string","description":"url (alternative to text_b)"},"context":{"type":"string","description":"unified diff context lines, 0–10 (default 3)"},"ignore_whitespace":{"type":"string","description":"bool, trim each line before comparing (default false)"},"file":{"type":"string","format":"binary","description":"multipart file for side b (alternative to text_b/url_b)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/text-diff":{"post":{"tags":["playground"],"operationId":"try_text_diff","summary":"Text diff — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text_a":{"type":"string","description":"first text"},"url_a":{"type":"string","description":"url to pdf/docx/txt (alternative to text_a)"},"text_b":{"type":"string","description":"second text"},"url_b":{"type":"string","description":"url (alternative to text_b)"},"context":{"type":"string","description":"unified diff context lines, 0–10 (default 3)"},"ignore_whitespace":{"type":"string","description":"bool, trim each line before comparing (default false)"}},"example":{"text_a":"The quick brown fox jumps over the lazy dog.","text_b":"The quick brown fox leaps over the lazy dog."}}},"multipart/form-data":{"schema":{"type":"object","properties":{"text_a":{"type":"string","description":"first text"},"url_a":{"type":"string","description":"url to pdf/docx/txt (alternative to text_a)"},"text_b":{"type":"string","description":"second text"},"url_b":{"type":"string","description":"url (alternative to text_b)"},"context":{"type":"string","description":"unified diff context lines, 0–10 (default 3)"},"ignore_whitespace":{"type":"string","description":"bool, trim each line before comparing (default false)"},"file":{"type":"string","format":"binary","description":"multipart file for side b (alternative to text_b/url_b)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/md-convert":{"post":{"tags":["services"],"operationId":"md_convert","summary":"Markdown convert — €0.002 per document","description":"GitHub-flavoured Markdown (tables, strikethrough, autolinks) to HTML, PDF or DOCX. Raw HTML in the source is escaped, never executed; PDF render loads no network beyond the same public-host guard as html-pdf. Engine: mistune · CPU, LibreOffice headless for docx.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"markdown":{"type":"string","description":"source text"},"url":{"type":"string","description":"url to a .md/.txt file (alternative)"},"to":{"type":"string","description":"html (default) | pdf | docx"},"format":{"type":"string","description":"A4 (default) | A3 | A5 | Letter | Legal (to=pdf)"},"margin":{"type":"string","description":"e.g. 15mm (to=pdf)"}},"example":{"markdown":"# Report\n\nRevenue is **up** 12% this quarter.\n\n| Q | Revenue |\n|---|---|\n| Q1 | 120 |","to":"html"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"markdown":{"type":"string","description":"source text"},"url":{"type":"string","description":"url to a .md/.txt file (alternative)"},"to":{"type":"string","description":"html (default) | pdf | docx"},"format":{"type":"string","description":"A4 (default) | A3 | A5 | Letter | Legal (to=pdf)"},"margin":{"type":"string","description":"e.g. 15mm (to=pdf)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/md-convert":{"post":{"tags":["playground"],"operationId":"try_md_convert","summary":"Markdown convert — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"markdown":{"type":"string","description":"source text"},"url":{"type":"string","description":"url to a .md/.txt file (alternative)"},"to":{"type":"string","description":"html (default) | pdf | docx"},"format":{"type":"string","description":"A4 (default) | A3 | A5 | Letter | Legal (to=pdf)"},"margin":{"type":"string","description":"e.g. 15mm (to=pdf)"}},"example":{"markdown":"# Report\n\nRevenue is **up** 12% this quarter.\n\n| Q | Revenue |\n|---|---|\n| Q1 | 120 |","to":"html"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"markdown":{"type":"string","description":"source text"},"url":{"type":"string","description":"url to a .md/.txt file (alternative)"},"to":{"type":"string","description":"html (default) | pdf | docx"},"format":{"type":"string","description":"A4 (default) | A3 | A5 | Letter | Legal (to=pdf)"},"margin":{"type":"string","description":"e.g. 15mm (to=pdf)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/link-preview":{"post":{"tags":["services"],"operationId":"link_preview","summary":"Link preview — €0.001 per url","description":"Title, description, image, favicon, site name, canonical and author of any public URL, the way messengers render a link card. Engine: HTTP + Open Graph.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"}},"example":{"url":"https://example.com/article"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/link-preview":{"post":{"tags":["playground"],"operationId":"try_link_preview","summary":"Link preview — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"}},"example":{"url":"https://example.com/article"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/email-verify":{"post":{"tags":["services"],"operationId":"email_verify","summary":"Email verification — €0.002 per address","description":"Syntax, MX records, disposable domain, role address, free provider, typo suggestion and a 0–100 score. Mailbox existence is not probed. Engine: syntax + MX + lists.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"address to check"}},"example":{"email":"john@example.com"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/email-verify":{"post":{"tags":["playground"],"operationId":"try_email_verify","summary":"Email verification — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"address to check"}},"example":{"email":"john@example.com"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/phone-validate":{"post":{"tags":["services"],"operationId":"phone_validate","summary":"Phone validation — €0.0015 per number","description":"Validity, E.164 and national formats, country, line type (mobile, landline, VoIP…), carrier, location, time zones. Engine: libphonenumber.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"number in any format"},"country":{"type":"string","description":"ISO-2 default region for local numbers, e.g. UA"}},"example":{"phone":"+380671234567"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/phone-validate":{"post":{"tags":["playground"],"operationId":"try_phone_validate","summary":"Phone validation — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"number in any format"},"country":{"type":"string","description":"ISO-2 default region for local numbers, e.g. UA"}},"example":{"phone":"+380671234567"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/detect-lang":{"post":{"tags":["services"],"operationId":"detect_lang","summary":"Language detection — €0.0005 per request","description":"ISO-639-1 language of a text with confidence and top-3 candidates, 55 languages, works from a few words. Engine: langdetect · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text, up to 20 000 chars"}},"example":{"text":"Dobar dan, koliko košta?"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/detect-lang":{"post":{"tags":["playground"],"operationId":"try_detect_lang","summary":"Language detection — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text, up to 20 000 chars"}},"example":{"text":"Dobar dan, koliko košta?"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/fx":{"post":{"tags":["services"],"operationId":"fx","summary":"Exchange rates — €0.0002 per request","description":"Daily reference rates for 31 currencies plus UAH, any base, conversion of an amount, history for the last 90 days. Engine: ECB + NBU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"base":{"type":"string","description":"currency code (default EUR)"},"symbols":{"type":"string","description":"comma-separated codes (default all)"},"amount":{"type":"string","description":"number to convert"},"date":{"type":"string","description":"YYYY-MM-DD within 90 days"}},"example":{"base":"EUR","symbols":"USD,UAH","amount":"100"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/fx":{"post":{"tags":["playground"],"operationId":"try_fx","summary":"Exchange rates — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"base":{"type":"string","description":"currency code (default EUR)"},"symbols":{"type":"string","description":"comma-separated codes (default all)"},"amount":{"type":"string","description":"number to convert"},"date":{"type":"string","description":"YYYY-MM-DD within 90 days"}},"example":{"base":"EUR","symbols":"USD,UAH","amount":"100"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/ip-geo":{"post":{"tags":["services"],"operationId":"ip_geo","summary":"IP geolocation — €0.0003 per lookup","description":"Country, region, city, coordinates, EU flag, ASN and organisation, datacenter/hosting flag for IPv4 and IPv6. Engine: DB-IP Lite · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string","description":"IPv4 or IPv6; 'me' = caller address"}},"example":{"ip":"8.8.8.8"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/ip-geo":{"post":{"tags":["playground"],"operationId":"try_ip_geo","summary":"IP geolocation — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string","description":"IPv4 or IPv6; 'me' = caller address"}},"example":{"ip":"8.8.8.8"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/uptime":{"post":{"tags":["services"],"operationId":"uptime","summary":"Uptime & SSL check — €0.0005 per check","description":"HTTP status, latency, redirects, server header, TLS certificate issuer and days to expiry. One probe per call; schedule them from your side. Engine: HTTP probe from Germany.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"site url or host"}},"example":{"url":"https://example.com"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/uptime":{"post":{"tags":["playground"],"operationId":"try_uptime","summary":"Uptime & SSL check — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"site url or host"}},"example":{"url":"https://example.com"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/vat-check":{"post":{"tags":["services"],"operationId":"vat_check","summary":"VAT number check — €0.004 per lookup","description":"Validity of an EU VAT number via VIES (27 EU states + XI), with registered company name and address when the member state returns them. Engine: VIES.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"vat":{"type":"string","description":"number with or without country prefix, e.g. DE123456789"},"country":{"type":"string","description":"ISO-2 if not in the number"}},"example":{"vat":"DE811569869"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/vat-check":{"post":{"tags":["playground"],"operationId":"try_vat_check","summary":"VAT number check — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"vat":{"type":"string","description":"number with or without country prefix, e.g. DE123456789"},"country":{"type":"string","description":"ISO-2 if not in the number"}},"example":{"vat":"DE811569869"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/ocr":{"post":{"tags":["services"],"operationId":"ocr","summary":"OCR — €0.008 per page","description":"Text from images and scanned PDFs with line boxes and confidence. Languages: en, ru, uk, de, fr, es, it, pl, pt, sr, tr, nl (combine with commas). Billed per page. Engine: tesseract 5 · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"en (default) | ru | uk | de | … | en,ru"},"pages":{"type":"string","description":"for PDF, e.g. 1-3"},"boxes":{"type":"string","description":"bool, return line boxes (default true)"}},"example":{"url":"https://example.com/scan.png","language":"en,ru"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"en (default) | ru | uk | de | … | en,ru"},"pages":{"type":"string","description":"for PDF, e.g. 1-3"},"boxes":{"type":"string","description":"bool, return line boxes (default true)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/ocr":{"post":{"tags":["playground"],"operationId":"try_ocr","summary":"OCR — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"en (default) | ru | uk | de | … | en,ru"},"pages":{"type":"string","description":"for PDF, e.g. 1-3"},"boxes":{"type":"string","description":"bool, return line boxes (default true)"}},"example":{"url":"https://example.com/scan.png","language":"en,ru"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"en (default) | ru | uk | de | … | en,ru"},"pages":{"type":"string","description":"for PDF, e.g. 1-3"},"boxes":{"type":"string","description":"bool, return line boxes (default true)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/image-moderate":{"post":{"tags":["services"],"operationId":"image_moderate","summary":"Image moderation — €0.002 per image","description":"Nudity check for marketplaces and bots: verdict safe / suggestive / explicit, score, faces, labelled boxes. Weapons, drugs and text are not evaluated. Engine: NudeNet ONNX · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"}},"example":{"url":"https://example.com/upload.jpg"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/image-moderate":{"post":{"tags":["playground"],"operationId":"try_image_moderate","summary":"Image moderation — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"}},"example":{"url":"https://example.com/upload.jpg"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/embed":{"post":{"tags":["services"],"operationId":"embed","summary":"Embeddings — €0.0002 per 1 000 tokens","description":"384-dimensional normalized vectors for search and RAG, 50 languages. Up to 100 texts per call, 8 000 chars each. Billed per started 1 000 tokens. Engine: multilingual-MiniLM-L12 ONNX · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"one text"},"texts":{"type":"string","description":"JSON array of texts (alternative)"},"kind":{"type":"string","description":"passage (default) | query"}},"example":{"texts":["first text","second text"]}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/embed":{"post":{"tags":["playground"],"operationId":"try_embed","summary":"Embeddings — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"one text"},"texts":{"type":"string","description":"JSON array of texts (alternative)"},"kind":{"type":"string","description":"passage (default) | query"}},"example":{"texts":["first text","second text"]}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/semantic-search":{"post":{"tags":["services"],"operationId":"semantic_search","summary":"Hosted semantic search — €0.001 per query","description":"Your own vector index behind the API key: upsert documents (chunked automatically), query in any language, get ranked chunks with metadata. Collections per key, 50 000 chunks. Upsert billed per 5 chunks. Engine: MiniLM-L12 + sqlite · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"query (default) | upsert | delete | list"},"collection":{"type":"string","description":"name (default 'default')"},"query":{"type":"string","description":"search text"},"top_k":{"type":"string","description":"1–50 (default 5)"},"docs":{"type":"string","description":"JSON array [{id, text, meta}] for upsert"},"text":{"type":"string","description":"single document text for upsert"},"id":{"type":"string","description":"document id"},"ids":{"type":"string","description":"ids to delete (comma-separated)"}},"example":{"op":"query","collection":"docs","query":"refund policy","top_k":"5"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/semantic-search":{"post":{"tags":["playground"],"operationId":"try_semantic_search","summary":"Hosted semantic search — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"query (default) | upsert | delete | list"},"collection":{"type":"string","description":"name (default 'default')"},"query":{"type":"string","description":"search text"},"top_k":{"type":"string","description":"1–50 (default 5)"},"docs":{"type":"string","description":"JSON array [{id, text, meta}] for upsert"},"text":{"type":"string","description":"single document text for upsert"},"id":{"type":"string","description":"document id"},"ids":{"type":"string","description":"ids to delete (comma-separated)"}},"example":{"op":"query","collection":"docs","query":"refund policy","top_k":"5"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/doc-redact":{"post":{"tags":["services"],"operationId":"doc_redact","summary":"PII redaction — €0.01 per page (3 000 chars)","description":"Mask emails, phones, IBANs, card numbers, IPs and — via NER (en, ru, uk, de) — names, organisations, locations in text or a PDF. Returns redacted text and entity positions. Engine: regex + spaCy NER · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to redact"},"url":{"type":"string","description":"pdf url (alternative)"},"entities":{"type":"string","description":"email,phone,iban,card,ip,person,org,location (default all)"},"mode":{"type":"string","description":"mask → [EMAIL] (default) | label → [PERSON_1] consistent per value"},"language":{"type":"string","description":"en | ru | uk | de (default auto)"},"country":{"type":"string","description":"default region for phones (default UA)"},"return_values":{"type":"string","description":"bool, include original values"}},"example":{"text":"Contact John Smith at john@example.com or +380671234567","mode":"label"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to redact"},"url":{"type":"string","description":"pdf url (alternative)"},"entities":{"type":"string","description":"email,phone,iban,card,ip,person,org,location (default all)"},"mode":{"type":"string","description":"mask → [EMAIL] (default) | label → [PERSON_1] consistent per value"},"language":{"type":"string","description":"en | ru | uk | de (default auto)"},"country":{"type":"string","description":"default region for phones (default UA)"},"return_values":{"type":"string","description":"bool, include original values"},"file":{"type":"string","format":"binary","description":"multipart pdf (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/doc-redact":{"post":{"tags":["playground"],"operationId":"try_doc_redact","summary":"PII redaction — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to redact"},"url":{"type":"string","description":"pdf url (alternative)"},"entities":{"type":"string","description":"email,phone,iban,card,ip,person,org,location (default all)"},"mode":{"type":"string","description":"mask → [EMAIL] (default) | label → [PERSON_1] consistent per value"},"language":{"type":"string","description":"en | ru | uk | de (default auto)"},"country":{"type":"string","description":"default region for phones (default UA)"},"return_values":{"type":"string","description":"bool, include original values"}},"example":{"text":"Contact John Smith at john@example.com or +380671234567","mode":"label"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to redact"},"url":{"type":"string","description":"pdf url (alternative)"},"entities":{"type":"string","description":"email,phone,iban,card,ip,person,org,location (default all)"},"mode":{"type":"string","description":"mask → [EMAIL] (default) | label → [PERSON_1] consistent per value"},"language":{"type":"string","description":"en | ru | uk | de (default auto)"},"country":{"type":"string","description":"default region for phones (default UA)"},"return_values":{"type":"string","description":"bool, include original values"},"file":{"type":"string","format":"binary","description":"multipart pdf (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/readability-score":{"post":{"tags":["services"],"operationId":"readability_score","summary":"Readability score — €0.001 per request","description":"Flesch Reading Ease, Flesch-Kincaid grade, Gunning Fog, SMOG, Coleman-Liau, ARI for en/de/es/fr/it/nl/pl/ru/hu (formulas are calibrated per language); word/sentence counts, average sentence length, long-word ratio and reading time for any language. Up to 100 000 chars. Engine: textstat · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to score"},"language":{"type":"string","description":"ISO-2 (default en); unsupported languages get language-independent metrics only"}},"example":{"text":"The cat sat on the mat. It was a sunny day and everyone felt happy.","language":"en"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/readability-score":{"post":{"tags":["playground"],"operationId":"try_readability_score","summary":"Readability score — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to score"},"language":{"type":"string","description":"ISO-2 (default en); unsupported languages get language-independent metrics only"}},"example":{"text":"The cat sat on the mat. It was a sunny day and everyone felt happy.","language":"en"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/profanity-filter":{"post":{"tags":["services"],"operationId":"profanity_filter","summary":"Profanity filter — €0.0005 per request","description":"Finds and masks profanity in en, ru, uk, de, es, fr (auto-detects across all of them unless language is set). Catches basic obfuscation: latin look-alikes for Cyrillic letters, repeated letters, stray asterisks/digits inside a word. Up to 50 000 chars. Engine: LDNOOBW word lists (CC-BY-4.0, github.com/LDNOOBW) + own ru/uk root list · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to check"},"language":{"type":"string","description":"auto (default, all 6) | comma-separated subset"},"mode":{"type":"string","description":"mask (default) | detect"},"mask_char":{"type":"string","description":"single character (default *)"}},"example":{"text":"This is a clean sentence.","language":"auto"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/profanity-filter":{"post":{"tags":["playground"],"operationId":"try_profanity_filter","summary":"Profanity filter — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to check"},"language":{"type":"string","description":"auto (default, all 6) | comma-separated subset"},"mode":{"type":"string","description":"mask (default) | detect"},"mask_char":{"type":"string","description":"single character (default *)"}},"example":{"text":"This is a clean sentence.","language":"auto"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/entity-extract":{"post":{"tags":["services"],"operationId":"entity_extract","summary":"Named entity extraction — €0.001 per request","description":"mode=ner (default): people, organizations, locations, dates, money, percent — en/de/ru/uk, auto-detected language. mode=llm: your own entity types, any language, billed at ×3 (price ×3). Positions are recomputed against the source text. Up to 20 000 chars. Engine: spaCy NER (en/ru/uk/de) · CPU, or LLM for custom types.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to scan"},"url":{"type":"string","description":"page url (alternative)"},"mode":{"type":"string","description":"ner (default) | llm"},"types":{"type":"string","description":"ner: comma list to keep (default all 6); llm: your own types, required"},"language":{"type":"string","description":"ISO-2 for mode=ner (default auto)"}},"example":{"text":"Microsoft hired Anna Kowalski in Berlin on 2024-03-01 for $120,000.","mode":"ner"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/entity-extract":{"post":{"tags":["playground"],"operationId":"try_entity_extract","summary":"Named entity extraction — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to scan"},"url":{"type":"string","description":"page url (alternative)"},"mode":{"type":"string","description":"ner (default) | llm"},"types":{"type":"string","description":"ner: comma list to keep (default all 6); llm: your own types, required"},"language":{"type":"string","description":"ISO-2 for mode=ner (default auto)"}},"example":{"text":"Microsoft hired Anna Kowalski in Berlin on 2024-03-01 for $120,000.","mode":"ner"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/denoise":{"post":{"tags":["services"],"operationId":"denoise","summary":"Audio denoise — €0.006 per minute","description":"Spectral noise reduction for voice memos, calls and podcasts, plus high-pass and loudness normalisation to -16 LUFS. Output MP3, OGG or WAV. Billed per started minute. Engine: noisereduce + ffmpeg · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"audio or video url"},"strength":{"type":"string","description":"0.1–1.0 (default 0.85)"},"stationary":{"type":"string","description":"bool, constant hum (default false)"},"normalize":{"type":"string","description":"bool (default true)"},"format":{"type":"string","description":"mp3 (default) | ogg | wav"}},"example":{"url":"https://example.com/memo.m4a"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"audio or video url"},"strength":{"type":"string","description":"0.1–1.0 (default 0.85)"},"stationary":{"type":"string","description":"bool, constant hum (default false)"},"normalize":{"type":"string","description":"bool (default true)"},"format":{"type":"string","description":"mp3 (default) | ogg | wav"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/denoise":{"post":{"tags":["playground"],"operationId":"try_denoise","summary":"Audio denoise — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"audio or video url"},"strength":{"type":"string","description":"0.1–1.0 (default 0.85)"},"stationary":{"type":"string","description":"bool, constant hum (default false)"},"normalize":{"type":"string","description":"bool (default true)"},"format":{"type":"string","description":"mp3 (default) | ogg | wav"}},"example":{"url":"https://example.com/memo.m4a"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"audio or video url"},"strength":{"type":"string","description":"0.1–1.0 (default 0.85)"},"stationary":{"type":"string","description":"bool, constant hum (default false)"},"normalize":{"type":"string","description":"bool (default true)"},"format":{"type":"string","description":"mp3 (default) | ogg | wav"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/subtitles":{"post":{"tags":["services"],"operationId":"subtitles","summary":"Subtitles & burn-in — €0.02 per minute","description":"Transcribe a video or audio, wrap cues to 42 chars, return SRT/VTT or burn styled subtitles into an MP4 for Reels and Shorts. Optional translation to English. Billed per started minute. Engine: faster-whisper + ffmpeg libass · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video or audio url"},"mode":{"type":"string","description":"srt (default) | vtt | burn"},"language":{"type":"string","description":"ISO code (default auto)"},"translate":{"type":"string","description":"bool, to English"},"max_chars":{"type":"string","description":"16–80 per cue (default 42)"},"font_size":{"type":"string","description":"12–72 (burn)"},"position":{"type":"string","description":"bottom (default) | middle | top"},"color":{"type":"string","description":"hex text color (default FFFFFF)"}},"example":{"url":"https://example.com/reel.mp4","mode":"burn"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video or audio url"},"mode":{"type":"string","description":"srt (default) | vtt | burn"},"language":{"type":"string","description":"ISO code (default auto)"},"translate":{"type":"string","description":"bool, to English"},"max_chars":{"type":"string","description":"16–80 per cue (default 42)"},"font_size":{"type":"string","description":"12–72 (burn)"},"position":{"type":"string","description":"bottom (default) | middle | top"},"color":{"type":"string","description":"hex text color (default FFFFFF)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/subtitles":{"post":{"tags":["playground"],"operationId":"try_subtitles","summary":"Subtitles & burn-in — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video or audio url"},"mode":{"type":"string","description":"srt (default) | vtt | burn"},"language":{"type":"string","description":"ISO code (default auto)"},"translate":{"type":"string","description":"bool, to English"},"max_chars":{"type":"string","description":"16–80 per cue (default 42)"},"font_size":{"type":"string","description":"12–72 (burn)"},"position":{"type":"string","description":"bottom (default) | middle | top"},"color":{"type":"string","description":"hex text color (default FFFFFF)"}},"example":{"url":"https://example.com/reel.mp4","mode":"burn"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video or audio url"},"mode":{"type":"string","description":"srt (default) | vtt | burn"},"language":{"type":"string","description":"ISO code (default auto)"},"translate":{"type":"string","description":"bool, to English"},"max_chars":{"type":"string","description":"16–80 per cue (default 42)"},"font_size":{"type":"string","description":"12–72 (burn)"},"position":{"type":"string","description":"bottom (default) | middle | top"},"color":{"type":"string","description":"hex text color (default FFFFFF)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/video-clip":{"post":{"tags":["services"],"operationId":"video_clip","summary":"Video cut, crop, GIF — €0.008 per minute","description":"Trim by start/end, centre-crop to 9:16, 1:1, 4:5, 16:9, resize, mute; output MP4, WebM, an animated GIF or WebP (clip up to 15 s), a JPG frame or MP3 audio. Input up to 25 MB / 20 min. Engine: ffmpeg · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 | 1:1 | 4:5 | 16:9 | 4:3"},"width":{"type":"string","description":"output width px"},"format":{"type":"string","description":"mp4 (default) | webm | gif | webp | jpg | mp3"},"fps":{"type":"string","description":"gif/webp frames per second (default 12)"},"quality":{"type":"string","description":"1–100 for webp (default 75)"},"at":{"type":"string","description":"frame time for jpg"},"mute":{"type":"string","description":"bool"},"crf":{"type":"string","description":"18–35 quality for mp4 (default 23)"}},"example":{"url":"https://example.com/talk.mp4","start":"10","end":"25","aspect":"9:16","width":"1080"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 | 1:1 | 4:5 | 16:9 | 4:3"},"width":{"type":"string","description":"output width px"},"format":{"type":"string","description":"mp4 (default) | webm | gif | webp | jpg | mp3"},"fps":{"type":"string","description":"gif/webp frames per second (default 12)"},"quality":{"type":"string","description":"1–100 for webp (default 75)"},"at":{"type":"string","description":"frame time for jpg"},"mute":{"type":"string","description":"bool"},"crf":{"type":"string","description":"18–35 quality for mp4 (default 23)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/video-clip":{"post":{"tags":["playground"],"operationId":"try_video_clip","summary":"Video cut, crop, GIF — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 | 1:1 | 4:5 | 16:9 | 4:3"},"width":{"type":"string","description":"output width px"},"format":{"type":"string","description":"mp4 (default) | webm | gif | webp | jpg | mp3"},"fps":{"type":"string","description":"gif/webp frames per second (default 12)"},"quality":{"type":"string","description":"1–100 for webp (default 75)"},"at":{"type":"string","description":"frame time for jpg"},"mute":{"type":"string","description":"bool"},"crf":{"type":"string","description":"18–35 quality for mp4 (default 23)"}},"example":{"url":"https://example.com/talk.mp4","start":"10","end":"25","aspect":"9:16","width":"1080"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 | 1:1 | 4:5 | 16:9 | 4:3"},"width":{"type":"string","description":"output width px"},"format":{"type":"string","description":"mp4 (default) | webm | gif | webp | jpg | mp3"},"fps":{"type":"string","description":"gif/webp frames per second (default 12)"},"quality":{"type":"string","description":"1–100 for webp (default 75)"},"at":{"type":"string","description":"frame time for jpg"},"mute":{"type":"string","description":"bool"},"crf":{"type":"string","description":"18–35 quality for mp4 (default 23)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/summarize":{"post":{"tags":["services"],"operationId":"summarize","summary":"Summarize — €0.003 per request (4 000 chars)","description":"Faithful summary of text or a URL: short, medium or long; paragraph, bullets or TL;DR; any output language. Billed per started 4 000 chars. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to summarize"},"url":{"type":"string","description":"page url (alternative)"},"length":{"type":"string","description":"short | medium (default) | long"},"format":{"type":"string","description":"paragraph (default) | bullets | tldr"},"language":{"type":"string","description":"output language (default same)"}},"example":{"url":"https://example.com/article","format":"bullets","language":"en"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/summarize":{"post":{"tags":["playground"],"operationId":"try_summarize","summary":"Summarize — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to summarize"},"url":{"type":"string","description":"page url (alternative)"},"length":{"type":"string","description":"short | medium (default) | long"},"format":{"type":"string","description":"paragraph (default) | bullets | tldr"},"language":{"type":"string","description":"output language (default same)"}},"example":{"url":"https://example.com/article","format":"bullets","language":"en"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/translate":{"post":{"tags":["services"],"operationId":"translate","summary":"Translate — €0.01 per 1 000 chars","description":"Translation that keeps Markdown, placeholders and tone; glossary supported; 38 languages. Billed per started 1 000 chars. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text"},"to":{"type":"string","description":"target ISO code, e.g. en, de, uk"},"tone":{"type":"string","description":"neutral (default) | formal | casual | marketing"},"glossary":{"type":"string","description":"source=target pairs, comma-separated"}},"example":{"text":"Hello, how are you?","to":"de"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/translate":{"post":{"tags":["playground"],"operationId":"try_translate","summary":"Translate — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text"},"to":{"type":"string","description":"target ISO code, e.g. en, de, uk"},"tone":{"type":"string","description":"neutral (default) | formal | casual | marketing"},"glossary":{"type":"string","description":"source=target pairs, comma-separated"}},"example":{"text":"Hello, how are you?","to":"de"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/extract-json":{"post":{"tags":["services"],"operationId":"extract_json","summary":"Extract to JSON — €0.005 per request (4 000 chars)","description":"Structured data from free text, email or a page by your JSON Schema or a field list. Nulls for missing values, ISO dates, numeric numbers. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"source text"},"url":{"type":"string","description":"page url (alternative)"},"schema":{"type":"string","description":"JSON Schema object or comma-separated field list"},"instructions":{"type":"string","description":"extra rules"}},"example":{"text":"Order #512 for Anna Smith, 3 chairs at €49, deliver by 2026-12-01","schema":"order_id, customer, items, total, delivery_date"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/extract-json":{"post":{"tags":["playground"],"operationId":"try_extract_json","summary":"Extract to JSON — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"source text"},"url":{"type":"string","description":"page url (alternative)"},"schema":{"type":"string","description":"JSON Schema object or comma-separated field list"},"instructions":{"type":"string","description":"extra rules"}},"example":{"text":"Order #512 for Anna Smith, 3 chairs at €49, deliver by 2026-12-01","schema":"order_id, customer, items, total, delivery_date"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/classify":{"post":{"tags":["services"],"operationId":"classify","summary":"Classify & moderate — €0.002 per request","description":"Zero-shot classification into your labels (up to 30) with confidence and a one-line reason; single or multi-label. Tickets, reviews, leads, moderation. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text"},"labels":{"type":"string","description":"comma-separated labels"},"multi":{"type":"string","description":"bool, allow several labels"}},"example":{"text":"The app crashes when I open settings","labels":"bug, feature request, question, praise"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/classify":{"post":{"tags":["playground"],"operationId":"try_classify","summary":"Classify & moderate — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text"},"labels":{"type":"string","description":"comma-separated labels"},"multi":{"type":"string","description":"bool, allow several labels"}},"example":{"text":"The app crashes when I open settings","labels":"bug, feature request, question, praise"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/rewrite":{"post":{"tags":["services"],"operationId":"rewrite","summary":"Rewrite & change tone — €0.004 per request (6 000 chars)","description":"Rewrite in a given tone and length, keep facts and Markdown; optional language switch and custom instructions. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text"},"tone":{"type":"string","description":"e.g. friendly, formal, marketing"},"length":{"type":"string","description":"same (default) | shorter | longer"},"language":{"type":"string","description":"output language"},"instructions":{"type":"string","description":"extra rules"}},"example":{"text":"hey, the thing is broken again, fix it","tone":"polite support reply"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/rewrite":{"post":{"tags":["playground"],"operationId":"try_rewrite","summary":"Rewrite & change tone — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text"},"tone":{"type":"string","description":"e.g. friendly, formal, marketing"},"length":{"type":"string","description":"same (default) | shorter | longer"},"language":{"type":"string","description":"output language"},"instructions":{"type":"string","description":"extra rules"}},"example":{"text":"hey, the thing is broken again, fix it","tone":"polite support reply"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/seo-meta":{"post":{"tags":["services"],"operationId":"seo_meta","summary":"SEO title & description — €0.004 per page","description":"Title ≤60, description ≤155, H1, keywords, slug, Open Graph texts and 3 FAQ pairs from page content or a URL. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"},"text":{"type":"string","description":"page text (alternative)"},"language":{"type":"string","description":"output language"},"keywords":{"type":"string","description":"target keywords"}},"example":{"url":"https://example.com/pricing","language":"en"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/seo-meta":{"post":{"tags":["playground"],"operationId":"try_seo_meta","summary":"SEO title & description — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"},"text":{"type":"string","description":"page text (alternative)"},"language":{"type":"string","description":"output language"},"keywords":{"type":"string","description":"target keywords"}},"example":{"url":"https://example.com/pricing","language":"en"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/caption":{"post":{"tags":["services"],"operationId":"caption","summary":"Image caption & alt text — €0.003 per image","description":"Alt text ≤125 chars, a 2–3 sentence caption, tags, text found in the image and dominant colors. For catalogs, accessibility and SEO. Engine: vision LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"language":{"type":"string","description":"output language (default en)"},"context":{"type":"string","description":"what the image is for"}},"example":{"url":"https://example.com/product.jpg","language":"en"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"language":{"type":"string","description":"output language (default en)"},"context":{"type":"string","description":"what the image is for"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/caption":{"post":{"tags":["playground"],"operationId":"try_caption","summary":"Image caption & alt text — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"language":{"type":"string","description":"output language (default en)"},"context":{"type":"string","description":"what the image is for"}},"example":{"url":"https://example.com/product.jpg","language":"en"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image url"},"language":{"type":"string","description":"output language (default en)"},"context":{"type":"string","description":"what the image is for"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/invoice-parse":{"post":{"tags":["services"],"operationId":"invoice_parse","summary":"Invoice & receipt parsing — €0.03 per document","description":"Vendor, customer, number, dates, currency, totals, VAT and line items from a photo, scan or PDF invoice. Totals are cross-checked. mode=pro (€0.06): every line with SKU and VAT rate, VAT breakdown by rate, PO and payment references, deterministic checks (lines vs subtotal, base × rate vs VAT, IBAN checksum, EU VAT-ID format, due date) and optional matching against a purchase order. Engine: OCR + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"OCR languages for scans (default en,ru,uk,de)"},"mode":{"type":"string","description":"basic (default, €0.03) | pro (€0.06): line items with SKU and per-line VAT, VAT breakdown by rate, payment details, arithmetic, IBAN, VAT-ID and date checks"},"po":{"type":"string","description":"pro only: purchase order JSON {number, items:[{sku, description, qty, unit_price}]} to match invoice lines against"}},"example":{"url":"https://example.com/invoice.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"OCR languages for scans (default en,ru,uk,de)"},"mode":{"type":"string","description":"basic (default, €0.03) | pro (€0.06): line items with SKU and per-line VAT, VAT breakdown by rate, payment details, arithmetic, IBAN, VAT-ID and date checks"},"po":{"type":"string","description":"pro only: purchase order JSON {number, items:[{sku, description, qty, unit_price}]} to match invoice lines against"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/invoice-parse":{"post":{"tags":["playground"],"operationId":"try_invoice_parse","summary":"Invoice & receipt parsing — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"OCR languages for scans (default en,ru,uk,de)"},"mode":{"type":"string","description":"basic (default, €0.03) | pro (€0.06): line items with SKU and per-line VAT, VAT breakdown by rate, payment details, arithmetic, IBAN, VAT-ID and date checks"},"po":{"type":"string","description":"pro only: purchase order JSON {number, items:[{sku, description, qty, unit_price}]} to match invoice lines against"}},"example":{"url":"https://example.com/invoice.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"image or pdf url"},"language":{"type":"string","description":"OCR languages for scans (default en,ru,uk,de)"},"mode":{"type":"string","description":"basic (default, €0.03) | pro (€0.06): line items with SKU and per-line VAT, VAT breakdown by rate, payment details, arithmetic, IBAN, VAT-ID and date checks"},"po":{"type":"string","description":"pro only: purchase order JSON {number, items:[{sku, description, qty, unit_price}]} to match invoice lines against"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/docx-gen":{"post":{"tags":["services"],"operationId":"docx_gen","summary":"DOCX from template — €0.004 per document","description":"Fill a DOCX template with Jinja placeholders ({{ name }}, loops, conditions) from JSON data; optionally return PDF. Contracts, offers, certificates. Engine: docxtpl · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"template_url":{"type":"string","description":"docx template url"},"data":{"type":"string","description":"JSON object with values"},"to":{"type":"string","description":"docx (default) | pdf"}},"example":{"template_url":"https://example.com/contract.docx","data":{"client":"ACME","amount":1200},"to":"pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"template_url":{"type":"string","description":"docx template url"},"data":{"type":"string","description":"JSON object with values"},"to":{"type":"string","description":"docx (default) | pdf"},"file":{"type":"string","format":"binary","description":"multipart template (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/docx-gen":{"post":{"tags":["playground"],"operationId":"try_docx_gen","summary":"DOCX from template — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"template_url":{"type":"string","description":"docx template url"},"data":{"type":"string","description":"JSON object with values"},"to":{"type":"string","description":"docx (default) | pdf"}},"example":{"template_url":"https://example.com/contract.docx","data":{"client":"ACME","amount":1200},"to":"pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"template_url":{"type":"string","description":"docx template url"},"data":{"type":"string","description":"JSON object with values"},"to":{"type":"string","description":"docx (default) | pdf"},"file":{"type":"string","format":"binary","description":"multipart template (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/web-search":{"post":{"tags":["services"],"operationId":"web_search","summary":"Web search for agents — €0.004 per query","description":"Web results with title, url and snippet; optionally the page text of the top 3 and a cited answer to the question. Engine: DuckDuckGo + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"search query"},"limit":{"type":"string","description":"1–10 (default 5)"},"region":{"type":"string","description":"e.g. de-de, us-en (default wt-wt)"},"recency":{"type":"string","description":"d | w | m | y"},"fetch":{"type":"string","description":"bool, fetch top-3 page text"},"answer":{"type":"string","description":"bool, cited answer"}},"example":{"query":"x402 payment protocol","limit":"5","answer":"true"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/web-search":{"post":{"tags":["playground"],"operationId":"try_web_search","summary":"Web search for agents — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"search query"},"limit":{"type":"string","description":"1–10 (default 5)"},"region":{"type":"string","description":"e.g. de-de, us-en (default wt-wt)"},"recency":{"type":"string","description":"d | w | m | y"},"fetch":{"type":"string","description":"bool, fetch top-3 page text"},"answer":{"type":"string","description":"bool, cited answer"}},"example":{"query":"x402 payment protocol","limit":"5","answer":"true"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/seo-audit":{"post":{"tags":["services"],"operationId":"seo_audit","summary":"SEO audit — €0.04 per page","description":"16 on-page checks (title, description, H1, alt, canonical, OG, structured data, viewport, load time, overflow…) with a score and 5 prioritized fixes. Engine: Chromium + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"},"advice":{"type":"string","description":"bool, LLM fixes (default true)"}},"example":{"url":"https://example.com"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/seo-audit":{"post":{"tags":["playground"],"operationId":"try_seo_audit","summary":"SEO audit — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"},"advice":{"type":"string","description":"bool, LLM fixes (default true)"}},"example":{"url":"https://example.com"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/change-monitor":{"post":{"tags":["services"],"operationId":"change_monitor","summary":"Page change monitor — €0.002 per check","description":"Snapshot the main text of a page under your key; each check returns whether it changed, added and removed lines, similarity. Schedule calls from your side. Engine: Chromium + diff · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"},"op":{"type":"string","description":"check (default) | list | delete"},"selector_text":{"type":"string","description":"start comparing from this text"},"js":{"type":"string","description":"bool, render with Chromium (default true)"}},"example":{"url":"https://example.com/pricing","op":"check"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/change-monitor":{"post":{"tags":["playground"],"operationId":"try_change_monitor","summary":"Page change monitor — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"page url"},"op":{"type":"string","description":"check (default) | list | delete"},"selector_text":{"type":"string","description":"start comparing from this text"},"js":{"type":"string","description":"bool, render with Chromium (default true)"}},"example":{"url":"https://example.com/pricing","op":"check"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/sql-lint":{"post":{"tags":["services"],"operationId":"sql_lint","summary":"SQL lint & translate — €0.002 per query","description":"Parse errors with line/column, dialect translation (postgres, mysql, sqlite, bigquery, snowflake, tsql…), schema check against your table/column list, pretty-print. fix=true asks the model for a corrected query and re-validates it (price ×2). Never connects to a database. Engine: sqlglot · CPU, LLM for fix=true.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string","description":"query text"},"dialect":{"type":"string","description":"source dialect (default generic)"},"to_dialect":{"type":"string","description":"translate to this dialect"},"schema":{"type":"string","description":"JSON {table: {column: type}}"},"pretty":{"type":"string","description":"bool, format the output"},"fix":{"type":"string","description":"bool, LLM-fix on error (price ×2)"}},"example":{"sql":"SELECT name, IFNULL(age, 0) FROM users WHERE id = 1","dialect":"mysql","to_dialect":"postgres"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/sql-lint":{"post":{"tags":["playground"],"operationId":"try_sql_lint","summary":"SQL lint & translate — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string","description":"query text"},"dialect":{"type":"string","description":"source dialect (default generic)"},"to_dialect":{"type":"string","description":"translate to this dialect"},"schema":{"type":"string","description":"JSON {table: {column: type}}"},"pretty":{"type":"string","description":"bool, format the output"},"fix":{"type":"string","description":"bool, LLM-fix on error (price ×2)"}},"example":{"sql":"SELECT name, IFNULL(age, 0) FROM users WHERE id = 1","dialect":"mysql","to_dialect":"postgres"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/prompt-guard":{"post":{"tags":["services"],"operationId":"prompt_guard","summary":"Prompt-injection guard — €0.003 per request","description":"Risk assessment, not a guarantee. Catches jailbreak phrases in 6 languages, hidden text (zero-width, bidi, HTML comments, white-on-white), base64-encoded instructions (2 levels deep), markdown-image URL exfiltration and API-key-shaped secrets. The model is called only when the regex score is ambiguous (0.3–0.7) or deep=true, so most calls never touch an LLM. Engine: regex heuristics · CPU, LLM on ambiguous score.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to screen (user input, a document, a tool result)"},"deep":{"type":"string","description":"bool, always ask the model too"}},"example":{"text":"Please summarize this support ticket and suggest a reply."}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/prompt-guard":{"post":{"tags":["playground"],"operationId":"try_prompt_guard","summary":"Prompt-injection guard — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"text to screen (user input, a document, a tool result)"},"deep":{"type":"string","description":"bool, always ask the model too"}},"example":{"text":"Please summarize this support ticket and suggest a reply."}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/resume-parse":{"post":{"tags":["services"],"operationId":"resume_parse","summary":"Resume / CV parser — €0.04 per file","description":"PDF or DOCX résumé → name, contacts, links, summary, work experience, education, skills and languages as JSON. Email and phone are cross-checked by regex. The file is not stored — not even temporarily. Scans without a text layer are rejected (no OCR). Up to 10 pages / 30 000 chars. Engine: pdfplumber/python-docx + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"resume url"}},"example":{"url":"https://api.finekot.com/samples/resume.docx"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"resume url"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/resume-parse":{"post":{"tags":["playground"],"operationId":"try_resume_parse","summary":"Resume / CV parser — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"resume url"}},"example":{"url":"https://api.finekot.com/samples/resume.docx"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"resume url"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/memory":{"post":{"tags":["services"],"operationId":"memory","summary":"Memory for agents — €0.001 per operation","description":"Long-term memory behind your key: add facts (deduplicated by meaning), recall by meaning with an optional recency boost, list, forget. Spaces per user or agent, 20 000 items. Add billed per item. Engine: MiniLM-L12 + sqlite · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"search (default) | add | list | spaces | delete"},"space":{"type":"string","description":"namespace, e.g. user:42 (default 'default')"},"text":{"type":"string","description":"memory text for add"},"items":{"type":"string","description":"JSON array [{text, meta}] for batch add"},"meta":{"type":"string","description":"JSON object"},"query":{"type":"string","description":"what to recall"},"top_k":{"type":"string","description":"1–50 (default 5)"},"recency":{"type":"string","description":"0–1, weight of freshness (default 0)"},"ids":{"type":"string","description":"ids to delete, comma-separated"},"all":{"type":"string","description":"bool, delete the whole space"}},"example":{"op":"add","space":"user:42","text":"Prefers invoices in EUR, ships to Montenegro"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/memory":{"post":{"tags":["playground"],"operationId":"try_memory","summary":"Memory for agents — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"search (default) | add | list | spaces | delete"},"space":{"type":"string","description":"namespace, e.g. user:42 (default 'default')"},"text":{"type":"string","description":"memory text for add"},"items":{"type":"string","description":"JSON array [{text, meta}] for batch add"},"meta":{"type":"string","description":"JSON object"},"query":{"type":"string","description":"what to recall"},"top_k":{"type":"string","description":"1–50 (default 5)"},"recency":{"type":"string","description":"0–1, weight of freshness (default 0)"},"ids":{"type":"string","description":"ids to delete, comma-separated"},"all":{"type":"string","description":"bool, delete the whole space"}},"example":{"op":"add","space":"user:42","text":"Prefers invoices in EUR, ships to Montenegro"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/browser":{"post":{"tags":["services"],"operationId":"browser","summary":"Browser automation — €0.01 per session-minute","description":"A real Chromium session per call: open a URL and run up to 25 steps (click, fill, press, select, scroll, wait, extract). Returns page text, step results and a state object you pass back to continue logged-in. 90 s per call. Engine: Chromium · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"start url"},"steps":{"type":"string","description":"JSON array, e.g. [{\"do\":\"fill\",\"selector\":\"#q\",\"text\":\"x\"},{\"do\":\"press\",\"key\":\"Enter\"},{\"do\":\"extract\",\"selector\":\"h3\"}]"},"state":{"type":"string","description":"state object from a previous call (cookies, localStorage)"},"output":{"type":"string","description":"json (default) | screenshot"},"text":{"type":"string","description":"bool, return page text (default true)"},"width":{"type":"string","description":"320–1920"},"height":{"type":"string","description":"240–1920"},"locale":{"type":"string","description":"e.g. de-DE"}},"example":{"url":"https://httpbin.org/forms/post","steps":[{"do":"fill","selector":"input[name=custname]","text":"Finekot"},{"do":"click","selector":"button"},{"do":"extract","selector":"pre"}]}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/browser":{"post":{"tags":["playground"],"operationId":"try_browser","summary":"Browser automation — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"start url"},"steps":{"type":"string","description":"JSON array, e.g. [{\"do\":\"fill\",\"selector\":\"#q\",\"text\":\"x\"},{\"do\":\"press\",\"key\":\"Enter\"},{\"do\":\"extract\",\"selector\":\"h3\"}]"},"state":{"type":"string","description":"state object from a previous call (cookies, localStorage)"},"output":{"type":"string","description":"json (default) | screenshot"},"text":{"type":"string","description":"bool, return page text (default true)"},"width":{"type":"string","description":"320–1920"},"height":{"type":"string","description":"240–1920"},"locale":{"type":"string","description":"e.g. de-DE"}},"example":{"url":"https://httpbin.org/forms/post","steps":[{"do":"fill","selector":"input[name=custname]","text":"Finekot"},{"do":"click","selector":"button"},{"do":"extract","selector":"pre"}]}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/webhook-relay":{"post":{"tags":["services"],"operationId":"webhook_relay","summary":"Webhook relay & cron — €0.0005 per event","description":"Get an inbound URL that accepts webhooks for you and forwards them to your target with HMAC signature and 5 retries over 7 hours; or call a URL on a schedule (every 5–1440 min). Event log and replay. Engine: queue + retry · Germany.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"create (default) | schedule | list | events | replay | delete"},"target":{"type":"string","description":"your https endpoint"},"name":{"type":"string","description":"label"},"every_minutes":{"type":"string","description":"5–1440 for schedule"},"method":{"type":"string","description":"GET | POST for schedule"},"body":{"type":"string","description":"JSON body for scheduled POST"},"id":{"type":"string","description":"hook id"},"event_id":{"type":"string","description":"event to replay"}},"example":{"op":"create","target":"https://example.com/my-webhook","name":"stripe"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/webhook-relay":{"post":{"tags":["playground"],"operationId":"try_webhook_relay","summary":"Webhook relay & cron — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"create (default) | schedule | list | events | replay | delete"},"target":{"type":"string","description":"your https endpoint"},"name":{"type":"string","description":"label"},"every_minutes":{"type":"string","description":"5–1440 for schedule"},"method":{"type":"string","description":"GET | POST for schedule"},"body":{"type":"string","description":"JSON body for scheduled POST"},"id":{"type":"string","description":"hook id"},"event_id":{"type":"string","description":"event to replay"}},"example":{"op":"create","target":"https://example.com/my-webhook","name":"stripe"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/mcp-host":{"post":{"tags":["services"],"operationId":"mcp_host","summary":"All services as one MCP server — €0 per setup","description":"Every Finekot service is a tool on one remote MCP server (streamable HTTP). This call returns ready configs for Claude Code, Claude Desktop, Cursor and VS Code. Tool calls are billed at each service price. Engine: MCP gateway.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"example":{}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/mcp-host":{"post":{"tags":["playground"],"operationId":"try_mcp_host","summary":"All services as one MCP server — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"example":{}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/domain-health":{"post":{"tags":["services"],"operationId":"domain_health","summary":"Domain health check — €0.002 per domain","description":"DNS (A, AAAA, MX, TXT, NS, CAA), SPF and DMARC parsing, WHOIS (registrar, dates, name servers, 24h cache), TLS certificate validity and days to expiry. NXDOMAIN returns 200 with exists:false, not an error. Under 10 s. Engine: dnspython + own WHOIS client + stdlib ssl.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"domain name"},"url":{"type":"string","description":"page url (alternative to domain)"},"checks":{"type":"string","description":"comma list: dns,whois,ssl,mail (default all)"}},"example":{"domain":"example.com","checks":"dns,whois,ssl,mail"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/domain-health":{"post":{"tags":["playground"],"operationId":"try_domain_health","summary":"Domain health check — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"domain name"},"url":{"type":"string","description":"page url (alternative to domain)"},"checks":{"type":"string","description":"comma list: dns,whois,ssl,mail (default all)"}},"example":{"domain":"example.com","checks":"dns,whois,ssl,mail"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/url-safety":{"post":{"tags":["services"],"operationId":"url_safety","summary":"URL safety check — €0.002 per url","description":"Phishing and scam risk of a link from its own signals, without a paid threat feed: lookalike and typosquatted brand domains, mixed-alphabet (homograph) hosts, brand names on foreign domains, IP hosts, shorteners, redirect chain, domain age, TLS, password or seed-phrase forms on the page. Returns score 0–1, verdict low | medium | high and every signal with evidence. Under 15 s. Engine: heuristics: tldextract + own WHOIS + stdlib ssl · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"link to check"},"deep":{"type":"string","description":"true (default): follow redirects, WHOIS age, TLS and page; false: address only, under 50 ms"}},"example":{"url":"http://paypa1-account-verify.xyz/login"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/url-safety":{"post":{"tags":["playground"],"operationId":"try_url_safety","summary":"URL safety check — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"link to check"},"deep":{"type":"string","description":"true (default): follow redirects, WHOIS age, TLS and page; false: address only, under 50 ms"}},"example":{"url":"http://paypa1-account-verify.xyz/login"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/file-type-detect":{"post":{"tags":["services"],"operationId":"file_type_detect","summary":"File type detection — €0.0005 per file","description":"Real file type from the byte signature, not the extension: mime, description, expected extensions, mismatch flag, executable flag (PE/ELF/Mach-O, shell/Python/Perl scripts, APK/JAR) and macro-enabled Office files (vbaProject.bin). Up to 25 MB, first 64 KB inspected. Engine: libmagic (python-magic) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original file name, for the mismatch check"}},"example":{"url":"https://example.com/report.pdf","filename":"report.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original file name, for the mismatch check"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/file-type-detect":{"post":{"tags":["playground"],"operationId":"try_file_type_detect","summary":"File type detection — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original file name, for the mismatch check"}},"example":{"url":"https://example.com/report.pdf","filename":"report.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"file url"},"filename":{"type":"string","description":"original file name, for the mismatch check"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/math-eval":{"post":{"tags":["services"],"operationId":"math_eval","summary":"Math expression eval — €0.0005 per call","description":"Safe arithmetic without eval(): +-*/, **, parentheses, math functions (sqrt, sin, log, round, abs, min, max…), constants pi/e, optional variables. Expression up to 500 chars, no code execution. Engine: simpleeval (MIT) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expression":{"type":"string","description":"string, e.g. '(2+3)*sqrt(16)'"},"vars":{"type":"string","description":"JSON object name→number, optional"}},"example":{"expression":"(2 + 3) * sqrt(16) - log(e)"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/math-eval":{"post":{"tags":["playground"],"operationId":"try_math_eval","summary":"Math expression eval — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expression":{"type":"string","description":"string, e.g. '(2+3)*sqrt(16)'"},"vars":{"type":"string","description":"JSON object name→number, optional"}},"example":{"expression":"(2 + 3) * sqrt(16) - log(e)"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/unit-convert":{"post":{"tags":["services"],"operationId":"unit_convert","summary":"Unit conversion — €0.0005 per call","description":"Converts a value between physical units (length, mass, speed, temperature with correct offset handling, etc). Any pint-recognized unit name or symbol works; incompatible dimensions return 422. Engine: pint (BSD-3) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","description":"number"},"source":{"type":"string","description":"unit name, e.g. 'celsius' or 'km/h'"},"to":{"type":"string","description":"unit name"}},"example":{"value":"100","source":"celsius","to":"fahrenheit"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/unit-convert":{"post":{"tags":["playground"],"operationId":"try_unit_convert","summary":"Unit conversion — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","description":"number"},"source":{"type":"string","description":"unit name, e.g. 'celsius' or 'km/h'"},"to":{"type":"string","description":"unit name"}},"example":{"value":"100","source":"celsius","to":"fahrenheit"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/tz-convert":{"post":{"tags":["services"],"operationId":"tz_convert","summary":"Timezone convert / diff / business days — €0.0005 per call","description":"op=convert moves an ISO time between IANA timezones; op=diff returns the span between two ISO times (days/hours/minutes/seconds, plus business days if country is given); op=add_business_days steps N working days from a date, skipping weekends and public holidays of the given country. Engine: zoneinfo + holidays (MIT) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"convert (default) | diff | add_business_days"},"time":{"type":"string","description":"ISO datetime (convert)"},"source":{"type":"string","description":"IANA tz (convert)"},"to":{"type":"string","description":"IANA tz (convert)"},"start":{"type":"string","description":"ISO datetime (diff)"},"end":{"type":"string","description":"ISO datetime (diff)"},"date":{"type":"string","description":"ISO date (add_business_days)"},"days":{"type":"string","description":"integer, can be negative (add_business_days)"},"country":{"type":"string","description":"ISO country code for holidays, optional"},"subdiv":{"type":"string","description":"state/region code, optional"}},"example":{"op":"convert","time":"2026-11-02T09:00:00","source":"Europe/Berlin","to":"America/New_York"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/tz-convert":{"post":{"tags":["playground"],"operationId":"try_tz_convert","summary":"Timezone convert / diff / business days — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"convert (default) | diff | add_business_days"},"time":{"type":"string","description":"ISO datetime (convert)"},"source":{"type":"string","description":"IANA tz (convert)"},"to":{"type":"string","description":"IANA tz (convert)"},"start":{"type":"string","description":"ISO datetime (diff)"},"end":{"type":"string","description":"ISO datetime (diff)"},"date":{"type":"string","description":"ISO date (add_business_days)"},"days":{"type":"string","description":"integer, can be negative (add_business_days)"},"country":{"type":"string","description":"ISO country code for holidays, optional"},"subdiv":{"type":"string","description":"state/region code, optional"}},"example":{"op":"convert","time":"2026-11-02T09:00:00","source":"Europe/Berlin","to":"America/New_York"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/regex-test":{"post":{"tags":["services"],"operationId":"regex_test","summary":"Regex match / findall / sub — €0.0005 per call","description":"Tests a Python regex against text: op=match (first match), op=findall (all matches with groups and positions), op=sub (replace). Runs in a separate process with a 100 ms timeout, so catastrophic backtracking (ReDoS) returns 422 instead of hanging. Text up to 10 000 chars, pattern up to 1 000. Engine: re in a sandboxed process (100 ms kill) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pattern":{"type":"string","description":"regex pattern"},"text":{"type":"string","description":"text to test"},"flags":{"type":"string","description":"any of i,m,s,x"},"op":{"type":"string","description":"match (default) | findall | sub"},"replacement":{"type":"string","description":"replacement string (sub)"}},"example":{"pattern":"(\\w+)@(\\w+\\.\\w+)","text":"contact: den@finekot.com","op":"findall"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/regex-test":{"post":{"tags":["playground"],"operationId":"try_regex_test","summary":"Regex match / findall / sub — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"pattern":{"type":"string","description":"regex pattern"},"text":{"type":"string","description":"text to test"},"flags":{"type":"string","description":"any of i,m,s,x"},"op":{"type":"string","description":"match (default) | findall | sub"},"replacement":{"type":"string","description":"replacement string (sub)"}},"example":{"pattern":"(\\w+)@(\\w+\\.\\w+)","text":"contact: den@finekot.com","op":"findall"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/hash":{"post":{"tags":["services"],"operationId":"hash","summary":"Hash / HMAC — €0.0005 per call","description":"md5, sha1, sha256, sha512 (or 'all') of text or base64-encoded bytes, as hex and base64; optional hmac key for a keyed digest. Engine: hashlib stdlib · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"string (plain or base64, see encoding)"},"encoding":{"type":"string","description":"utf8 (default) | base64"},"algo":{"type":"string","description":"md5 | sha1 | sha256 | sha512 | comma-list | all"},"key":{"type":"string","description":"HMAC key, optional"}},"example":{"text":"finekot","algo":"sha256,md5"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/hash":{"post":{"tags":["playground"],"operationId":"try_hash","summary":"Hash / HMAC — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"string (plain or base64, see encoding)"},"encoding":{"type":"string","description":"utf8 (default) | base64"},"algo":{"type":"string","description":"md5 | sha1 | sha256 | sha512 | comma-list | all"},"key":{"type":"string","description":"HMAC key, optional"}},"example":{"text":"finekot","algo":"sha256,md5"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/uuid":{"post":{"tags":["services"],"operationId":"uuid","summary":"UUID / ULID generator — €0.0005 per call","description":"kind=v4 random, v7 time-ordered (RFC 9562, monotonic within a batch), ulid (Crockford base32, also monotonic). Up to 100 per call. Engine: stdlib uuid + hand-rolled RFC 9562 v7 / ULID · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","description":"v4 (default) | v7 | ulid"},"count":{"type":"string","description":"1–100"}},"example":{"kind":"v7","count":"5"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/uuid":{"post":{"tags":["playground"],"operationId":"try_uuid","summary":"UUID / ULID generator — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","description":"v4 (default) | v7 | ulid"},"count":{"type":"string","description":"1–100"}},"example":{"kind":"v7","count":"5"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/base64":{"post":{"tags":["services"],"operationId":"base64","summary":"Base64 encode / decode — €0.0005 per call","description":"op=encode text to base64, op=decode back to text (or hex + binary:true if the result isn't valid UTF-8). url_safe switches to the - _ alphabet. Engine: stdlib base64 · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"encode (default) | decode"},"text":{"type":"string","description":"text to encode, or base64 to decode"},"url_safe":{"type":"string","description":"bool, default false"}},"example":{"op":"encode","text":"Finekot API"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/base64":{"post":{"tags":["playground"],"operationId":"try_base64","summary":"Base64 encode / decode — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"encode (default) | decode"},"text":{"type":"string","description":"text to encode, or base64 to decode"},"url_safe":{"type":"string","description":"bool, default false"}},"example":{"op":"encode","text":"Finekot API"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/jwt-tools":{"post":{"tags":["services"],"operationId":"jwt_tools","summary":"JWT decode / verify / sign — €0.0005 per call","description":"op=decode reads header/payload without checking the signature. op=verify checks it with a secret (HS*), a PEM public_key (RS*/ES*/PS*) or a jwks_url (cached 10 min); the allowed algorithm family is pinned to the key type you provide, blocking alg-confusion attacks. op=sign issues a new token (HS256/384/512, RS256, ES256). Tokens and keys are never logged or cached. Engine: PyJWT (MIT) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"decode (default) | verify | sign"},"token":{"type":"string","description":"JWT (decode, verify)"},"secret":{"type":"string","description":"HMAC secret (verify, sign)"},"public_key":{"type":"string","description":"PEM public key (verify)"},"private_key":{"type":"string","description":"PEM private key (sign)"},"jwks_url":{"type":"string","description":"JWKS endpoint (verify)"},"payload":{"type":"string","description":"JSON object of claims (sign)"},"alg":{"type":"string","description":"HS256|HS384|HS512|RS256|ES256, default HS256 (sign)"},"exp_seconds":{"type":"string","description":"lifetime in seconds, optional (sign)"}},"example":{"op":"sign","payload":{"sub":"user_42"},"secret":"change-me","alg":"HS256","exp_seconds":"3600"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/jwt-tools":{"post":{"tags":["playground"],"operationId":"try_jwt_tools","summary":"JWT decode / verify / sign — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"decode (default) | verify | sign"},"token":{"type":"string","description":"JWT (decode, verify)"},"secret":{"type":"string","description":"HMAC secret (verify, sign)"},"public_key":{"type":"string","description":"PEM public key (verify)"},"private_key":{"type":"string","description":"PEM private key (sign)"},"jwks_url":{"type":"string","description":"JWKS endpoint (verify)"},"payload":{"type":"string","description":"JSON object of claims (sign)"},"alg":{"type":"string","description":"HS256|HS384|HS512|RS256|ES256, default HS256 (sign)"},"exp_seconds":{"type":"string","description":"lifetime in seconds, optional (sign)"}},"example":{"op":"sign","payload":{"sub":"user_42"},"secret":"change-me","alg":"HS256","exp_seconds":"3600"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/cron-explain":{"post":{"tags":["services"],"operationId":"cron_explain","summary":"Cron expression explain — €0.0005 per call","description":"Human-readable description of a 5-field cron expression plus the next N run times in a given IANA timezone. Engine: croniter + cron-descriptor (MIT) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expr":{"type":"string","description":"cron expression, e.g. '0 9 * * 1-5'"},"language":{"type":"string","description":"en (default) | ru | uk | ua"},"tz":{"type":"string","description":"IANA timezone, default UTC"},"count":{"type":"string","description":"1–20, default 5"}},"example":{"expr":"0 9 * * 1-5","language":"en","tz":"Europe/Berlin","count":"3"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/cron-explain":{"post":{"tags":["playground"],"operationId":"try_cron_explain","summary":"Cron expression explain — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expr":{"type":"string","description":"cron expression, e.g. '0 9 * * 1-5'"},"language":{"type":"string","description":"en (default) | ru | uk | ua"},"tz":{"type":"string","description":"IANA timezone, default UTC"},"count":{"type":"string","description":"1–20, default 5"}},"example":{"expr":"0 9 * * 1-5","language":"en","tz":"Europe/Berlin","count":"3"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/holidays":{"post":{"tags":["services"],"operationId":"holidays","summary":"Public holidays — €0.0005 per call","description":"Official holidays by country and region (ISO-3166), localized names, workday check and business-day shift. 501 countries/regions. Engine: holidays (vacanza) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"list (default) | is_workday | add_business_days | countries"},"country":{"type":"string","description":"ISO-2/3 or exact code from op=countries"},"subdiv":{"type":"string","description":"region/state code, e.g. BY for Bavaria"},"year":{"type":"string","description":"for op=list (default current year)"},"language":{"type":"string","description":"localize holiday names if supported"},"date":{"type":"string","description":"YYYY-MM-DD, for op=is_workday and op=add_business_days"},"days":{"type":"string","description":"signed integer, for op=add_business_days"}},"example":{"op":"list","country":"DE","year":"2026"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/holidays":{"post":{"tags":["playground"],"operationId":"try_holidays","summary":"Public holidays — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"list (default) | is_workday | add_business_days | countries"},"country":{"type":"string","description":"ISO-2/3 or exact code from op=countries"},"subdiv":{"type":"string","description":"region/state code, e.g. BY for Bavaria"},"year":{"type":"string","description":"for op=list (default current year)"},"language":{"type":"string","description":"localize holiday names if supported"},"date":{"type":"string","description":"YYYY-MM-DD, for op=is_workday and op=add_business_days"},"days":{"type":"string","description":"signed integer, for op=add_business_days"}},"example":{"op":"list","country":"DE","year":"2026"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/iban-validate":{"post":{"tags":["services"],"operationId":"iban_validate","summary":"IBAN / BIC validation — €0.005 per lookup","description":"Structure and checksum of an IBAN (country, bank/branch/account codes, derived BIC, bank name where the registry has it) and/or a standalone BIC. An invalid IBAN/BIC is a normal 200 response with valid:false and a reason, not an error. Engine: schwifty · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","description":"IBAN, any formatting (spaces ignored)"},"bic":{"type":"string","description":"BIC/SWIFT code (alternative or in addition to iban)"}},"example":{"iban":"DE89370400440532013000"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/iban-validate":{"post":{"tags":["playground"],"operationId":"try_iban_validate","summary":"IBAN / BIC validation — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","description":"IBAN, any formatting (spaces ignored)"},"bic":{"type":"string","description":"BIC/SWIFT code (alternative or in addition to iban)"}},"example":{"iban":"DE89370400440532013000"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/vin-decode":{"post":{"tags":["services"],"operationId":"vin_decode","summary":"VIN decode — €0.002 per lookup","description":"Decodes a 17-character VIN into make, model, year, body, engine, transmission and assembly plant. Most complete for the US market. A mismatched check digit is returned as a warning (checksum_valid:false), not a 422. Engine: NHTSA vPIC (US gov, public domain) · network, 30-day cache.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"vin":{"type":"string","description":"17-character VIN (letters I, O, Q are not valid VIN characters)"}},"example":{"vin":"1HGCM82633A004352"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/vin-decode":{"post":{"tags":["playground"],"operationId":"try_vin_decode","summary":"VIN decode — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"vin":{"type":"string","description":"17-character VIN (letters I, O, Q are not valid VIN characters)"}},"example":{"vin":"1HGCM82633A004352"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/weather":{"post":{"tags":["services"],"operationId":"weather","summary":"Weather forecast — €0.001 per call","description":"Current conditions, hourly forecast and daily min/max temperature and precipitation from MET Norway. Coordinates only, no city geocoding. Attribution is required by the CC BY 4.0 license and included in every response. Engine: MET Norway Locationforecast (NLOD 2.0 / CC BY 4.0) · network, 30 min cache.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"string","description":"latitude, -90..90"},"lon":{"type":"string","description":"longitude, -180..180"},"hours":{"type":"string","description":"hours ahead, 1-72 (default 24)"}},"example":{"lat":"52.52","lon":"13.41","hours":"24"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/weather":{"post":{"tags":["playground"],"operationId":"try_weather","summary":"Weather forecast — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"string","description":"latitude, -90..90"},"lon":{"type":"string","description":"longitude, -180..180"},"hours":{"type":"string","description":"hours ahead, 1-72 (default 24)"}},"example":{"lat":"52.52","lon":"13.41","hours":"24"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/company-verify":{"post":{"tags":["services"],"operationId":"company_verify","summary":"Company verification (LEI, UK register) — €0.02 per company","description":"Legal entity lookup for KYB and invoicing: by LEI (checksum validated locally, ISO 17442), by name + country (up to 5 candidates with match score), or by UK company number. Returns legal name, status, legal form, jurisdiction, legal and HQ addresses, registration authority id, renewal dates and optional direct/ultimate parent. UK: status, type, incorporation date, registered office, SIC codes, overdue accounts flags. No directors or personal data. Source: GLEIF LEI data (CC0); UK data from Companies House under the OGL v3.0. Engine: GLEIF LEI API (CC0) + UK Companies House · network, 24h cache.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lei":{"type":"string","description":"20-character LEI"},"name":{"type":"string","description":"legal name to search (alternative to lei)"},"country":{"type":"string","description":"ISO-2 country filter for name search"},"uk_number":{"type":"string","description":"UK company number, e.g. 00445790 or SC123456"},"include_parents":{"type":"string","description":"true to add direct and ultimate parent (LEI only)"}},"example":{"lei":"529900QBVWXMWANH7H45","include_parents":"true"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/company-verify":{"post":{"tags":["playground"],"operationId":"try_company_verify","summary":"Company verification (LEI, UK register) — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lei":{"type":"string","description":"20-character LEI"},"name":{"type":"string","description":"legal name to search (alternative to lei)"},"country":{"type":"string","description":"ISO-2 country filter for name search"},"uk_number":{"type":"string","description":"UK company number, e.g. 00445790 or SC123456"},"include_parents":{"type":"string","description":"true to add direct and ultimate parent (LEI only)"}},"example":{"lei":"529900QBVWXMWANH7H45","include_parents":"true"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/paper-search":{"post":{"tags":["services"],"operationId":"paper_search","summary":"arXiv paper search — €0.002 per query","description":"Searches arXiv metadata and reranks results by embedding similarity to the query: title, authors, abstract excerpt, categories and links. Metadata and abstracts only — PDFs are never downloaded. Engine: arXiv API (CC0 metadata) + MiniLM-L12 rerank · network+CPU, 24h cache.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"free-text search"},"category":{"type":"string","description":"optional arXiv category filter, e.g. cs.CL"},"max_results":{"type":"string","description":"1-20 (default 5)"}},"example":{"query":"transformer attention mechanism","max_results":"3"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/paper-search":{"post":{"tags":["playground"],"operationId":"try_paper_search","summary":"arXiv paper search — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"free-text search"},"category":{"type":"string","description":"optional arXiv category filter, e.g. cs.CL"},"max_results":{"type":"string","description":"1-20 (default 5)"}},"example":{"query":"transformer attention mechanism","max_results":"3"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/lib-docs":{"post":{"tags":["services"],"operationId":"lib_docs","summary":"Library docs Q&A — €0.003 per query","description":"Answer a question about a package's README and documentation site: resolves the registry (npm, PyPI or crates.io), indexes README plus up to 8 docs pages on first call (cached 7 days, repeat calls are instant), returns ranked fragments with section and source url. Optional answer=true adds a short cited summary at the same price. Engine: PyPI/npm/crates.io + httpx + trafilatura + MiniLM-L12 embeddings (fastembed) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"package":{"type":"string","description":"package name"},"registry":{"type":"string","description":"pypi | npm | crates | auto (default auto, tries pypi, npm, crates in order)"},"version":{"type":"string","description":"exact version (default latest)"},"question":{"type":"string","description":"what to find in the docs"},"top_k":{"type":"string","description":"1–10 (default 5)"},"answer":{"type":"string","description":"bool, short cited answer from the fragments (default false, same price)"}},"example":{"package":"requests","registry":"pypi","question":"how do I set a request timeout?"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/lib-docs":{"post":{"tags":["playground"],"operationId":"try_lib_docs","summary":"Library docs Q&A — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"package":{"type":"string","description":"package name"},"registry":{"type":"string","description":"pypi | npm | crates | auto (default auto, tries pypi, npm, crates in order)"},"version":{"type":"string","description":"exact version (default latest)"},"question":{"type":"string","description":"what to find in the docs"},"top_k":{"type":"string","description":"1–10 (default 5)"},"answer":{"type":"string","description":"bool, short cited answer from the fragments (default false, same price)"}},"example":{"package":"requests","registry":"pypi","question":"how do I set a request timeout?"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/diagram-render":{"post":{"tags":["services"],"operationId":"diagram_render","summary":"Diagram render — €0.002 per diagram","description":"Mermaid diagram source (flowchart, sequence, class, state, ER, Gantt, pie, mindmap, …) rendered to SVG or PNG. mermaid.js runs in a sandboxed Chromium page with all network access blocked and securityLevel 'strict' — labels can't inject HTML or scripts. Engine: mermaid.js 12.2.0 (MIT) via Chromium · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Mermaid diagram source, up to 20000 chars"},"format":{"type":"string","description":"svg | png (default svg)"},"theme":{"type":"string","description":"default | dark | forest | neutral | base (default default)"},"scale":{"type":"string","description":"1 | 2 — PNG pixel density (retina)"},"background":{"type":"string","description":"#rrggbb or 'transparent' — PNG canvas behind the diagram (default #ffffff)"}},"example":{"code":"graph TD\nA[Start] --> B{Decision}\nB -->|Yes| C[Do it]\nB -->|No| D[Skip]","format":"svg"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/diagram-render":{"post":{"tags":["playground"],"operationId":"try_diagram_render","summary":"Diagram render — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Mermaid diagram source, up to 20000 chars"},"format":{"type":"string","description":"svg | png (default svg)"},"theme":{"type":"string","description":"default | dark | forest | neutral | base (default default)"},"scale":{"type":"string","description":"1 | 2 — PNG pixel density (retina)"},"background":{"type":"string","description":"#rrggbb or 'transparent' — PNG canvas behind the diagram (default #ffffff)"}},"example":{"code":"graph TD\nA[Start] --> B{Decision}\nB -->|Yes| C[Do it]\nB -->|No| D[Skip]","format":"svg"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/chart-render":{"post":{"tags":["services"],"operationId":"chart_render","summary":"Chart render — €0.002 per chart","description":"Chart.js configuration (plain JSON — type, data, options; no callbacks, JSON.parse can't execute code) rendered to PNG or SVG. Each call spawns its own Node process, no server state kept between calls. Engine: Chart.js 4 + chartjs-node-canvas 5 (MIT) · Node subprocess.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"string","description":"Chart.js configuration object (JSON): {type, data, options, ...}"},"format":{"type":"string","description":"png | svg (default png)"},"width":{"type":"string","description":"int 100–4000 (default 800)"},"height":{"type":"string","description":"int 100–4000 (default 600)"},"background":{"type":"string","description":"#rrggbb or 'transparent' — canvas fill behind the chart (default #ffffff)"}},"example":{"config":{"type":"bar","data":{"labels":["Jan","Feb","Mar"],"datasets":[{"label":"Sales","data":[12,19,7]}]}},"format":"png"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/chart-render":{"post":{"tags":["playground"],"operationId":"try_chart_render","summary":"Chart render — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"string","description":"Chart.js configuration object (JSON): {type, data, options, ...}"},"format":{"type":"string","description":"png | svg (default png)"},"width":{"type":"string","description":"int 100–4000 (default 800)"},"height":{"type":"string","description":"int 100–4000 (default 600)"},"background":{"type":"string","description":"#rrggbb or 'transparent' — canvas fill behind the chart (default #ffffff)"}},"example":{"config":{"type":"bar","data":{"labels":["Jan","Feb","Mar"],"datasets":[{"label":"Sales","data":[12,19,7]}]}},"format":"png"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/pdf-sign":{"post":{"tags":["services"],"operationId":"pdf_sign","summary":"PDF digital signature — €0.005 per document","description":"op=verify: every signature in a PDF — signer and certificate, digest and cryptographic validity, whether the file was edited after signing (no trust store, chain of trust is not asserted). op=sign: add a PAdES-B (adbe.pkcs7.detached) signature from a PKCS#12 bundle; billed ×2. Unsigned PDF on verify returns signatures: []. Engine: endesive (PAdES, MIT) + pypdf · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"verify | sign"},"url":{"type":"string","description":"pdf url"},"p12_base64":{"type":"string","description":"PKCS#12 (.p12/.pfx) bundle, base64-encoded — required for op=sign; a multipart p12 alongside the pdf file is not supported, this API accepts one binary upload per call"},"password":{"type":"string","description":"PKCS#12 password (op=sign, empty if the bundle has none)"},"reason":{"type":"string","description":"signing reason shown in the signature (op=sign, optional)"},"location":{"type":"string","description":"signer location (op=sign, optional)"},"contact":{"type":"string","description":"contact info (op=sign, optional)"}},"example":{"op":"verify","url":"https://api.finekot.com/samples/pdf-sign-demo.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"verify | sign"},"url":{"type":"string","description":"pdf url"},"p12_base64":{"type":"string","description":"PKCS#12 (.p12/.pfx) bundle, base64-encoded — required for op=sign; a multipart p12 alongside the pdf file is not supported, this API accepts one binary upload per call"},"password":{"type":"string","description":"PKCS#12 password (op=sign, empty if the bundle has none)"},"reason":{"type":"string","description":"signing reason shown in the signature (op=sign, optional)"},"location":{"type":"string","description":"signer location (op=sign, optional)"},"contact":{"type":"string","description":"contact info (op=sign, optional)"},"file":{"type":"string","format":"binary","description":"multipart file, the pdf (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/pdf-sign":{"post":{"tags":["playground"],"operationId":"try_pdf_sign","summary":"PDF digital signature — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"verify | sign"},"url":{"type":"string","description":"pdf url"},"p12_base64":{"type":"string","description":"PKCS#12 (.p12/.pfx) bundle, base64-encoded — required for op=sign; a multipart p12 alongside the pdf file is not supported, this API accepts one binary upload per call"},"password":{"type":"string","description":"PKCS#12 password (op=sign, empty if the bundle has none)"},"reason":{"type":"string","description":"signing reason shown in the signature (op=sign, optional)"},"location":{"type":"string","description":"signer location (op=sign, optional)"},"contact":{"type":"string","description":"contact info (op=sign, optional)"}},"example":{"op":"verify","url":"https://api.finekot.com/samples/pdf-sign-demo.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"verify | sign"},"url":{"type":"string","description":"pdf url"},"p12_base64":{"type":"string","description":"PKCS#12 (.p12/.pfx) bundle, base64-encoded — required for op=sign; a multipart p12 alongside the pdf file is not supported, this API accepts one binary upload per call"},"password":{"type":"string","description":"PKCS#12 password (op=sign, empty if the bundle has none)"},"reason":{"type":"string","description":"signing reason shown in the signature (op=sign, optional)"},"location":{"type":"string","description":"signer location (op=sign, optional)"},"contact":{"type":"string","description":"contact info (op=sign, optional)"},"file":{"type":"string","format":"binary","description":"multipart file, the pdf (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/sanctions-screen":{"post":{"tags":["services"],"operationId":"sanctions_screen","summary":"Sanctions screening (OFAC, EU, UK) — €0.04 per check","description":"Screens a person or company name against the official US OFAC SDN list, the EU consolidated financial sanctions list and the UK Sanctions List with fuzzy, transliteration-aware matching (word order, legal forms and spelling variants). Returns potential matches with score 0–1, list, programmes, birth data and a link to the official record. A match needs human review; no match is not a clearance. Lists refresh every 24 h. Engine: OFAC SDN + EU consolidated list + UK Sanctions List, refreshed daily · RapidFuzz · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"person or organisation name, any script"},"type":{"type":"string","description":"any (default) | person | entity"},"birth_year":{"type":"string","description":"optional, narrows person matches"},"threshold":{"type":"string","description":"0.80–1.00 match score cut-off (default 0.88)"},"lists":{"type":"string","description":"comma list: ofac,eu,uk (default all)"}},"example":{"name":"Banco Nacional de Cuba","type":"entity"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/sanctions-screen":{"post":{"tags":["playground"],"operationId":"try_sanctions_screen","summary":"Sanctions screening (OFAC, EU, UK) — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"person or organisation name, any script"},"type":{"type":"string","description":"any (default) | person | entity"},"birth_year":{"type":"string","description":"optional, narrows person matches"},"threshold":{"type":"string","description":"0.80–1.00 match score cut-off (default 0.88)"},"lists":{"type":"string","description":"comma list: ofac,eu,uk (default all)"}},"example":{"name":"Banco Nacional de Cuba","type":"entity"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/e-invoice":{"post":{"tags":["services"],"operationId":"e_invoice","summary":"E-invoice validate & create (EN 16931, XRechnung, ZUGFeRD/Factur-X) — €0.02 per document","description":"op=validate: EU e-invoice in UBL 2.1 or UN/CEFACT CII XML, or a ZUGFeRD/Factur-X PDF with the embedded XML. Detects syntax and profile (XRechnung, Peppol BIS, Factur-X/ZUGFeRD, EN 16931) and checks it against the official EN 16931 schematron rules plus KoSIT XRechnung rules for XRechnung profiles; returns every violation with rule id, severity, message and XPath location. Verdict is technical validity only, not a legal or tax assessment; XSD and PDF/A-3 are not checked. op=create: invoice JSON → XRechnung 3.0 or EN 16931 XML in UBL or CII with VAT totals computed, validated by the same rules; output=pdf returns a Factur-X / ZUGFeRD EN 16931 (COMFORT) PDF with a rendered invoice and the CII XML embedded, checked by the Factur-X XSD and by validate; billed ×2. Engine: official EN 16931 + XRechnung schematron (EUPL-1.2 / Apache-2.0) on SaxonC-HE (MPL-2.0) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"validate | create (default validate)"},"url":{"type":"string","description":"invoice url (XML or PDF), op=validate"},"xml":{"type":"string","description":"invoice XML as a string (alternative to url/file)"},"rules":{"type":"string","description":"auto | en16931 | xrechnung — auto picks XRechnung rules from the profile id (op=validate)"},"output":{"type":"string","description":"xml | pdf (op=create, default xml) — pdf = Factur-X EN 16931 hybrid PDF, needs syntax=cii, profile=en16931 (defaults)"},"syntax":{"type":"string","description":"ubl | cii (op=create, default ubl; cii for output=pdf)"},"profile":{"type":"string","description":"xrechnung | en16931 (op=create, default xrechnung; en16931 for output=pdf)"},"invoice":{"type":"string","description":"op=create: {number, issue_date, due_date?, currency, buyer_reference (Leitweg-ID, required by XRechnung), delivery_date? | period{start,end}?, note?, order_reference?, seller{name, vat_id|tax_number, address{street, city, postcode, country}, contact{name, phone, email}, electronic_address{scheme,id}?}, buyer{name, address{...}, electronic_address|contact.email}, payment{means_code=58, iban, bic?, terms?}, lines[{name, quantity, unit=C62, price, vat_rate, vat_category=S, description?, item_id?, exemption_reason?}], prepaid?}"}},"example":{"op":"validate","url":"https://api.finekot.com/samples/e-invoice-xrechnung.xml"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"validate | create (default validate)"},"url":{"type":"string","description":"invoice url (XML or PDF), op=validate"},"xml":{"type":"string","description":"invoice XML as a string (alternative to url/file)"},"rules":{"type":"string","description":"auto | en16931 | xrechnung — auto picks XRechnung rules from the profile id (op=validate)"},"output":{"type":"string","description":"xml | pdf (op=create, default xml) — pdf = Factur-X EN 16931 hybrid PDF, needs syntax=cii, profile=en16931 (defaults)"},"syntax":{"type":"string","description":"ubl | cii (op=create, default ubl; cii for output=pdf)"},"profile":{"type":"string","description":"xrechnung | en16931 (op=create, default xrechnung; en16931 for output=pdf)"},"invoice":{"type":"string","description":"op=create: {number, issue_date, due_date?, currency, buyer_reference (Leitweg-ID, required by XRechnung), delivery_date? | period{start,end}?, note?, order_reference?, seller{name, vat_id|tax_number, address{street, city, postcode, country}, contact{name, phone, email}, electronic_address{scheme,id}?}, buyer{name, address{...}, electronic_address|contact.email}, payment{means_code=58, iban, bic?, terms?}, lines[{name, quantity, unit=C62, price, vat_rate, vat_category=S, description?, item_id?, exemption_reason?}], prepaid?}"},"file":{"type":"string","format":"binary","description":"multipart file — XML or ZUGFeRD/Factur-X PDF (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/e-invoice":{"post":{"tags":["playground"],"operationId":"try_e_invoice","summary":"E-invoice validate & create (EN 16931, XRechnung, ZUGFeRD/Factur-X) — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"validate | create (default validate)"},"url":{"type":"string","description":"invoice url (XML or PDF), op=validate"},"xml":{"type":"string","description":"invoice XML as a string (alternative to url/file)"},"rules":{"type":"string","description":"auto | en16931 | xrechnung — auto picks XRechnung rules from the profile id (op=validate)"},"output":{"type":"string","description":"xml | pdf (op=create, default xml) — pdf = Factur-X EN 16931 hybrid PDF, needs syntax=cii, profile=en16931 (defaults)"},"syntax":{"type":"string","description":"ubl | cii (op=create, default ubl; cii for output=pdf)"},"profile":{"type":"string","description":"xrechnung | en16931 (op=create, default xrechnung; en16931 for output=pdf)"},"invoice":{"type":"string","description":"op=create: {number, issue_date, due_date?, currency, buyer_reference (Leitweg-ID, required by XRechnung), delivery_date? | period{start,end}?, note?, order_reference?, seller{name, vat_id|tax_number, address{street, city, postcode, country}, contact{name, phone, email}, electronic_address{scheme,id}?}, buyer{name, address{...}, electronic_address|contact.email}, payment{means_code=58, iban, bic?, terms?}, lines[{name, quantity, unit=C62, price, vat_rate, vat_category=S, description?, item_id?, exemption_reason?}], prepaid?}"}},"example":{"op":"validate","url":"https://api.finekot.com/samples/e-invoice-xrechnung.xml"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"op":{"type":"string","description":"validate | create (default validate)"},"url":{"type":"string","description":"invoice url (XML or PDF), op=validate"},"xml":{"type":"string","description":"invoice XML as a string (alternative to url/file)"},"rules":{"type":"string","description":"auto | en16931 | xrechnung — auto picks XRechnung rules from the profile id (op=validate)"},"output":{"type":"string","description":"xml | pdf (op=create, default xml) — pdf = Factur-X EN 16931 hybrid PDF, needs syntax=cii, profile=en16931 (defaults)"},"syntax":{"type":"string","description":"ubl | cii (op=create, default ubl; cii for output=pdf)"},"profile":{"type":"string","description":"xrechnung | en16931 (op=create, default xrechnung; en16931 for output=pdf)"},"invoice":{"type":"string","description":"op=create: {number, issue_date, due_date?, currency, buyer_reference (Leitweg-ID, required by XRechnung), delivery_date? | period{start,end}?, note?, order_reference?, seller{name, vat_id|tax_number, address{street, city, postcode, country}, contact{name, phone, email}, electronic_address{scheme,id}?}, buyer{name, address{...}, electronic_address|contact.email}, payment{means_code=58, iban, bic?, terms?}, lines[{name, quantity, unit=C62, price, vat_rate, vat_category=S, description?, item_id?, exemption_reason?}], prepaid?}"},"file":{"type":"string","format":"binary","description":"multipart file — XML or ZUGFeRD/Factur-X PDF (alternative to url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/bank-statement-parse":{"post":{"tags":["services"],"operationId":"bank_statement_parse","summary":"Bank statement to transactions — €0.1 per statement (up to 10 pages)","description":"Bank statement PDF, scan or photo → account, IBAN, period, opening and closing balance and every transaction (date, value date, description, counterparty, reference, signed amount, running balance). Arithmetic is checked deterministically: opening + movements = closing, running balance line by line (wrong signs are corrected and flagged), printed credit/debit totals, IBAN checksum. categorize=true adds an accounting category per line; csv=true also returns a CSV file. Up to 30 pages, billed per started 10 pages. The file is not stored. Engine: PDF text / OCR + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"statement url (PDF or image)"},"categorize":{"type":"string","description":"bool — add a category per transaction (default false)"},"csv":{"type":"string","description":"bool — also return transactions as a CSV file (default false)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"}},"example":{"url":"https://api.finekot.com/samples/bank-statement.pdf","categorize":"true"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"statement url (PDF or image)"},"categorize":{"type":"string","description":"bool — add a category per transaction (default false)"},"csv":{"type":"string","description":"bool — also return transactions as a CSV file (default false)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/bank-statement-parse":{"post":{"tags":["playground"],"operationId":"try_bank_statement_parse","summary":"Bank statement to transactions — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"statement url (PDF or image)"},"categorize":{"type":"string","description":"bool — add a category per transaction (default false)"},"csv":{"type":"string","description":"bool — also return transactions as a CSV file (default false)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"}},"example":{"url":"https://api.finekot.com/samples/bank-statement.pdf","categorize":"true"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"statement url (PDF or image)"},"categorize":{"type":"string","description":"bool — add a category per transaction (default false)"},"csv":{"type":"string","description":"bool — also return transactions as a CSV file (default false)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/purchase-order-extract":{"post":{"tags":["services"],"operationId":"purchase_order_extract","summary":"Purchase order to JSON — €0.05 per document (up to 10 pages)","description":"Purchase order PDF, scan or photo → PO number and date, buyer, supplier, ship-to, delivery date, payment terms, Incoterms and every order line (SKU, description, qty, unit, unit price, discount, amount, VAT rate). Arithmetic is checked deterministically: qty × price = line amount, lines = subtotal, subtotal + VAT = total, delivery after order date, EU VAT-ID format. Ready to feed invoice-parse mode=pro po= matching. The file is not stored. Engine: PDF text / OCR + LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"PO url (PDF or image)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"}},"example":{"url":"https://api.finekot.com/samples/purchase-order.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"PO url (PDF or image)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/purchase-order-extract":{"post":{"tags":["playground"],"operationId":"try_purchase_order_extract","summary":"Purchase order to JSON — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"PO url (PDF or image)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"}},"example":{"url":"https://api.finekot.com/samples/purchase-order.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"PO url (PDF or image)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/invoice-3way-match":{"post":{"tags":["services"],"operationId":"invoice_3way_match","summary":"Invoice 3-way match (PO · invoice · goods receipt) — €0.12 per match","description":"Matches a supplier invoice against the purchase order and the goods received note, line by line (SKU, then fuzzy description): price above PO, invoiced more than ordered or received, lines not received, invoice lines not on the PO, PO reference and currency, plus amount at risk. Each document as JSON or URL (PDF/scan/photo, extracted for you); receipt optional for a 2-way match; tolerances in percent. A finding, not a payment decision. Documents are not stored. Engine: PDF text / OCR + LLM + rules.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"po":{"type":"string","description":"purchase order as JSON {po_number, currency, items[{sku, description, qty, unit_price}]}"},"po_url":{"type":"string","description":"PO document url (alternative)"},"invoice":{"type":"string","description":"invoice as JSON {invoice_number, po_number, currency, items[...]}"},"invoice_url":{"type":"string","description":"invoice url (alternative)"},"receipt":{"type":"string","description":"goods received note as JSON {receipt_number, po_number, items[{sku, description, qty_received}]}"},"receipt_url":{"type":"string","description":"goods received note url (optional)"},"price_tolerance_pct":{"type":"string","description":"allowed price overrun, % (default 0)"},"qty_tolerance_pct":{"type":"string","description":"allowed quantity overrun, % (default 0)"}},"example":{"po_url":"https://api.finekot.com/samples/purchase-order.pdf","invoice":{"invoice_number":"INV-5521","po_number":"PO-2026-1187","currency":"GBP","items":[{"sku":"BR-0081-01","description":"Steel bracket M8","qty":12,"unit_price":4.2}]}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"po":{"type":"string","description":"purchase order as JSON {po_number, currency, items[{sku, description, qty, unit_price}]}"},"po_url":{"type":"string","description":"PO document url (alternative)"},"invoice":{"type":"string","description":"invoice as JSON {invoice_number, po_number, currency, items[...]}"},"invoice_url":{"type":"string","description":"invoice url (alternative)"},"receipt":{"type":"string","description":"goods received note as JSON {receipt_number, po_number, items[{sku, description, qty_received}]}"},"receipt_url":{"type":"string","description":"goods received note url (optional)"},"price_tolerance_pct":{"type":"string","description":"allowed price overrun, % (default 0)"},"qty_tolerance_pct":{"type":"string","description":"allowed quantity overrun, % (default 0)"},"file":{"type":"string","format":"binary","description":"multipart file — the invoice (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/invoice-3way-match":{"post":{"tags":["playground"],"operationId":"try_invoice_3way_match","summary":"Invoice 3-way match (PO · invoice · goods receipt) — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"po":{"type":"string","description":"purchase order as JSON {po_number, currency, items[{sku, description, qty, unit_price}]}"},"po_url":{"type":"string","description":"PO document url (alternative)"},"invoice":{"type":"string","description":"invoice as JSON {invoice_number, po_number, currency, items[...]}"},"invoice_url":{"type":"string","description":"invoice url (alternative)"},"receipt":{"type":"string","description":"goods received note as JSON {receipt_number, po_number, items[{sku, description, qty_received}]}"},"receipt_url":{"type":"string","description":"goods received note url (optional)"},"price_tolerance_pct":{"type":"string","description":"allowed price overrun, % (default 0)"},"qty_tolerance_pct":{"type":"string","description":"allowed quantity overrun, % (default 0)"}},"example":{"po_url":"https://api.finekot.com/samples/purchase-order.pdf","invoice":{"invoice_number":"INV-5521","po_number":"PO-2026-1187","currency":"GBP","items":[{"sku":"BR-0081-01","description":"Steel bracket M8","qty":12,"unit_price":4.2}]}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"po":{"type":"string","description":"purchase order as JSON {po_number, currency, items[{sku, description, qty, unit_price}]}"},"po_url":{"type":"string","description":"PO document url (alternative)"},"invoice":{"type":"string","description":"invoice as JSON {invoice_number, po_number, currency, items[...]}"},"invoice_url":{"type":"string","description":"invoice url (alternative)"},"receipt":{"type":"string","description":"goods received note as JSON {receipt_number, po_number, items[{sku, description, qty_received}]}"},"receipt_url":{"type":"string","description":"goods received note url (optional)"},"price_tolerance_pct":{"type":"string","description":"allowed price overrun, % (default 0)"},"qty_tolerance_pct":{"type":"string","description":"allowed quantity overrun, % (default 0)"},"file":{"type":"string","format":"binary","description":"multipart file — the invoice (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/contract-clause-extract":{"post":{"tags":["services"],"operationId":"contract_clause_extract","summary":"Contract clauses to JSON — €0.2 per contract (≈20 pages)","description":"Contract PDF, DOCX or text → 24 clause types (term, auto-renewal, renewal notice, termination, payment, liability cap, indemnities, warranty, SLA, penalties, confidentiality, GDPR, IP, non-compete, exclusivity, assignment, governing law, disputes, force majeure…) with a summary, typed values and the verbatim source quote with page; every quote is verified against the document text. Key dates (initial term end, renewal notice deadline) and risk flags are computed. Not legal advice. Up to 80 pages, billed per started ~20 pages. The document is not stored. Engine: PDF / DOCX text + LLM + quote check.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"contract url (PDF or DOCX)"},"text":{"type":"string","description":"contract text (alternative)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"}},"example":{"url":"https://api.finekot.com/samples/contract.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"contract url (PDF or DOCX)"},"text":{"type":"string","description":"contract text (alternative)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/contract-clause-extract":{"post":{"tags":["playground"],"operationId":"try_contract_clause_extract","summary":"Contract clauses to JSON — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"contract url (PDF or DOCX)"},"text":{"type":"string","description":"contract text (alternative)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"}},"example":{"url":"https://api.finekot.com/samples/contract.pdf"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"contract url (PDF or DOCX)"},"text":{"type":"string","description":"contract text (alternative)"},"language":{"type":"string","description":"OCR languages for scans (default en,de,fr,es,it,nl,pl,uk)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/chapters-gen":{"post":{"tags":["services"],"operationId":"chapters_gen","summary":"Episode chapters — €0.04 per episode","description":"Timestamped chapters from a podcast transcript: 5-15 chapters with start, title and a one-line summary, in the transcript's language or yours. Input: segments JSON (with real timing), plain text (timing estimated) or audio_url/file (through stt). Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":[{"start":0,"end":8,"text":"Welcome back to the Build Loudly podcast."},{"start":8,"end":90,"text":"Today we talk with Maria Lopez about shipping fast without breaking production."},{"start":90,"end":170,"text":"Maria says the secret is small releases and a boring deploy pipeline."}]}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/chapters-gen":{"post":{"tags":["playground"],"operationId":"try_chapters_gen","summary":"Episode chapters — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":[{"start":0,"end":8,"text":"Welcome back to the Build Loudly podcast."},{"start":8,"end":90,"text":"Today we talk with Maria Lopez about shipping fast without breaking production."},{"start":90,"end":170,"text":"Maria says the secret is small releases and a boring deploy pipeline."}]}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/shownotes-gen":{"post":{"tags":["services"],"operationId":"shownotes_gen","summary":"Show notes — €0.08 per episode","description":"Show notes from a transcript: 3 title options, summary, highlights, guest names, hashtags and every URL actually said or shown in the text (extracted, not invented). Engine: LLM + regex link extraction.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":"Welcome back to the Build Loudly podcast. Today we talk with Maria Lopez about shipping fast without breaking production. Read the full write-up at https://example.com/build-loudly/42."}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/shownotes-gen":{"post":{"tags":["playground"],"operationId":"try_shownotes_gen","summary":"Show notes — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":"Welcome back to the Build Loudly podcast. Today we talk with Maria Lopez about shipping fast without breaking production. Read the full write-up at https://example.com/build-loudly/42."}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/highlight-clip-finder":{"post":{"tags":["services"],"operationId":"highlight_clip_finder","summary":"Highlight clip finder — €0.12 per episode","description":"Finds up to N standalone moments (20-90 s each) worth cutting into short-form clips: start, end, the hook line, why it works and a score. Does not render video — feed the times into clip-cut-caption. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"n":{"type":"string","description":"1-10 clips (default 5)"}},"example":{"transcript":[{"start":0,"end":30,"text":"Welcome back to the show."},{"start":30,"end":90,"text":"The secret to shipping fast is small releases and a boring deploy pipeline."}],"n":3}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"n":{"type":"string","description":"1-10 clips (default 5)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/highlight-clip-finder":{"post":{"tags":["playground"],"operationId":"try_highlight_clip_finder","summary":"Highlight clip finder — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"n":{"type":"string","description":"1-10 clips (default 5)"}},"example":{"transcript":[{"start":0,"end":30,"text":"Welcome back to the show."},{"start":30,"end":90,"text":"The secret to shipping fast is small releases and a boring deploy pipeline."}],"n":3}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"n":{"type":"string","description":"1-10 clips (default 5)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/clip-cut-caption":{"post":{"tags":["services"],"operationId":"clip_cut_caption","summary":"Clip cut & caption — €0.02 per minute","description":"Cuts start-end from a video and reframes to 9:16, 1:1 or 16:9 — content is scaled to fit whole, blurred background fills the rest, nothing is cropped off. Burns in subtitles from your own segments, or auto=true transcribes the clip. Output MP4 by signed link. Billed per started minute of the clip. Engine: ffmpeg (+ faster-whisper for auto=true) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"video_url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 (default) | 1:1 | 16:9"},"segments":{"type":"string","description":"JSON [{start,end,text}] in the original video's timeline (optional)"},"auto":{"type":"string","description":"bool, transcribe the clip for captions if segments is not given"},"font_size":{"type":"string","description":"12-72 (default 30)"}},"example":{"video_url":"https://api.finekot.com/samples/clip.mp4","start":"5","end":"20","aspect":"9:16","auto":"true"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"video_url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 (default) | 1:1 | 16:9"},"segments":{"type":"string","description":"JSON [{start,end,text}] in the original video's timeline (optional)"},"auto":{"type":"string","description":"bool, transcribe the clip for captions if segments is not given"},"font_size":{"type":"string","description":"12-72 (default 30)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to video_url)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/clip-cut-caption":{"post":{"tags":["playground"],"operationId":"try_clip_cut_caption","summary":"Clip cut & caption — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"video_url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 (default) | 1:1 | 16:9"},"segments":{"type":"string","description":"JSON [{start,end,text}] in the original video's timeline (optional)"},"auto":{"type":"string","description":"bool, transcribe the clip for captions if segments is not given"},"font_size":{"type":"string","description":"12-72 (default 30)"}},"example":{"video_url":"https://api.finekot.com/samples/clip.mp4","start":"5","end":"20","aspect":"9:16","auto":"true"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"video_url":{"type":"string","description":"video url"},"start":{"type":"string","description":"seconds"},"end":{"type":"string","description":"seconds"},"aspect":{"type":"string","description":"9:16 (default) | 1:1 | 16:9"},"segments":{"type":"string","description":"JSON [{start,end,text}] in the original video's timeline (optional)"},"auto":{"type":"string","description":"bool, transcribe the clip for captions if segments is not given"},"font_size":{"type":"string","description":"12-72 (default 30)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative to video_url)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/social-post-gen":{"post":{"tags":["services"],"operationId":"social_post_gen","summary":"Social posts for an episode — €0.02 per post","description":"N post options per platform (X, LinkedIn, Instagram, Threads) promoting an episode from its transcript, each under that platform's character limit. Billed per post generated. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"platforms":{"type":"string","description":"comma list of x, linkedin, instagram, threads (default all 4)"},"n":{"type":"string","description":"1-5 posts per platform (default 2)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":"Today we talk with Maria Lopez about shipping fast without breaking production.","platforms":"x,linkedin","n":"2"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"platforms":{"type":"string","description":"comma list of x, linkedin, instagram, threads (default all 4)"},"n":{"type":"string","description":"1-5 posts per platform (default 2)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/social-post-gen":{"post":{"tags":["playground"],"operationId":"try_social_post_gen","summary":"Social posts for an episode — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"platforms":{"type":"string","description":"comma list of x, linkedin, instagram, threads (default all 4)"},"n":{"type":"string","description":"1-5 posts per platform (default 2)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":"Today we talk with Maria Lopez about shipping fast without breaking production.","platforms":"x,linkedin","n":"2"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"platforms":{"type":"string","description":"comma list of x, linkedin, instagram, threads (default all 4)"},"n":{"type":"string","description":"1-5 posts per platform (default 2)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/quote-card-gen":{"post":{"tags":["services"],"operationId":"quote_card_gen","summary":"Quote card — €0.01 per card","description":"A quote, author and episode title rendered as a 1080×1080 and a 1080×1920 PNG, dark or light theme, no emoji. The square is the main result; the 1080×1920 story crop is a signed link. Engine: Chromium (og-image engine) · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"quote":{"type":"string","description":"the quote text"},"author":{"type":"string","description":"speaker name"},"episode":{"type":"string","description":"episode title"},"theme":{"type":"string","description":"dark (default) | light"}},"example":{"quote":"The secret is small releases and a very boring deploy pipeline.","author":"Maria Lopez","episode":"Build Loudly #42","theme":"dark"}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/quote-card-gen":{"post":{"tags":["playground"],"operationId":"try_quote_card_gen","summary":"Quote card — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"quote":{"type":"string","description":"the quote text"},"author":{"type":"string","description":"speaker name"},"episode":{"type":"string","description":"episode title"},"theme":{"type":"string","description":"dark (default) | light"}},"example":{"quote":"The secret is small releases and a very boring deploy pipeline.","author":"Maria Lopez","episode":"Build Loudly #42","theme":"dark"}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/newsletter-draft-gen":{"post":{"tags":["services"],"operationId":"newsletter_draft_gen","summary":"Episode newsletter draft — €0.05 per episode","description":"An email draft announcing a new episode: 3 subject lines, a preview line and a Markdown body with chapters or highlights and a closing line. Engine: LLM.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"episode_url":{"type":"string","description":"link to the episode (included in the body)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":"Today we talk with Maria Lopez about shipping fast without breaking production.","episode_url":"https://example.com/build-loudly/42"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"episode_url":{"type":"string","description":"link to the episode (included in the body)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/newsletter-draft-gen":{"post":{"tags":["playground"],"operationId":"try_newsletter_draft_gen","summary":"Episode newsletter draft — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"episode_url":{"type":"string","description":"link to the episode (included in the body)"},"lang":{"type":"string","description":"output language (default transcript's own)"}},"example":{"transcript":"Today we talk with Maria Lopez about shipping fast without breaking production.","episode_url":"https://example.com/build-loudly/42"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"episode_url":{"type":"string","description":"link to the episode (included in the body)"},"lang":{"type":"string","description":"output language (default transcript's own)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}},"/v1/multi-lang-episode":{"post":{"tags":["services"],"operationId":"multi_lang_episode","summary":"Multi-language episode dub — €0.08 per minute","description":"Translates each transcript segment, re-voices it in the target language and reassembles the episode on the original timeline — speed is adjusted (ffmpeg atempo, capped at ±20%) when the dubbed line runs long. Output: MP3 by signed link plus an srt in the target language. Target languages (TTS voice available): en, es, fr, it, hi, ja, pt, zh. Up to 60 minutes of audio. Billed per started minute of source audio. Engine: LLM translate + Kokoro TTS + ffmpeg · CPU.","security":[{"bearer":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"target language: en | es | fr | it | hi | ja | pt | zh"},"voice":{"type":"string","description":"override voice (default matches lang)"}},"example":{"transcript":[{"start":0,"end":2,"text":"Hello and welcome."},{"start":2,"end":4.5,"text":"Thanks for listening today."}],"lang":"es"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"target language: en | es | fr | it | hi | ja | pt | zh"},"voice":{"type":"string","description":"override voice (default matches lang)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — charged","headers":{"X-Cost":{"schema":{"type":"string"},"description":"EUR charged"},"X-Balance":{"schema":{"type":"string"},"description":"EUR left"}},"content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"string","description":"signed URL of the result file, valid 24 h (file services)"},"cost":{"type":"number"},"balance":{"type":"number"},"ms":{"type":"integer"}}}}}},"401":{"description":"no or bad key"},"402":{"description":"balance too low"},"422":{"description":"bad input — not charged"},"429":{"description":"rate limit 60/min"}}}},"/v1/try/multi-lang-episode":{"post":{"tags":["playground"],"operationId":"try_multi_lang_episode","summary":"Multi-language episode dub — free playground, 10 calls/day per IP","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"target language: en | es | fr | it | hi | ja | pt | zh"},"voice":{"type":"string","description":"override voice (default matches lang)"}},"example":{"transcript":[{"start":0,"end":2,"text":"Hello and welcome."},{"start":2,"end":4.5,"text":"Thanks for listening today."}],"lang":"es"}}},"multipart/form-data":{"schema":{"type":"object","properties":{"transcript":{"type":"string","description":"text or JSON [{start,end,text}] segments"},"audio_url":{"type":"string","description":"audio/video url (alternative)"},"lang":{"type":"string","description":"target language: en | es | fr | it | hi | ja | pt | zh"},"voice":{"type":"string","description":"override voice (default matches lang)"},"file":{"type":"string","format":"binary","description":"multipart file (alternative)"}}}}}},"responses":{"200":{"description":"Success — not charged"},"429":{"description":"daily playground limit"}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"API key fk_live_…"}}},"servers":[{"url":"https://api.finekot.com"}]}