{"openapi":"3.1.0","info":{"title":"BrainFlow API","version":"1.0.0","description":"Neural engagement analysis powered by Meta TRIBE v2. Research use only (CC BY-NC).","license":{"name":"CC-BY-NC-4.0"}},"servers":[{"url":"https://brainflow.solkind.in"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Job":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","transcribing","describing","tribe_running","aggregating","narrating","succeeded","failed"]},"media_kind":{"type":"string","enum":["video","audio"]},"original_name":{"type":"string","nullable":true},"blob_url":{"type":"string","format":"uri"},"created_at":{"type":"string","format":"date-time"},"error_message":{"type":"string","nullable":true}}}}},"paths":{"/api/upload":{"post":{"summary":"Get Vercel Blob upload token","operationId":"createUploadToken","tags":["Upload"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string"},"content_type":{"type":"string"}},"required":["filename"]}}}},"responses":{"200":{"description":"Upload token"}}}},"/api/jobs":{"get":{"summary":"List jobs","operationId":"listJobs","tags":["Jobs"],"parameters":[{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"type":"integer","default":50}}],"responses":{"200":{"description":"Array of jobs"}}},"post":{"summary":"Create analysis job","operationId":"createJob","tags":["Jobs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["blob_url","blob_pathname","media_kind"],"properties":{"blob_url":{"type":"string","format":"uri"},"blob_pathname":{"type":"string"},"media_kind":{"type":"string","enum":["video","audio"]},"original_name":{"type":"string"}}}}}},"responses":{"202":{"description":"Job created"}}}},"/api/jobs/{id}":{"get":{"summary":"Get job with results","operationId":"getJob","tags":["Jobs"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job with results"}}},"delete":{"summary":"Delete job","operationId":"deleteJob","tags":["Jobs"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"}}}},"/api/jobs/{id}/heatmap":{"get":{"summary":"Get cortical heatmap PNG","operationId":"getHeatmap","tags":["Results"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"PNG image","content":{"image/png":{}}}}}},"/api/jobs/{id}/narrative":{"get":{"summary":"Get narrative","operationId":"getNarrative","tags":["Results"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Narrative text"}}},"post":{"summary":"Regenerate narrative","operationId":"generateNarrative","tags":["Results"],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"focus":{"type":"string","enum":["attention","emotion","memory","language","general"]}}}}}},"responses":{"200":{"description":"Narrative text"}}}},"/api/mcp":{"post":{"summary":"MCP Streamable HTTP endpoint","operationId":"mcpPost","tags":["MCP"],"responses":{"200":{"description":"MCP response"}}}},"/api/keys":{"get":{"summary":"List API keys","operationId":"listKeys","tags":["Auth"],"responses":{"200":{"description":"Keys"}}},"post":{"summary":"Create API key","operationId":"createKey","tags":["Auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"201":{"description":"Key + one-time secret"}}},"delete":{"summary":"Revoke API key","operationId":"revokeKey","tags":["Auth"],"parameters":[{"in":"query","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Revoked"}}}},"/api/health":{"get":{"summary":"Health check","operationId":"health","tags":["System"],"responses":{"200":{"description":"OK"},"503":{"description":"Degraded"}}}}}}