{"openapi":"3.1.0","info":{"title":"Treebeard API","description":"Verifiable Ratings for AI Agents — by Ent Laboratories LLC","version":"0.1.0"},"paths":{"/":{"get":{"tags":["Health"],"summary":"Root","description":"Root health check.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Detailed health check for monitoring.","operationId":"health_check_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["Health"],"summary":"Health Check","description":"Detailed health check for monitoring.","operationId":"health_check_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/health":{"get":{"tags":["Health"],"summary":"Health Check V1","description":"Alias at /v1/health — for monitoring tools that expect versioned paths.\n\nPRD v4.47 Item 5.","operationId":"health_check_v1_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/agents":{"get":{"tags":["Agents"],"summary":"List Agents","description":"List agents with optional filtering and pagination.\n\nPRD Epic 1.1: Agent Directory. PRD v4.52 B2: capability filters.","operationId":"list_agents_v1_agents_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by agent category","title":"Category"},"description":"Filter by agent category"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by agent status (active/under_review/archived)","title":"Status"},"description":"Filter by agent status (active/under_review/archived)"},{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by blockchain (ethereum/base/solana/arbitrum)","title":"Chain"},"description":"Filter by blockchain (ethereum/base/solana/arbitrum)"},{"name":"grade","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by grade tier prefix (A/B/C/D/F) or 'none' for unrated","title":"Grade"},"description":"Filter by grade tier prefix (A/B/C/D/F) or 'none' for unrated"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Search by name","title":"Search"},"description":"Search by name"},{"name":"rated_only","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude unrated agents (PRD v4.52 B2)","default":false,"title":"Rated Only"},"description":"Exclude unrated agents (PRD v4.52 B2)"},{"name":"x402_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only x402-enabled agents","default":false,"title":"X402 Only"},"description":"Only x402-enabled agents"},{"name":"erc8128_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only ERC-8128 compliant agents","default":false,"title":"Erc8128 Only"},"description":"Only ERC-8128 compliant agents"},{"name":"reputation_verified_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only The Graph-enriched agents","default":false,"title":"Reputation Verified Only"},"description":"Only The Graph-enriched agents"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by discovery source (erc8004, virtuals, bankrbot, solana_8004)","title":"Source"},"description":"Filter by discovery source (erc8004, virtuals, bankrbot, solana_8004)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{id_or_slug}":{"get":{"tags":["Agents"],"summary":"Get Agent","description":"Get agent detail by UUID or slug.\n\nPRD Epic 1.3: Agent Profile.","operationId":"get_agent_v1_agents__id_or_slug__get","parameters":[{"name":"id_or_slug","in":"path","required":true,"schema":{"type":"string","title":"Id Or Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/ent-review":{"get":{"tags":["Agents"],"summary":"Get Agent Ent Review","description":"Return the latest published Ent Review for an agent.\n\nPRD v4.52 Part A Item A3.\n404 if no published review exists.\nNever returns bull_case, bear_case, or full_transcript.","operationId":"get_agent_ent_review_v1_agents__agent_id__ent_review_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/developer-identity":{"patch":{"tags":["Agents"],"summary":"Update Developer Identity","description":"Set or update developer identity fields on an agent profile.\n\nAuth: requires X-Admin-Secret header.\nDisplay-only — no scoring impact.","operationId":"update_developer_identity_v1_agents__agent_id__developer_identity_patch","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperIdentityPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/rating":{"get":{"tags":["Ratings"],"summary":"Get Agent Rating","description":"Get current rating breakdown for an agent.\n\nPRD Epic 3: Rating detail view.","operationId":"get_agent_rating_v1_agents__agent_id__rating_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/history":{"get":{"tags":["Ratings"],"summary":"Get Agent Rating History","description":"Get rating history for an agent.\n\nPRD: Each recalculation creates a new row.","operationId":"get_agent_rating_history_v1_agents__agent_id__history_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/leaderboards":{"get":{"tags":["Leaderboards"],"summary":"Get Overall Leaderboard","description":"Top 50 agents overall by numeric score.\n\nPRD Epic 6.1: Overall leaderboard.","operationId":"get_overall_leaderboard_v1_leaderboards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/leaderboards/newly-listed":{"get":{"tags":["Leaderboards"],"summary":"Get Newly Listed Leaderboard","description":"50 most recently registered agents sorted by created_at DESC.","operationId":"get_newly_listed_leaderboard_v1_leaderboards_newly_listed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/leaderboards/{category}":{"get":{"tags":["Leaderboards"],"summary":"Get Category Leaderboard","description":"Top 30 agents in a specific category.\n\nPRD Epic 6.2: Per-category leaderboard.","operationId":"get_category_leaderboard_v1_leaderboards__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search":{"get":{"tags":["Search"],"summary":"Search Agents","description":"Full-text search for agents.\n\nPRD Epic 1.1: Searches name, slug, and description.\nMVP uses in-memory matching. PostgreSQL GIN index for production.","operationId":"search_agents_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trending":{"get":{"tags":["Search"],"summary":"Get Trending Agents","description":"Get trending agents.\n\nPRD Epic 6: Trending agents based on score movement.\nMVP: Returns agents sorted by numeric score (trending = high performance).\nPhase 2: Will use actual score deltas over time.\n\nPerformance: 5-minute in-process TTL cache. DB query uses\nix_tb_agents_score_delta index with noload to skip relationship loading.","operationId":"get_trending_agents_v1_trending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of trending agents","default":10,"title":"Limit"},"description":"Number of trending agents"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/leads":{"post":{"tags":["Leads"],"summary":"Create Lead","description":"Capture a new lead from the website.\n\nAccepts email (required), optional name/company/role/message/use_case.\nSource must be one of the defined LeadSource enum values.\n\nReturns the created lead's id, email, source, and created_at timestamp.","operationId":"create_lead_v1_leads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/metrics":{"get":{"tags":["Dashboard"],"summary":"Get Metrics","description":"Return all cached metric values.","operationId":"get_metrics_v1_dashboard_metrics_get","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_list_MetricItem__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Dashboard"],"summary":"Set Metric","description":"Manually set a metric value (e.g. Twitter followers, MRR).","operationId":"set_metric_v1_dashboard_metrics_put","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricManualSet"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/metrics/{key}":{"delete":{"tags":["Dashboard"],"summary":"Delete Metric","description":"Delete a metric from the cache.","operationId":"delete_metric_v1_dashboard_metrics__key__delete","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/tasks":{"get":{"tags":["Dashboard"],"summary":"Get Tasks","description":"Return tasks, optionally filtered by status.","operationId":"get_tasks_v1_dashboard_tasks_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_list_TaskItem__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Dashboard"],"summary":"Create Task","description":"Create a new task. Used by Orchestrate agent and manual entry.","operationId":"create_task_v1_dashboard_tasks_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/tasks/{task_id}":{"patch":{"tags":["Dashboard"],"summary":"Update Task","description":"Update task status (complete, snooze, dismiss, etc.).","operationId":"update_task_v1_dashboard_tasks__task_id__patch","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/okr":{"get":{"tags":["Dashboard"],"summary":"Get Okr","description":"Return OKR goals joined with current metric values.","operationId":"get_okr_v1_dashboard_okr_get","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_list_OKRItem__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/okr/{goal_id}":{"patch":{"tags":["Dashboard"],"summary":"Update Okr","description":"Update an OKR goal target value.","operationId":"update_okr_v1_dashboard_okr__goal_id__patch","parameters":[{"name":"goal_id","in":"path","required":true,"schema":{"type":"integer","title":"Goal Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OKRUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/intel":{"get":{"tags":["Dashboard"],"summary":"Get Intel","description":"Return intelligence feed items.","operationId":"get_intel_v1_dashboard_intel_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_list_IntelItem__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Dashboard"],"summary":"Create Intel","description":"Create a new intel feed item. Used by Quickbeam agent.","operationId":"create_intel_v1_dashboard_intel_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/intel/{item_id}":{"patch":{"tags":["Dashboard"],"summary":"Update Intel","description":"Archive or flag an intel item.","operationId":"update_intel_v1_dashboard_intel__item_id__patch","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer","title":"Item Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/messages":{"get":{"tags":["Dashboard"],"summary":"Get Messages","description":"Return cofounder message thread (most recent last).","operationId":"get_messages_v1_dashboard_messages_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_list_MessageItem__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Dashboard"],"summary":"Create Message","description":"Store a founder message. AI response integration added in Phase 4.","operationId":"create_message_v1_dashboard_messages_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/leads":{"get":{"tags":["Dashboard"],"summary":"Get Leads","description":"Return email leads captured from the public site, newest first.","operationId":"get_leads_v1_dashboard_leads_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/submissions":{"get":{"tags":["Dashboard"],"summary":"Get Submissions","description":"Return agent submission queue, newest first.","operationId":"get_submissions_v1_dashboard_submissions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dashboard/sync":{"post":{"tags":["Dashboard"],"summary":"Trigger Sync","description":"Trigger a manual metric sync. Runs Treebeard DB sync now; Phase 2 adds external APIs.","operationId":"trigger_sync_v1_dashboard_sync_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stats/distribution":{"get":{"tags":["Stats"],"summary":"Get Score Distribution","description":"Grade distribution across all rated agents.\n\nPRD v4.27 Item 3. Cached 1 hour. No JOIN — direct GROUP BY on tb_agents.","operationId":"get_score_distribution_v1_stats_distribution_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/stats/category-means":{"get":{"tags":["Stats"],"summary":"Get Category Means","description":"Population mean per rating category across all rated agents.\n\nPRD v4.27 Item 9. Used by the frontend to draw a mean-line indicator on\neach category bar in the agent detail rating breakdown. Cached 1 hour.\n\nReturns:\n    {\n        \"economic_viability\": 42.3,\n        \"operational_reliability\": 38.1,\n        \"code_quality\": 45.7,\n        \"autonomy_index\": 67.2,\n        \"safety\": 52.8,\n        \"community\": 41.0,\n        \"as_of\": \"2026-03-19T...\",\n        \"sample_size\": 80592\n    }","operationId":"get_category_means_v1_stats_category_means_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/stats/category-benchmarks":{"get":{"tags":["Stats"],"summary":"Get Category Benchmarks","description":"Per-category benchmark stats for competitive analysis.\n\nRivendell requirement: competitive benchmarking and percentile calculations.\n\nOptional ?category= filter. Without it, returns stats for all categories.\n\nReturns per category:\n  - agent_count: total agents rated in category\n  - mean_score: mean composite score\n  - median_score: median composite score\n  - top10_avg: mean score of top 10% of agents (by composite score)\n  - grade_distribution: {A+: N, A: N, ...}\n  - dimension_means: mean per scoring dimension\n\nCached 1 hour per category.","operationId":"get_category_benchmarks_v1_stats_category_benchmarks_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stats/ecosystem-summary":{"get":{"tags":["Stats"],"summary":"Get Ecosystem Summary","description":"Full ecosystem snapshot — feeds Market Council reports + public dashboard.\n\nAggregates:\n- Total agents (active, rated, unrated)\n- Grade distribution\n- Chain distribution (agents per chain)\n- Category distribution (agents per category)\n- Score statistics (mean, median, min, max)\n- New registrations (7-day, 30-day)\n- Top movers (biggest score_delta, if available)\n- Standards adoption (x402, ERC-8128 counts)\n\nCached 1 hour. No auth required.","operationId":"get_ecosystem_summary_v1_stats_ecosystem_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/stats/chains":{"get":{"tags":["Stats"],"summary":"Get Chain Stats","description":"Return the exact count of distinct chains with actual indexed\nagents, plus the cached total agent count.\n\nResponse shape:\n  {\n    \"total_agents\": 177445,\n    \"rated_agents\": 68,\n    \"chain_count\": 14,\n    \"as_of\": \"2026-04-21T23:30:00Z\",\n  }\n\nScheduler-warmed (every 15 min). Cold start falls through to a\nsynchronous refresh that populates the cache too — only the very\nfirst caller after a deploy pays the ~7s cost.","operationId":"get_chain_stats_v1_stats_chains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/submissions":{"post":{"tags":["Submissions"],"summary":"Submit Agent","description":"Queue an agent URL for inclusion in the next crawl cycle.\n\n- Rate-limited: 5 submissions per IP per 24h\n- Deduplicates against existing agents and the submission queue\n- Returns 201 on success; 429 on rate-limit; 409 on duplicate; 422 on bad URL","operationId":"submit_agent_v1_submissions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/methodology":{"get":{"tags":["Methodology"],"summary":"Get Methodology","description":"Return the versioned scoring methodology as a structured JSON document.\n\nPRD v4.51 Item 1: machine-readable methodology endpoint. All values\ncome directly from constants.py — never hardcoded here.","operationId":"get_methodology_v1_methodology_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/insights/latest":{"get":{"tags":["Insights"],"summary":"Get Latest Report","description":"Return the most recent published Market Council report.\nReturns null data if no reports exist yet.","operationId":"get_latest_report_v1_insights_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}}}}},"/v1/insights/history":{"get":{"tags":["Insights"],"summary":"Get Report History","description":"Paginated list of published Market Council reports (summary only).","operationId":"get_report_history_v1_insights_history_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/insights/{report_id}":{"get":{"tags":["Insights"],"summary":"Get Report By Id","description":"Return a single published Market Council report by ID.","operationId":"get_report_by_id_v1_insights__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/mcp":{"get":{"tags":["MCP"],"summary":"Mcp Discovery","description":"MCP discovery — returns available methods and capabilities.","operationId":"mcp_discovery_v1_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["MCP"],"summary":"Mcp Jsonrpc","description":"JSON-RPC 2.0 endpoint for MCP clients.","operationId":"mcp_jsonrpc_v1_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/x402/agents/{agent_id}":{"get":{"tags":["x402"],"summary":"Get Agent Trust Score X402","description":"x402-gated trust-score lookup.\n\nReturns the same AgentDetail payload as GET /v1/agents/{id_or_slug}.\nThe middleware handles the 402/verify/settle lifecycle; this handler\nruns only after payment is verified, so no auth check is needed here.","operationId":"get_agent_trust_score_x402_v1_x402_agents__agent_id__get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/donate":{"post":{"tags":["donate"],"summary":"Treebeard public donation endpoint (x402-gated USDC on Base)","description":"Persist a settled x402 donation to tb_donations.\n\nThe middleware has already verified the payment by the time we get\nhere. Our job is just to record it. Donor address and tx_hash are\npulled from the middleware-populated request state (`request.state\n.x402_settlement`); we fall back to parsing `x_payment_response`\nif the state isn't populated for some reason.\n\nIdempotency: tx_hash is UNIQUE in tb_donations. A replay or\nfacilitator retry that re-invokes this handler with the same\ntx_hash will hit the unique constraint; we treat that as a no-op\nand return the existing record.","operationId":"receive_donation_v1_donate_post","parameters":[{"name":"X-Payment-Response","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set by the x402 PaymentMiddlewareASGI after a successful verify+settle. Contains the settled tx_hash, payer address, and amount. Handler is only invoked when this is present (middleware blocks otherwise).","title":"X-Payment-Response"},"description":"Set by the x402 PaymentMiddlewareASGI after a successful verify+settle. Contains the settled tx_hash, payer address, and amount. Handler is only invoked when this is present (middleware blocks otherwise)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope_DonationReceipt_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/donations":{"get":{"tags":["donate"],"summary":"Public donor ledger — every donation Treebeard has received","description":"Public ledger of every donation, ordered by received_at DESC.\n\nAnonymous donations (is_public=false) return donor_address=None,\nbut the BaseScan tx link is always present — the on-chain tx is\npublic regardless of our UI display choice.","operationId":"list_donations_v1_donations_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DeveloperIdentityPayload":{"properties":{"github_handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github Handle"},"twitter_handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter Handle"},"linkedin_handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Handle"}},"type":"object","title":"DeveloperIdentityPayload","description":"Payload for setting developer identity fields on an agent."},"DonationReceipt":{"properties":{"tx_hash":{"type":"string","title":"Tx Hash"},"chain":{"type":"string","title":"Chain"},"asset":{"type":"string","title":"Asset"},"amount":{"type":"string","title":"Amount"},"donor_address":{"type":"string","title":"Donor Address"},"is_public":{"type":"boolean","title":"Is Public"},"received_at":{"type":"string","format":"date-time","title":"Received At"},"ledger_url":{"type":"string","title":"Ledger Url","description":"Public ledger URL where this donation will appear."},"basescan_url":{"type":"string","title":"Basescan Url","description":"BaseScan explorer URL for the settled tx."}},"type":"object","required":["tx_hash","chain","asset","amount","donor_address","is_public","received_at","ledger_url","basescan_url"],"title":"DonationReceipt","description":"Returned by POST /v1/donate after payment settles."},"ErrorResponse":{"properties":{"error_code":{"type":"string","title":"Error Code","description":"Machine-readable error code"},"message":{"type":"string","title":"Message","description":"Human-readable error message"},"details":{"anyOf":[{},{"type":"null"}],"title":"Details"}},"type":"object","required":["error_code","message"],"title":"ErrorResponse","description":"Structured error response (PRD Appendix A)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IntelCreate":{"properties":{"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"category":{"anyOf":[{"type":"string","pattern":"^(Competitor|ERC-8004|AI Agent Market|Opportunity|Data Drop|Handle Update)$"},{"type":"null"}],"title":"Category"}},"type":"object","required":["title"],"title":"IntelCreate","description":"POST body to create an intel feed item."},"IntelItem":{"properties":{"id":{"type":"integer","title":"Id"},"item_id":{"type":"integer","title":"Item Id"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"flagged":{"type":"boolean","title":"Flagged"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_modified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Modified At"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"}},"type":"object","required":["id","item_id","title","summary","source_url","category","flagged","created_at","archived_at"],"title":"IntelItem","description":"An intelligence feed item."},"IntelUpdate":{"properties":{"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived"},"flagged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Flagged"}},"type":"object","title":"IntelUpdate","description":"PATCH body to update an intel item."},"LeadCreate":{"properties":{"email":{"type":"string","maxLength":255,"title":"Email","description":"Email address of the lead"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Full name"},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company","description":"Company name"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role","description":"Self-identified role"},"source":{"type":"string","maxLength":100,"title":"Source","description":"Where this lead was captured (e.g. signin, hero_cta)"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Message from contact form"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case","description":"Intended use case"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional context (JSONB)"}},"type":"object","required":["email","source"],"title":"LeadCreate","description":"Request schema for creating a new lead."},"MessageCreate":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"MessageCreate","description":"POST body to send a cofounder message."},"MessageItem":{"properties":{"id":{"type":"integer","title":"Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","role","content","created_at"],"title":"MessageItem","description":"A message in the cofounder thread."},"MetricItem":{"properties":{"key":{"type":"string","title":"Key"},"value":{"title":"Value"},"fetched_at":{"type":"string","format":"date-time","title":"Fetched At"},"ttl_minutes":{"type":"integer","title":"Ttl Minutes"}},"type":"object","required":["key","value","fetched_at","ttl_minutes"],"title":"MetricItem","description":"A single cached metric value."},"MetricManualSet":{"properties":{"key":{"type":"string","title":"Key"},"value":{"type":"number","title":"Value"}},"type":"object","required":["key","value"],"title":"MetricManualSet","description":"PUT body to manually set a metric value."},"OKRItem":{"properties":{"id":{"type":"integer","title":"Id"},"metric_key":{"type":"string","title":"Metric Key"},"label":{"type":"string","title":"Label"},"target_value":{"type":"number","title":"Target Value"},"current_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Value"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","metric_key","label","target_value","updated_at"],"title":"OKRItem","description":"An OKR goal with current value from metrics cache."},"OKRUpdate":{"properties":{"target_value":{"type":"number","title":"Target Value"}},"type":"object","required":["target_value"],"title":"OKRUpdate","description":"PATCH body to update an OKR target."},"PaginationMeta":{"properties":{"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Current page number"},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","description":"Items per page"},"total_items":{"type":"integer","minimum":0.0,"title":"Total Items","description":"Total number of items"},"total_pages":{"type":"integer","minimum":0.0,"title":"Total Pages","description":"Total number of pages"}},"type":"object","required":["page","page_size","total_items","total_pages"],"title":"PaginationMeta","description":"Pagination metadata returned with list endpoints."},"ResponseEnvelope":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope","description":"Standard response wrapper (PRD Appendix A).\n\nAll API responses are wrapped in this envelope."},"ResponseEnvelope_DonationReceipt_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"$ref":"#/components/schemas/DonationReceipt"},{"type":"null"}]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope[DonationReceipt]"},"ResponseEnvelope_dict_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope[dict]"},"ResponseEnvelope_list_IntelItem__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/IntelItem"},"type":"array"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope[list[IntelItem]]"},"ResponseEnvelope_list_MessageItem__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/MessageItem"},"type":"array"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope[list[MessageItem]]"},"ResponseEnvelope_list_MetricItem__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/MetricItem"},"type":"array"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope[list[MetricItem]]"},"ResponseEnvelope_list_OKRItem__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/OKRItem"},"type":"array"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope[list[OKRItem]]"},"ResponseEnvelope_list_TaskItem__":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/TaskItem"},"type":"array"},{"type":"null"}],"title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"null"}]}},"type":"object","title":"ResponseEnvelope[list[TaskItem]]"},"SubmissionRequest":{"properties":{"url":{"type":"string","title":"Url"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","required":["url"],"title":"SubmissionRequest","description":"Body for POST /v1/submissions."},"TaskCreate":{"properties":{"title":{"type":"string","title":"Title"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"priority":{"type":"string","pattern":"^P[123]$","title":"Priority"},"estimated_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Minutes"},"source":{"type":"string","title":"Source","default":"manual"}},"type":"object","required":["title","priority"],"title":"TaskCreate","description":"POST body to create a new task."},"TaskItem":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"priority":{"type":"string","title":"Priority"},"status":{"type":"string","title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"estimated_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Minutes"},"snooze_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Snooze Until"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","title","body","priority","status","source","estimated_minutes","snooze_until","created_at","updated_at","completed_at"],"title":"TaskItem","description":"A task in the queue."},"TaskUpdate":{"properties":{"status":{"anyOf":[{"type":"string","pattern":"^(pending|in_progress|completed|snoozed|dismissed)$"},{"type":"null"}],"title":"Status"},"snooze_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Snooze Until"}},"type":"object","title":"TaskUpdate","description":"PATCH body to update a task."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}