# ai-sidecars > Multi-tenant gateway of stateless "sidecar" services. One API key with a quota is the product. Every successful call costs a fixed number of *units*. ## Get a key (agents self-register) POST https://app.ai-sidecars.com/signup -> returns a trial API key ONCE (in the `api_key` field). body (optional): {"name": "My Agent"} IMPORTANT: do NOT print the key. Agent shells mask strings that look like secrets, so an echoed key comes back as `****` and is lost. Pipe it straight into an env var and use it from there: export AI_SIDECARS_KEY=$(curl -s -X POST https://app.ai-sidecars.com/signup -H 'Content-Type: application/json' -d '{"name":"My Agent"}' | jq -r .api_key) Then send it on every call as: Authorization: Bearer $AI_SIDECARS_KEY Trial plan: 1000 units/month, scopes doc2md+xrechnung+describe+extract. ## Services - [Document to Markdown](https://doc2md.ai-sidecars.com) — Convert an uploaded document (pdf, docx, pptx, xlsx, html, ...) to Markdown. (3 units/call, min plan: trial) - [Describe an image (Vision)](https://describe.ai-sidecars.com) — Upload an image and get a textual description back. Pass an optional `prompt` to steer it into visual Q&A (OCR a scan, read a screenshot, explain a chart, caption a photo). (5 units/call, min plan: trial) - [Extract structured data from an image (Vision)](https://extract.ai-sidecars.com) — Upload an image plus a target `schema` (the fields you want) and get back a JSON object. Reads receipts, invoices, business cards, forms — pixels to structured data. (6 units/call, min plan: trial) - [XRechnung / EN 16931 invoice](https://xrechnung.ai-sidecars.com) — Build a validated EN 16931 / XRechnung 3.0 UBL XML from a JSON invoice. (2 units/call, min plan: trial) - [Search + crawl + rerank](https://crawl.ai-sidecars.com) — One call: web search (SearXNG) → fetch a candidate pool → extract text → split into passages → rerank semantically with a cross-encoder → return the top pages, each with its most relevant passage. (5 units/call, min plan: starter) - [Audio/video transcription with timestamps (async)](https://transcribe.ai-sidecars.com) — Transcribe audio/video to timestamped text. Every segment carries start/end in seconds, so you can jump to the spot in the media. An optional LLM proofreading pass fixes misheard words, names and punctuation — it may only rewrite a segment's text, never its timing. Asynchronous: submit → 202 + job id → poll for the result. (10 units/call, min plan: pro) - [PDF factory (Gotenberg)](https://pdf.ai-sidecars.com) — Render HTML/URL/Markdown to PDF/A, or build a ZUGFeRD invoice PDF with embedded XML. (8 units/call, min plan: starter) - [Web task agent (async)](https://webtask.ai-sidecars.com) — Give a web task in natural language — a real browser solves it (navigate, click, type, read) and returns the result. Asks back when a decision is yours. Asynchronous: submit → 202 + job id → poll. (25 units/call, min plan: pro) - [Remotion video renderer (async)](https://render.ai-sidecars.com) — Submit a Remotion project as a file map and get a rendered mp4 (or gif) back. Asynchronous: submit → 202 + job id → poll. (25 units/call, min plan: starter) ## Skills (drop-in for Claude Code) - Index: https://app.ai-sidecars.com/skills - Manifest (JSON): https://app.ai-sidecars.com/.well-known/ai-sidecars.json - Per service: https://app.ai-sidecars.com/skills/doc2md, https://app.ai-sidecars.com/skills/describe, https://app.ai-sidecars.com/skills/extract, https://app.ai-sidecars.com/skills/xrechnung, https://app.ai-sidecars.com/skills/crawl, https://app.ai-sidecars.com/skills/transcribe, https://app.ai-sidecars.com/skills/pdf, https://app.ai-sidecars.com/skills/webtask, https://app.ai-sidecars.com/skills/render - Platform (signup/keys/quota): https://app.ai-sidecars.com/skills/platform ## Errors 401 missing/unknown key · 403 scope/suspended · 429 rate limit (Retry-After) · 402 quota exhausted (X-Quota-Reset).