{"openapi":"3.1.0","info":{"title":"Unslop API","version":"1.3.0","description":"English style analysis, proofreading, voice profiles, and bounded original-span editing. Rewriting scores the original and applies a configurable rewrite_gate before any model calls; skipped results return the original. Mixed mode alternates configured OpenAI and Anthropic models. Analysis runs without an LLM. API clients use a bearer key for /v1 operations. The same-origin workbench also accepts a signed-in account session."},"servers":[{"url":"/"}],"paths":{"/v1/score":{"post":{"operationId":"post__v1_score","summary":"Deterministic score","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/quality":{"post":{"operationId":"post__v1_quality","summary":"Deterministic quality","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/explain":{"post":{"operationId":"post__v1_explain","summary":"Deterministic explain","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/analyze":{"post":{"operationId":"post__v1_analyze","summary":"Combine deterministic analysis in one request","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false},"include":{"default":["score","quality","explain","inspect"],"minItems":1,"maxItems":4,"type":"array","items":{"type":"string","enum":["score","quality","explain","inspect"]}}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/inspect":{"post":{"operationId":"post__v1_inspect","summary":"Locate possible embedded instructions and hidden characters","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/rewrite":{"post":{"operationId":"post__v1_rewrite","summary":"Score first; only stack micro-edits when the style gate passes","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":true,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"mixed","description":"Mixed alternates the configured OpenAI and Anthropic models. An explicit provider limits every editing and review call to that provider.","type":"string","enum":["mixed","openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false},"micro":{"default":{},"type":"object","properties":{"max_calls":{"default":4,"description":"Total patch-generation call budget, including retries. Optional meaning review uses one additional call.","type":"integer","minimum":1,"maximum":12},"max_span_words":{"default":8,"type":"integer","minimum":1,"maximum":24},"max_span_chars":{"default":60,"description":"Unicode code points on each side of a patch, including adjacent patches separated only by whitespace.","type":"integer","minimum":1,"maximum":160}},"additionalProperties":false},"instructions":{"default":"","type":"string","maxLength":6000},"retry_on_failure":{"default":false,"description":"Retry an invalid micro-edit once against its original span, within micro.max_calls. Final meaning-review or document-constraint failures return the original without a whole-document retry.","type":"boolean"},"tone":{"type":"string","maxLength":200},"audience":{"type":"string","maxLength":200},"return_edits":{"default":true,"type":"boolean"},"return_analysis":{"default":true,"type":"boolean"}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/proofread":{"post":{"operationId":"post__v1_proofread","summary":"Find writing errors; optionally apply conservative corrections","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false},"apply":{"default":false,"type":"boolean"}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/compare":{"post":{"operationId":"post__v1_compare","summary":"Compare text, edit sizes, reading level and change ratio","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"original":{"type":"string","minLength":1,"maxLength":20000},"revised":{"type":"string","maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["original","revised"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/verify":{"post":{"operationId":"post__v1_verify","summary":"Verify revision constraints with optional AI semantic review","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"original":{"type":"string","minLength":1,"maxLength":20000},"revised":{"type":"string","maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"default":false,"type":"boolean"},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["original","revised"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/review":{"post":{"operationId":"post__v1_review","summary":"Explicit AI review using OpenAI, Anthropic, or Jev","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"original":{"type":"string","minLength":1,"maxLength":20000},"revised":{"type":"string","maxLength":20000},"rewrite_gate":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"False permits editing regardless of the score. The original is still scored and the bypass is reported.","type":"boolean"},"threshold":{"default":20,"description":"Minimum style score to permit AI editing. This is not an authorship probability.","type":"number","minimum":0,"maximum":100},"minimum_words":{"default":50,"description":"Minimum prose words to permit AI editing. Short-text scores are less informative; zero disables this size requirement.","type":"integer","minimum":0,"maximum":20000}},"additionalProperties":false},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"writing_samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"profile_id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"locale":{"default":"en-US","type":"string","enum":["en-US","en-GB","en-CA","en-AU"]},"format":{"default":"plain","type":"string","enum":["plain","markdown"]},"allow_ai":{"type":"boolean","const":true},"semantic_review":{"default":false,"type":"boolean"},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]},"constraints":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false},"reviewer":{"default":"openai","type":"string","enum":["openai","anthropic","jev"]}},"required":["original","revised","allow_ai"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/detect":{"post":{"operationId":"post__v1_detect","summary":"Consult configured, approved detector providers with explicit consent","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"providers":{"maxItems":5,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"}},"allow_external":{"default":false,"type":"boolean"}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/watermarks":{"post":{"operationId":"post__v1_watermarks","summary":"Consult configured, approved watermark providers with explicit consent","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":20000},"providers":{"maxItems":5,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"}},"allow_external":{"default":false,"type":"boolean"}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/rules/validate":{"post":{"operationId":"post__v1_rules_validate","summary":"Validate literal rules and preview their findings","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rules":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"text":{"type":"string","maxLength":20000}},"required":["rules"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/profiles/import":{"post":{"operationId":"post__v1_profiles_import","summary":"Extract a proposed profile from a voice document; does not save it","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"document":{"type":"string","minLength":1,"maxLength":24000},"name":{"type":"string","minLength":1,"maxLength":100},"allow_ai":{"type":"boolean","const":true},"provider":{"default":"openai","type":"string","enum":["openai","anthropic"]}},"required":["document","name","allow_ai"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/v1/profiles":{"post":{"operationId":"post__v1_profiles","summary":"Create a private workspace profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"instructions":{"default":"","type":"string","maxLength":24000},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"defaults":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["name"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]},"get":{"operationId":"get__v1_profiles","summary":"List profiles in this workspace","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}}}},"/v1/rules":{"get":{"operationId":"get__v1_rules","summary":"Built-in style rules","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}}}},"/v1/usage":{"get":{"operationId":"get__v1_usage","summary":"Current daily usage and limits","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}}}},"/v1/capabilities":{"get":{"operationId":"get__v1_capabilities","summary":"Available engines, providers, and limits","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}}}},"/v1/profiles/{id}":{"get":{"operationId":"get__v1_profiles_id_","summary":"Get a private profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"put__v1_profiles_id_","summary":"Replace a profile using its current revision","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Profile-Revision","required":true,"schema":{"type":"string"},"description":"Current profile revision, e.g. 1."},{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"genre":{"type":"string","enum":["general","technical","business","personal","educational","creative"]},"instructions":{"default":"","type":"string","maxLength":24000},"rules":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_.:-]{1,80}$"},"type":{"type":"string","enum":["avoid","prefer","max_sentence_words","punctuation","contextual"]},"description":{"type":"string","minLength":1,"maxLength":1000},"phrase":{"type":"string","minLength":1,"maxLength":200},"replacement":{"type":"string","maxLength":400},"limit":{"type":"integer","minimum":0,"maximum":500},"severity":{"default":"warning","type":"string","enum":["suggestion","warning","error"]},"case_sensitive":{"default":false,"type":"boolean"},"whole_word":{"default":true,"type":"boolean"},"auto_fix":{"default":false,"type":"boolean"}},"required":["id","type","description"],"additionalProperties":false}},"samples":{"default":[],"maxItems":4,"type":"array","items":{"type":"string","minLength":1,"maxLength":5000}},"defaults":{"default":{},"type":"object","properties":{"max_change_ratio":{"type":"number","minimum":0,"maximum":2},"max_edit_count":{"type":"integer","minimum":0,"maximum":1000},"max_edit_size":{"type":"integer","minimum":0,"maximum":20000},"max_output_words":{"type":"integer","minimum":0,"maximum":20000},"max_output_chars":{"type":"integer","minimum":0,"maximum":20000},"target_age":{"description":"Approximate English reading-age target, ages 6–18. Uses US grade = age minus 5, with readability_tolerance. Not a comprehension or content-suitability guarantee. Mutually exclusive with readability_target.","type":"integer","minimum":6,"maximum":18},"readability_target":{"type":"number","minimum":-5,"maximum":30},"readability_ceiling":{"description":"Maximum estimated US grade. Easier text passes. Mutually exclusive with exact age/grade targets; no tolerance is added.","type":"number","minimum":-5,"maximum":30},"readability_tolerance":{"type":"number","minimum":0,"maximum":20},"max_readability_shift":{"type":"number","minimum":0,"maximum":30},"writing_complexity_target":{"type":"string","enum":["simple","moderate","complex"]},"protected_spans":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0,"maximum":9007199254740991},"end":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}},"protected_terms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preserve_writing_complexity":{"type":"boolean"},"preserve_paragraph_breaks":{"description":"Markdown only: false permits prose line/paragraph-break changes while retaining other formatting protection.","type":"boolean"},"preserve_formatting":{"type":"boolean"},"preserve_numbers":{"type":"boolean"},"preserve_quotes":{"type":"boolean"}},"additionalProperties":false}},"required":["name"],"additionalProperties":false}}}}},"delete":{"operationId":"delete__v1_profiles_id_","summary":"Delete a private profile using its current revision","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Profile-Revision","required":true,"schema":{"type":"string"},"description":"Current profile revision, e.g. 1."},{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."},{"in":"header","name":"X-Max-Cost-USD","required":false,"schema":{"type":"string"},"description":"Required for prepaid mutations. Decimal USD, 0.005–10. Full amount is reserved; unused funds return after completion."}]}},"/agent/token":{"post":{"operationId":"post__agent_token","summary":"Replace an API key and recovery code using username and password","security":[],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"username":{"type":"string","pattern":"^[a-z][a-z0-9_]{2,31}$"},"password":{"type":"string","minLength":1,"maxLength":128}},"required":["username","password"],"additionalProperties":false}}}}}},"/agent/register":{"post":{"operationId":"post__agent_register","summary":"Create a workspace and return one-time credentials; no browser required","security":[],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"201":{"description":"Workspace created. Save the one-time API key and recovery code privately."},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"username":{"type":"string","pattern":"^[a-z][a-z0-9_]{2,31}$"},"password":{"type":"string","minLength":15,"maxLength":128},"agree":{"type":"boolean","const":true}},"required":["username","password","agree"],"additionalProperties":false}}}}}},"/pricing.json":{"get":{"operationId":"get__pricing_json","summary":"Public pricing and checkout availability","security":[],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}}}},"/v1/billing/balance":{"get":{"operationId":"get__v1_billing_balance","summary":"Available credits, held funds and recent charges","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}}}},"/v1/billing/quote":{"post":{"operationId":"post__v1_billing_quote","summary":"Conservative maximum rewrite price, without calling a model","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"provider":{"default":"mixed","type":"string","enum":["openai","anthropic","mixed"]},"max_calls":{"default":4,"type":"integer","minimum":0,"maximum":12},"semantic_review":{"default":false,"type":"boolean"},"max_input_bytes_per_call":{"default":128000,"type":"integer","minimum":0,"maximum":128000}},"additionalProperties":false}}}}}},"/v1/billing/checkout":{"post":{"operationId":"post__v1_billing_checkout","summary":"Create a Stripe checkout URL for a human to purchase credits","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured result. Style scores are heuristics, not authorship probabilities.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Malformed JSON body"},"401":{"description":"Missing or invalid API key or session"},"402":{"description":"Prepaid balance or per-request budget is insufficient"},"403":{"description":"Origin or session access denied"},"404":{"description":"Endpoint or profile not found"},"409":{"description":"Profile revision, username or idempotency conflict; or request still running"},"410":{"description":"Idempotent result cache expired; request not repeated"},"413":{"description":"Body too large"},"415":{"description":"Content-Type must be application/json"},"422":{"description":"Invalid request or constraints"},"428":{"description":"Required profile revision, idempotency or budget header is missing"},"429":{"description":"Request or daily usage limit"},"500":{"description":"Unexpected server error; use the request ID when reporting it"},"502":{"description":"Upstream provider failed"},"503":{"description":"Required service is not configured or busy"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"amount_usd":{"anyOf":[{"type":"number","const":10},{"type":"number","const":25},{"type":"number","const":50}]}},"required":["amount_usd"],"additionalProperties":false}}}},"parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"type":"string","minLength":16,"maxLength":100},"description":"Required for prepaid mutations and checkout. Reuse for identical retries only."}]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}