MasterOSDocs
Documentation

API Reference

Real REST endpoints exposed by the MasterOS API, organized by resource, under the /v1 prefix.

These are the real endpoints, today

This reference documents the API exactly as implemented right now. It is not generated from a spec file; keep an eye on Changelog for drift.

All endpoints are relative to the API's base URL, under a /v1 prefix (see Versioning). All authenticated endpoints use an httpOnly session cookie set by POST /v1/auth/login — there is no separate API-key auth today (see Authentication).

auth

MethodPathAuthNotes
POST/v1/auth/register{ email, password }. Password must be 12–128 characters.
POST/v1/auth/login{ email, password }. Sets the session cookie. Rate-limited by IP and by email independently.
POST/v1/auth/logoutsessionClears the session cookie.
GET/v1/auth/mesessionReturns the current user.
GET/v1/auth/googleRedirects to Google OAuth.
GET/v1/auth/google/callbackOAuth callback; redirects into the app on success.
GET/v1/auth/facebookRedirects to Facebook OAuth.
GET/v1/auth/facebook/callbackOAuth callback; redirects into the app on success.
POST/v1/auth/forgot-password{ email }. Always returns the same message, regardless of whether the email is registered.
POST/v1/auth/reset-password{ token, password }. Token is single-use and expires.

chat

MethodPathAuthNotes
POST/v1/chatsession{ model, messages, conversationId?, idempotencyKey }. Streams a plain-text response body; the response's x-conversation-id header carries the conversation id. idempotencyKey is required — a retried request with the same key never re-bills or re-calls the provider.

skills

MethodPathAuthNotes
POST/v1/skillssession{ name, instruction, input_schema?, output_schema? }. Creates a Skill private to your account.
GET/v1/skillssessionList your own Skills.
GET/v1/skills/templatessessionList starter templates you can duplicate into your own Skill.
POST/v1/skills/templates/:id/duplicatesessionCopies a template into a new Skill of your own.
POST/v1/skills/importsession{ name, instruction, input_schema?, output_schema?, version? } — the exact shape GET /v1/skills/:id/export produces, so export → import round-trips. Any other field (id, owner_id, organization_id, allowed_tools) is rejected outright; an imported Skill never carries over a tool binding from the file.
GET/v1/skills/:idsessionA Skill you own, with all its versions.
GET/v1/skills/:id/exportsessionThe portable { name, instruction, input_schema, output_schema, version } shape, matching the import endpoint's input.
POST/v1/skills/:id/versionssession{ instruction, input_schema?, output_schema? }. Publishes a new immutable version.
POST/v1/skills/:id/runsession{ model, input, conversationId?, idempotencyKey }. Re-enters the same chat pipeline as POST /v1/chat, with input standing in for the one user message — same idempotency/quota/ledger behavior.

conversations

MethodPathAuthNotes
GET/v1/conversationssessionList your own conversations.
GET/v1/conversations/:idsessionA single conversation with its messages. 404s for a conversation you don't own.

files

MethodPathAuthNotes
GET/v1/filessessionList your own uploaded files.
POST/v1/filessessionMultipart upload, field name file. Accepts plain text, Markdown, PDF, and .docx, up to 20 MB.
DELETE/v1/files/:idsessionDeletes a file you own (storage object + record).

plans

MethodPathAuthNotes
GET/v1/plans— (public)Lists plans with pricing and allowed models — intentionally public so pricing is visible before sign-in.

billing

MethodPathAuthNotes
POST/v1/billing/checkoutsession{ planId, provider: "sepay" | "paddle" }. The charged amount always comes from the server-side plan lookup, never the client. Free and Enterprise plans can't be checked out this way.
GET/v1/billing/quotasessionYour current daily quota limit and remaining balance.

Two more resources exist in the running API but aren't documented as a customer-facing surface here: /v1/webhooks/* (inbound-only, called by SePay/Paddle — not something you call) and /v1/admin/* (internal, admin-only).