# infrai > infrai gives your app 18 production backend modules — AI, video, > email, SMS, scheduling, storage, payments and more — behind one API key, one > wallet and one bill. It is a ZERO-INSTALL REST API: there is no SDK. Call it > over HTTP from any language. Pricing is transparent and per-model — the final > price you pay (plus any discount vs the vendor's public price) is live at > GET /v1/pricing/models. Every response carries cost/vendor/latency metadata; > every error carries a machine-readable hint and a retryable flag. ## How to call it (no SDK) Every capability is a POST (or GET) to `https://api.infrai.cc/v1/...` with a Bearer key and JSON body. AI inference is OpenAI-compatible — call the standard `/v1/chat/completions` endpoint with `model: "auto"` for smart routing: ```bash curl -X POST https://api.infrai.cc/v1/chat/completions \ -H "Authorization: Bearer $INFRAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "auto", "messages": [{"role": "user", "content": "summarize this PR"}]}' ``` Responses use the envelope `{ ok, data, error, metadata }`. To get a key, sign in at the console with Google/GitHub for a project key + $2 free credit (email sign-in starts at $0). On `402 INSUFFICIENT_CREDIT`, POST `https://api.infrai.cc/v1/account/topup` and open the returned `checkout_url`. ## 18 GA modules (298 REST routes) - `ai-runtime` (https://api.infrai.cc/v1/ai) — ai.chat, ai.embed, ai.image - `ai-video` (https://api.infrai.cc/v1/video) — video.generate, video.status, video.cancel - `comm-email` (https://api.infrai.cc/v1/email) — email.send, email.list, email.get - `sms` (https://api.infrai.cc/v1/sms) — sms.send, sms.otp, sms.verify - `scheduling` (https://api.infrai.cc/v1/queue) — cron.create, cron.list, queue.publish - `observability` (https://api.infrai.cc/v1/errors) — errors.capture, metrics.report, flags.is_enabled - `captcha` (https://api.infrai.cc/v1/captcha) — captcha.verify - `pdf` (https://api.infrai.cc/v1/pdf) — pdf.generate, pdf.merge, pdf.split - `image-process` (https://api.infrai.cc/v1/image) — image.process, image.metadata - `realtime` (https://api.infrai.cc/v1/realtime) — realtime.token.issue, realtime.channel.create, realtime.publish - `storage` (https://api.infrai.cc/v1/storage) — storage.bucket.create, storage.bucket.list, storage.object.presign - `analytics` (https://api.infrai.cc/v1/analytics) — analytics.track, analytics.identify, analytics.query.events - `auth` (https://api.infrai.cc/v1/auth) — auth.user.create, auth.session.create, auth.session.verify - `rtc` (https://api.infrai.cc/v1/rtc) — rtc.room.create, rtc.token.issue, rtc.room.list - `db` (https://api.infrai.cc/v1/db) — db.project.create, db.branch.create, db.snapshot.create - `dns` (https://api.infrai.cc/v1/dns) — dns.domain.add, dns.domain.verify, dns.record.create - `risk` (https://api.infrai.cc/v1/risk) — risk.score, risk.device.fingerprint, risk.event.report - `billing` (https://api.infrai.cc/v1/account) — account.balance, account.usage, account.topup ## API hosts - Western: https://api.infrai.cc - China: https://cn.infrai.cc ## For AI agents & tools (machine discovery) If you are an AI coding assistant or agent, call infrai directly over HTTP, or use the MCP server: - MCP server (one command, all 18 modules as tools): `npx @infrai/mcp-server` Works with Claude Desktop, Claude Code, Cursor, Cline, Continue, Windsurf, Aider. - OpenAPI 3.1 spec (generated from SSOT, with request schemas + examples): https://infrai.cc/.well-known/openapi.json - Discovery manifest (full capability table: method/path/params/examples/errors): https://infrai.cc/.well-known/infrai-discovery.json - MCP registry descriptor: https://infrai.cc/.well-known/mcp.json The API is self-describing — never guess a parameter name or an allowed value. Use the live discovery endpoints to read the exact schema before building a call: - `GET https://api.infrai.cc/v1/discovery` — capability index (id/method/path/availability/billing). Lightweight, no params. - `GET https://api.infrai.cc/v1/discovery/{capability}` — per-capability detail. `params` is the full request JSON Schema: `params.properties..enum` is the exact allowed-value set for any enum field (e.g. `account.webhooks.register` → `events[]`, `sms.send` → `route_class`/`mode`), and nested array elements carry their own `items` schema. `dynamic_params` lists runtime choices (e.g. the `vendor` enum reflects the providers your account has keys for). `response` is the result shape for chaining. Every documented capability ships runnable curl / Python (requests) / JavaScript (fetch) examples in the discovery manifest and the docs. ## Links - Site: https://infrai.cc - Docs: https://docs.infrai.cc