{"openapi":"3.1.0","info":{"title":"Ultri API","version":"0.2.0","description":"Ultri's own writing models over HTTP: chat completions (OpenAI-compatible), the humanizer, and detection. Every call is charged to your credits at the listed price; usage carries the exact cost."},"servers":[{"url":"https://platform.ultri.studio"}],"paths":{"/v1/check":{"post":{"summary":"Check Text","description":"The machine habits in a piece of text, from the humanizer's detector: what, where, and what a person would say instead.","operationId":"check_text_v1_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/usage":{"get":{"summary":"My Usage","operationId":"my_usage_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/credits":{"get":{"summary":"My Credits","operationId":"my_credits_v1_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/credits/estimate":{"post":{"summary":"Estimate Route","operationId":"estimate_route_v1_credits_estimate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/chat/completions":{"post":{"tags":["platform"],"summary":"Chat completions (OpenAI-compatible)","description":"Send a conversation, get the next assistant message from an Ultri model.  Works with the OpenAI SDKs: set\n`base_url` to https://platform.ultri.studio/v1 and `api_key` to your key.  The response carries standard `usage` and\nan `ultri` object with what the call cost and your balance after it.  Every call is charged to your credits at the\nmodel's listed price, to the token.","operationId":"chat_completions_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/models":{"get":{"tags":["platform"],"summary":"List models and prices","description":"Every model you can call, what it is for, which endpoint serves it and what it costs right now.  No key needed.","operationId":"list_models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKey":[]}]}},"/v1/models/{model_id}":{"get":{"tags":["platform"],"summary":"One model, with its price history","operationId":"get_model_v1_models__model_id__get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/platform/balance":{"get":{"tags":["platform"],"summary":"Credits and this month's API spend","operationId":"balance_v1_platform_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKey":[]}]}},"/v1/platform/usage":{"get":{"tags":["platform"],"summary":"Usage by day, model, key or product","description":"Requests, tokens, words, GPU seconds, our cost and what you were charged, grouped as you like, for the last `days`\n(or an explicit unix `since`/`until`).  `key` limits it to one key; `api_only` leaves out what you did in the app.\n`format=csv` downloads the same table.","operationId":"usage_route_v1_platform_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"group","in":"query","required":false,"schema":{"type":"string","default":"day","title":"Group"}},{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"}},{"name":"api_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Api Only"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Until"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}]}},"/v1/voices":{"get":{"summary":"Voices","operationId":"voices_v1_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/score":{"post":{"summary":"Score Text","operationId":"score_text_v1_score_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/humanize":{"post":{"summary":"Humanize","operationId":"humanize_v1_humanize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HumanizeIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/jobs/{job_id}":{"delete":{"summary":"Job Cancel","description":"Stop a running job at the next sample boundary (usually within 20 s).","operationId":"job_cancel_v1_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]},"get":{"summary":"Job Status","operationId":"job_status_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}},"/v1/jobs/{job_id}/events":{"get":{"summary":"Job Events","operationId":"job_events_v1_jobs__job_id__events_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKey":[]}],"tags":["platform"]}}},"components":{"schemas":{"ChatEdit":{"properties":{"title":{"type":"string","title":"Title"}},"type":"object","required":["title"],"title":"ChatEdit"},"ChatIn":{"properties":{"model":{"type":"string","title":"Model","description":"a chat model from GET /v1/models","default":"ultri-writer"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"Messages"},"stream":{"type":"boolean","title":"Stream","default":false},"stream_options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stream Options","description":"{\"include_usage\": true} adds a final chunk with usage and cost"},"max_tokens":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Tokens","description":"cap on the reply's tokens (default 1024, at most the model's max_output_tokens)"},"max_completion_tokens":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Completion Tokens"},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature"},"top_p":{"anyOf":[{"type":"number","maximum":1.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Top P"},"stop":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stop"},"n":{"type":"integer","title":"N","description":"only 1 is supported","default":1},"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User","description":"your own id for the end user; stored with the usage row"},"ultri_style":{"type":"boolean","title":"Ultri Style","description":"prepend Ultri's writing rules (plain words, no stock phrases, no em dashes) before your system prompt","default":true}},"additionalProperties":true,"type":"object","required":["messages"],"title":"ChatIn"},"ChatMessage":{"properties":{"role":{"type":"string","title":"Role"},"content":{"title":"Content"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["role"],"title":"ChatMessage"},"CheckIn":{"properties":{"text":{"type":"string","title":"Text"}},"type":"object","required":["text"],"title":"CheckIn"},"CheckoutIn":{"properties":{"usd":{"type":"number","title":"Usd"},"app":{"type":"boolean","title":"App","default":false}},"type":"object","required":["usd"],"title":"CheckoutIn"},"DeleteIn":{"properties":{"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"DeleteIn"},"EmailIn":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"EmailIn"},"EstimateIn":{"properties":{"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"words":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Words"}},"type":"object","title":"EstimateIn"},"FeedbackIn":{"properties":{"message_id":{"type":"string","title":"Message Id"},"rating":{"type":"integer","title":"Rating"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"comment":{"type":"string","title":"Comment","default":""},"edit":{"type":"string","title":"Edit","default":""}},"type":"object","required":["message_id","rating"],"title":"FeedbackIn"},"GrantIn":{"properties":{"email":{"type":"string","title":"Email"},"usd":{"type":"number","title":"Usd"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["email","usd"],"title":"GrantIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HumanizeIn":{"properties":{"text":{"type":"string","title":"Text","description":"Text to rewrite (15 to HUMANIZER_MAX_WORDS words)"},"voice":{"type":"string","title":"Voice","description":"a voice id from /v1/voices, or auto","default":"auto"},"candidates":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Candidates","description":"drafts written in parallel; the best one is returned","default":2},"style_sample":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style Sample","description":"a sample of the user's own writing to match (optional)"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"details the writer may use (facts you supply); nothing else is invented"},"length":{"type":"string","title":"Length","description":"natural: filler goes, output is usually shorter | match: stay near the source length","default":"natural"},"fidelity":{"type":"string","title":"Fidelity","description":"natural: supporting detail may be left out, the way a person retelling it would | strict: every fact stays","default":"natural"},"meaning_check":{"type":"boolean","title":"Meaning Check","description":"run the meaning-preservation judge and repair drift","default":true},"critic_rounds":{"type":"integer","maximum":2.0,"minimum":0.0,"title":"Critic Rounds","description":"blind-reader-in-the-loop revisions: a judge reads each draft and the writer revises against its reasons","default":1},"verify":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Verify","description":"verify with GPTZero and retry once; default: on whenever GPTZERO_API_KEY is configured"},"blind_judge":{"type":"boolean","title":"Blind Judge","description":"also ask the blind LLM judge to rate the result","default":false},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","description":"fix the voice/blueprint draw for reproducible output"},"writer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Writer","description":"one of the writers listed by /v1/health (default: the first)"},"wait":{"type":"boolean","title":"Wait","description":"true: return the result in this response; false: return a job id to poll","default":true}},"type":"object","required":["text"],"title":"HumanizeIn"},"KeyEdit":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"monthly_limit_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Limit Usd"},"clear_limit":{"type":"boolean","title":"Clear Limit","default":false}},"type":"object","title":"KeyEdit"},"KeyIn":{"properties":{"name":{"type":"string","title":"Name","default":"My key"},"monthly_limit_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Limit Usd","description":"stop this key once it has spent this much in a calendar month (UTC)"}},"type":"object","title":"KeyIn"},"LoginOptionsIn":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"LoginOptionsIn"},"MeEdit":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"MeEdit"},"MemoryIn":{"properties":{"text":{"type":"string","title":"Text"},"kind":{"type":"string","title":"Kind","default":"fact"}},"type":"object","required":["text"],"title":"MemoryIn"},"MemoryPatch":{"properties":{"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"MemoryPatch"},"MessageIn":{"properties":{"content":{"type":"string","title":"Content","default":""},"style_sample":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style Sample"},"regenerate":{"type":"boolean","title":"Regenerate","default":false}},"type":"object","title":"MessageIn"},"ModelEdit":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"backend":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backend"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"active | preview | deprecated | retired"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"context_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Tokens"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"input_per_m":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Input Per M","description":"new price per 1M input tokens (appends a price row)"},"output_per_m":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Output Per M"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"ModelEdit"},"ModelIn":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"backend":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backend"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"active | preview | deprecated | retired"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"context_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Tokens"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"input_per_m":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Input Per M","description":"new price per 1M input tokens (appends a price row)"},"output_per_m":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Output Per M"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind","default":"chat"},"unit":{"type":"string","title":"Unit","default":"token"}},"type":"object","required":["id"],"title":"ModelIn"},"NameIn":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"NameIn"},"PasswordIn":{"properties":{"current":{"type":"string","title":"Current"},"password":{"type":"string","title":"Password"}},"type":"object","required":["current","password"],"title":"PasswordIn"},"PieceEdit":{"properties":{"title":{"type":"string","title":"Title"}},"type":"object","required":["title"],"title":"PieceEdit"},"ProofIn":{"properties":{"text":{"type":"string","title":"Text"},"grammar":{"type":"boolean","title":"Grammar","default":true},"ai":{"type":"boolean","title":"Ai","default":true}},"type":"object","required":["text"],"title":"ProofIn"},"RegisterIn":{"properties":{"challenge_id":{"type":"string","title":"Challenge Id"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["challenge_id","credential"],"title":"RegisterIn"},"RephraseIn":{"properties":{"text":{"type":"string","title":"Text"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","required":["text"],"title":"RephraseIn"},"ResetIn":{"properties":{"token":{"type":"string","title":"Token"},"password":{"type":"string","title":"Password"}},"type":"object","required":["token","password"],"title":"ResetIn"},"ScoreIn":{"properties":{"text":{"type":"string","title":"Text","description":"The text to analyse"},"detectors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Detectors","description":"local-stats, gpt2, gptzero, desklib (default: configured scorers)"}},"type":"object","required":["text"],"title":"ScoreIn"},"SignupIn":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},"type":"object","required":["name","email","password"],"title":"SignupIn"},"TextIn":{"properties":{"text":{"type":"string","title":"Text","description":"The text to analyse"}},"type":"object","required":["text"],"title":"TextIn"},"TokenIn":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"TokenIn"},"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"},"VoiceIn":{"properties":{"sample":{"type":"string","title":"Sample","default":""}},"type":"object","title":"VoiceIn"},"humanizer__accounts__LoginIn":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginIn"},"humanizer__passkeys__LoginIn":{"properties":{"challenge_id":{"type":"string","title":"Challenge Id"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"}},"type":"object","required":["challenge_id","credential"],"title":"LoginIn"}},"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","description":"Authorization: Bearer ultri_sk_..."}}},"security":[{"ApiKey":[]}]}