{"openapi":"3.1.0","info":{"title":"GrainBud Portfolio Snapshot API","version":"1.0.0","summary":"Read-only personal investment portfolio snapshot API.","description":"GrainBud exposes a single AI-facing read-only portfolio snapshot endpoint. The endpoint returns confirmed account facts plus reference prices, FX estimates, source lineage, and risk flags."},"servers":[{"url":"https://grainbud.poorlow.com"}],"security":[],"paths":{"/api/ai/portfolio/snapshot":{"get":{"operationId":"getPortfolioSnapshot","summary":"Get current portfolio snapshot","description":"Return confirmed portfolio facts and reference market data for AI analysis. External quotes and FX conversions are estimates and do not override confirmed snapshot values.","security":[],"responses":{"200":{"description":"Portfolio snapshot payload.","content":{"application/json":{"schema":{"type":"object","required":["generated_at","access_control","snapshot"],"properties":{"generated_at":{"type":"string","format":"date-time"},"access_control":{"type":"object","properties":{"mode":{"type":"string"},"required_scope":{"type":"string","const":"portfolio:snapshot:read"},"granted_scopes":{"type":"array","items":{"type":"string"}},"rate_limit":{"type":"object"}}},"snapshot":{"type":"object","description":"Confirmed account facts, positions, allocations, quote coverage, FX exposure, source lineage, and risk flags.","additionalProperties":true}}}}}},"401":{"description":"Missing, invalid, or insufficient token."},"429":{"description":"Rate limited."},"503":{"description":"Token store unavailable."}}}},"/api/ai/manifest":{"get":{"operationId":"getAiApiManifest","summary":"Get API discovery manifest","responses":{"200":{"description":"Machine-readable discovery document."}}}},"/api/ai/openapi":{"get":{"operationId":"getAiApiOpenApi","summary":"Get OpenAPI contract","responses":{"200":{"description":"OpenAPI 3.1 contract."}}}},"/api/ai/instructions":{"get":{"operationId":"getAiApiInstructions","summary":"Get Markdown instructions for AI tools","responses":{"200":{"description":"Markdown instructions."}}}},"/agent.md":{"get":{"operationId":"getAgentMarkdown","summary":"Get single-link AI portfolio brief","description":"Return an AI-readable Markdown brief containing the current portfolio summary, holdings table, caveats, and links to machine-readable endpoints.","security":[],"responses":{"200":{"description":"Markdown agent brief.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","summary":"Get AI crawler index","responses":{"200":{"description":"Plain text Markdown-style AI index.","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Recommended. Send Authorization: Bearer <token>."},"xApiToken":{"type":"apiKey","in":"header","name":"x-api-token","description":"Alternative token header."},"queryToken":{"type":"apiKey","in":"query","name":"token","description":"Fallback for tools that cannot send headers."}}}}