{"openapi":"3.0.3","info":{"title":"SSIT AI Kit — Customer API","description":"Use a workspace API key via `X-API-Key` or `Authorization: Bearer`. Required scopes (`chat`, `chat_agent`, `chat_agent_train`, `local_model_access`) depend on your plan. Token credits are consumed on successful charged calls where indicated.","version":"1.0.0"},"servers":[{"url":"/api/v1","description":"API base (same origin as this server)"}],"tags":[{"name":"Health","description":"No authentication"},{"name":"Models","description":"List models visible to your key (scope: chat)"},{"name":"Chat","description":"Chat and generation (scope: chat)"},{"name":"Fine-tune","description":"Training workflows (scope: chat_agent_train)"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Workspace API key from the customer portal"}},"schemas":{"ChatMessage":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant","system"]},"content":{"type":"string"}}},"ChatRequest":{"type":"object","required":["messages"],"properties":{"model":{"type":"string","description":"Ollama model name (optional if key has defaultModel)"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessage"}},"options":{"type":"object","additionalProperties":true}}},"GenerateRequest":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"type":"string"},"options":{"type":"object"}}},"DatasetCreate":{"type":"object","properties":{"title":{"type":"string"},"records":{"type":"array","items":{"type":"object"}},"jsonl":{"type":"string"}}},"JobCreate":{"type":"object","required":["datasetId","baseModel"],"properties":{"datasetId":{"type":"string"},"baseModel":{"type":"string"},"epochs":{"type":"integer"},"name":{"type":"string"}}},"RegisterBody":{"type":"object","properties":{"modelName":{"type":"string"}}}}},"paths":{"/health":{"get":{"tags":["Health"],"summary":"Service health","security":[],"responses":{"200":{"description":"OK"}}}},"/models":{"get":{"tags":["Models"],"summary":"List Ollama models for this key","security":[{"ApiKey":[]}],"responses":{"200":{"description":"Model list"},"401":{"description":"Invalid or missing API key"},"403":{"description":"Scope or plan restriction"}}}},"/chat":{"post":{"tags":["Chat"],"summary":"Chat completion","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}}},"responses":{"200":{"description":"Completion result"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}},"/chat/stream":{"post":{"tags":["Chat"],"summary":"Streaming chat","security":[{"ApiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}}},"responses":{"200":{"description":"SSE or chunked stream"}}}},"/generate":{"post":{"tags":["Chat"],"summary":"Text generation","security":[{"ApiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRequest"}}}},"responses":{"200":{"description":"Generated text"}}}},"/finetune/datasets":{"get":{"tags":["Fine-tune"],"summary":"List datasets","security":[{"ApiKey":[]}],"responses":{"200":{"description":"Datasets"}}},"post":{"tags":["Fine-tune"],"summary":"Create dataset","security":[{"ApiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetCreate"}}}},"responses":{"201":{"description":"Created"}}}},"/finetune/datasets/{id}":{"delete":{"tags":["Fine-tune"],"summary":"Delete dataset","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"}}}},"/finetune/jobs":{"get":{"tags":["Fine-tune"],"summary":"List jobs","security":[{"ApiKey":[]}],"responses":{"200":{"description":"Jobs"}}},"post":{"tags":["Fine-tune"],"summary":"Create job","security":[{"ApiKey":[]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}}},"responses":{"201":{"description":"Created"}}}},"/finetune/jobs/{id}":{"get":{"tags":["Fine-tune"],"summary":"Get job","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job"}}},"delete":{"tags":["Fine-tune"],"summary":"Delete job","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"}}}},"/finetune/jobs/{id}/start":{"post":{"tags":["Fine-tune"],"summary":"Start training","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Started"}}}},"/finetune/jobs/{id}/cancel":{"post":{"tags":["Fine-tune"],"summary":"Cancel job","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cancelled"}}}},"/finetune/jobs/{id}/log":{"get":{"tags":["Fine-tune"],"summary":"Training log","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Log lines"}}}},"/finetune/jobs/{id}/register":{"post":{"tags":["Fine-tune"],"summary":"Register trained model in Ollama","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}}},"responses":{"200":{"description":"Registered"}}}}}}