{"openapi":"3.1.0","info":{"title":"Bounty API","description":"Pay-per-call data APIs for AI agents: company intelligence, news, jobs, app reviews, and Singapore property workflows.","version":"2.1.0","x-guidance":"Bounty provides pay-per-call data APIs for AI agents. The core product is no-account access to data agents need for research, monitoring, GTM, and investment workflows: company intelligence, news, job postings, app reviews, and Singapore property/financial analysis.\n\nBounty is no longer just Singapore property. Singapore property remains one vertical; the broader product is agent-native data infrastructure with MCP discovery and x402 payments.\n\nFREE endpoints (no payment needed):\n- /postal/{code} — postal code to district mapping\n- /address/{code} — full address intelligence (district, MRT, coordinates)\n- /mrt/near/{code} — nearest MRT stations to a postal code\n- /schools/near/{code} — schools within 1km/2km (SG school admission priority)\n- /stamp-duty — buyer stamp duty + ABSD calculation\n- /mortgage/calculate — mortgage payment calculator\n- /buy-vs-rent — buy-vs-rent total cost comparison\n- /salary/search — salary benchmark from live job postings\n- /tax/income — Singapore income tax calculator\n- /cpf/housing — CPF OA accumulation for housing\n- /currency/convert — currency conversion\n- /hdb/lease-decay — HDB lease decay analysis\n\nPAID endpoints (x402 micropayment, USDC on Base):\n- /company/{domain} — company website intelligence: tech stack, contacts, social links, SSL, security headers, metadata ($0.05/call)\n- /news/search?q=... — current news search with structured articles ($0.01/call)\n- /jobs/search?q=... — job postings and hiring signals across public sources ($0.02/call)\n- /reviews/app/{country}/{app_id} — recent App Store reviews with rating distribution and deterministic topic flags ($0.02/call)\n- /hdb/towns, /hdb/search — HDB resale transaction data ($0.01/call)\n- /rental-yield/calculate — rental yield investment metrics ($0.005/call)\n- /affordability/calculate — TDSR/MSR affordability ($0.01/call)\n- /property/analyze — full property investment analysis ($0.05/call)\n- /property/pitch — investment thesis one-pager ($0.05/call)\n- /property/rank — rank properties by investment value ($0.10/call)\n- /ura/transactions, /ura/rental-median, /ura/developer-sales, /ura/pipeline, /ura/rental-contracts — URA private property data ($0.05/call)\n\nCompany / GTM / Market Research Workflow:\n1. Use /company/{domain} for BuiltWith-style company intelligence: tech stack, analytics, CDN, payments, chat, auth, social links, SSL/security headers.\n2. Use /news/search?q=<company or topic> for current news, launches, lawsuits, funding, layoffs, or market events.\n3. Use /jobs/search?q=<role/company/skill> to detect hiring plans, expansion vectors, and talent demand.\n4. Use /reviews/app/{country}/{app_id} for subscription app competitor reviews, customer complaints, feature gaps, and rating snapshots.\n5. Combine these for B2B prospecting, investor research, competitor monitoring, product validation, and due diligence.\n\nProperty Investment Research Workflow:\n1. Identify the property (address, postal code, or listing URL)\n2. Calculate stamp duty with /stamp-duty (FREE)\n3. Compare buy vs rent with /buy-vs-rent (FREE)\n4. Calculate mortgage with /mortgage/calculate (FREE)\n5. Get transaction comparables with /ura/transactions ($0.05)\n6. Check rental yield with /rental-yield/calculate ($0.005)\n7. Benchmark salary affordability with /salary/search (FREE)\n8. Get a complete investment pitch with /property/pitch ($0.05)\n\nSteps 2-4 and 7 are FREE. Start there before paying for data-heavy endpoints.\nIf no endpoint matches the task, this API only covers Singapore. More Asian markets coming.\n","contact":{"email":"vincent@bountyapi.com"}},"paths":{"/favicon.ico":{"get":{"summary":"Favicon Ico","operationId":"favicon_ico_favicon_ico_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/site.webmanifest":{"get":{"summary":"Webmanifest","operationId":"webmanifest_site_webmanifest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Landing Page","description":"Public landing page — agent-native data infrastructure.","operationId":"landing_page__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/apis/{slug}":{"get":{"summary":"Api Catalog Page","operationId":"api_catalog_page_apis__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api":{"get":{"summary":"Root","description":"Machine-readable API info.","operationId":"root_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/stamp-duty":{"post":{"summary":"Calculate Stamp Duty","description":"Calculate total stamp duty for a Singapore property purchase.\nReturns BSD (Buyer's Stamp Duty) + ABSD (Additional Buyer's Stamp Duty).\n\nRates verified against IRAS (iras.gov.sg):\n- BSD residential: 6-tier marginal (1%-6%), effective 15 Feb 2023\n- BSD non-residential: 4-tier marginal (1%-4%)\n- ABSD: 0%-65% depending on buyer profile, effective 27 Apr 2023","operationId":"calculate_stamp_duty_stamp_duty_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StampDutyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StampDutyResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bsd":{"get":{"summary":"Calculate Bsd Get","description":"Calculate BSD only (no ABSD). Simple GET endpoint for easy testing.","operationId":"calculate_bsd_get_bsd_get","parameters":[{"name":"price","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Property price in SGD","title":"Price"},"description":"Property price in SGD"},{"name":"property_type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/app__PropertyType","default":"residential"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/absd":{"get":{"summary":"Calculate Absd Get","description":"Calculate ABSD only (no BSD). Simple GET endpoint.","operationId":"calculate_absd_get_absd_get","parameters":[{"name":"price","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Property price in SGD","title":"Price"},"description":"Property price in SGD"},{"name":"buyer_profile","in":"query","required":false,"schema":{"$ref":"#/components/schemas/app__BuyerProfile","default":"SC"}},{"name":"property_count","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Property Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ping":{"get":{"summary":"Mcp Ping","description":"Anonymous install/usage ping from MCP server startup.\n\nCalled by bountyapi-mcp on launch to track real installs.\nNo user data, no wallet address, just version + client type.","operationId":"mcp_ping_ping_get","parameters":[{"name":"version","in":"query","required":false,"schema":{"type":"string","default":"unknown","title":"Version"}},{"name":"client","in":"query","required":false,"schema":{"type":"string","default":"unknown","title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ping/stats":{"get":{"summary":"Mcp Ping Stats","description":"Anonymous MCP install statistics.","operationId":"mcp_ping_stats_ping_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/x402-status":{"get":{"summary":"X402 Status","description":"Diagnostic: shows whether x402 payment middleware is active.","operationId":"x402_status_x402_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/postal/districts":{"get":{"tags":["Singapore Postal Districts"],"summary":"List all 28 Singapore postal districts","description":"Return all 28 Singapore postal districts with their area names and the\npostal sectors (first two digits of a postal code) that map to each.","operationId":"list_districts_postal_districts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistrictListResponse"}}}}}}},"/postal/sectors":{"get":{"tags":["Singapore Postal Districts"],"summary":"Map every postal sector to its district","description":"Return a flat lookup of every postal sector (01–99, where assigned) to the\npostal district number it belongs to. Useful for building local caches.","operationId":"list_sectors_postal_sectors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostalSectorInfo"}}}}}}},"/postal/district/{district_number}":{"get":{"tags":["Singapore Postal Districts"],"summary":"Get details for a specific postal district (1–28)","description":"Return the name, general area, localities, and postal sectors for a\nsingle Singapore postal district by its number (1–28).\n\nExample: `GET /postal/district/9` → District 9 (Orchard, Cairnhill, River Valley).","operationId":"get_district_postal_district__district_number__get","parameters":[{"name":"district_number","in":"path","required":true,"schema":{"type":"integer","title":"District Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistrictInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/postal/{postal_code}":{"get":{"tags":["Singapore Postal Districts"],"summary":"Resolve a postal code to its postal district","description":"Resolve a 6-digit Singapore postal code to its postal district.\n\nExample: `238801` → sector `23`, **District 9** (Orchard, Cairnhill, River Valley).\n\nReturns the district number, district name, general area, and the list of\nareas within that district.","operationId":"get_postal_code_postal__postal_code__get","parameters":[{"name":"postal_code","in":"path","required":true,"schema":{"type":"string","title":"Postal Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostalCodeResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/rental-yield/":{"get":{"tags":["rental-yield"],"summary":"Rental Yield API info","description":"Return basic info about the rental-yield calculator endpoints.","operationId":"info_rental_yield__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/rental-yield/calculate":{"post":{"tags":["rental-yield"],"summary":"Calculate Singapore rental investment metrics","description":"Calculate rental-investment metrics for a Singapore property.\n\nComputes:\n- **Gross annual rent** = monthly_rent × 12\n- **Property tax (SG, simplified)** = annual_rent × property_tax_rate\n- **Net annual rent** = gross_annual_rent − all expenses − property_tax\n- **Gross yield** = gross_annual_rent / property_price × 100\n- **Net yield** = net_annual_rent / property_price × 100\n- **Cap rate** = net_annual_rent / property_price × 100\n- **Monthly cashflow** = net_annual_rent / 12 (no mortgage modelled)\n- **Price-to-rent ratio** = property_price / gross_annual_rent\n- **Years to break even** = property_price / net_annual_rent\n\nNote: Singapore property tax is tiered/progressive in reality; the flat\n`property_tax_rate` here (default 4%) is a deliberate simplification.","operationId":"calculate_rental_yield_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalCalcRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalCalcResult"}}}},"422":{"description":"Validation error"},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]}}},"/rental-yield/health":{"get":{"tags":["rental-yield"],"summary":"Health check","description":"Liveness probe for the rental-yield router.","operationId":"health_rental_yield_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/hdb/towns":{"get":{"tags":["hdb-resale"],"summary":"List all HDB towns with transaction counts","description":"Return every town present in the dataset along with how many resale\ntransactions have been recorded for it, sorted by transaction count\n(descending).","operationId":"get_towns_hdb_towns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TownsResponse"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]}}},"/hdb/median":{"get":{"tags":["hdb-resale"],"summary":"Median resale price by flat type for ALL towns","description":"Median resale price (and min/max/price-per-sqft range) for each flat\ntype, for every town in the dataset.","operationId":"get_all_median_hdb_median_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllTownsMedianResponse"}}}}}}},"/hdb/median/{town}":{"get":{"tags":["hdb-resale"],"summary":"Median resale price by flat type for a given town","description":"Median resale price (and min/max/price-per-sqft range) for each flat\ntype in the requested town. ``town`` is matched case-insensitively.\n\nUses a targeted town-specific fetch from data.gov.sg for accurate medians,\nfalling back to the cached global sample if the targeted fetch fails.","operationId":"get_town_median_hdb_median__town__get","parameters":[{"name":"town","in":"path","required":true,"schema":{"type":"string","title":"Town"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TownMedianResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]}}},"/hdb/search":{"get":{"tags":["hdb-resale"],"summary":"Search HDB resale transactions","description":"Search transactions. ``town`` and ``flat_type`` are filtered server-side\nby the upstream API; price and floor-area filters are applied client-side on\nthe fetched batch. Because the upstream API cannot do range queries, a cap\nof records is fetched per call and filtered locally.","operationId":"search_transactions_hdb_search_get","parameters":[{"name":"town","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Town name (case-insensitive)","title":"Town"},"description":"Town name (case-insensitive)"},{"name":"flat_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Flat type, e.g. '3 ROOM'","title":"Flat Type"},"description":"Flat type, e.g. '3 ROOM'"},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum resale_price (SGD)","title":"Min Price"},"description":"Minimum resale_price (SGD)"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Maximum resale_price (SGD)","title":"Max Price"},"description":"Maximum resale_price (SGD)"},{"name":"min_floor_area_sqm","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum floor area in square metres","title":"Min Floor Area Sqm"},"description":"Minimum floor area in square metres"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max records to return (1-100)","default":20,"title":"Limit"},"description":"Max records to return (1-100)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]}}},"/hdb/":{"get":{"tags":["hdb-resale"],"summary":"HDB resale API metadata","operationId":"root_hdb__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Root Hdb  Get"}}}}}}},"/invest/":{"get":{"tags":["invest"],"summary":"Investment growth calculator info","description":"Return basic info about the investment-growth calculator endpoints.","operationId":"info_invest__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/invest/calculate":{"post":{"tags":["invest"],"summary":"Calculate compound/simple investment growth","description":"Project the growth of an initial principal plus optional recurring\ncontributions.\n\n- **compound** (default): interest is reinvested; the compounding cadence is\n  set by `compounding_frequency` (monthly by default).\n- **simple**: interest accrues linearly on deposited capital only.\n\nContributions are applied at the end of each period (ordinary-annuity\nconvention). Returns the final balance, total contributed, total interest\nearned, the growth multiplier (final/principal) and a year-by-year growth\ntable.\n\n**Compound, monthly compounding** example:\n`principal=10000, annual_rate=7, years=1` → final ≈ `10722.90`\n(10000 × (1 + 0.07/12)^12).","operationId":"calculate_invest_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestCalcRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestCalcResult"}}}},"422":{"description":"Validation error"}}}},"/invest/health":{"get":{"tags":["invest"],"summary":"Health check","description":"Liveness probe for the investment-growth router.","operationId":"health_invest_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/currency/convert":{"get":{"tags":["currency"],"summary":"Convert an amount between two currencies","description":"Convert ``amount`` of ``from`` into ``to`` using live ECB rates.\n\nExample: ``GET /currency/convert?from=USD&to=SGD&amount=100``\n\nA same-code conversion (``from == to``) always uses a rate of exactly 1.0\nand still validates that the code is supported by the upstream.","operationId":"convert_currency_currency_convert_get","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","minLength":3,"maxLength":3,"description":"Source ISO 4217 currency code, e.g. 'USD'","default":"USD","title":"From"},"description":"Source ISO 4217 currency code, e.g. 'USD'"},{"name":"to","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":3,"description":"Target ISO 4217 currency code, e.g. 'SGD'","title":"To"},"description":"Target ISO 4217 currency code, e.g. 'SGD'"},{"name":"amount","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Amount in the source currency to convert (>= 0)","default":1.0,"title":"Amount"},"description":"Amount in the source currency to convert (>= 0)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/currency/rates":{"get":{"tags":["currency"],"summary":"Latest exchange rates for a base currency","description":"Return the latest ECB reference rates for ``base``.\n\nExample: ``GET /currency/rates?base=USD`` -> {base: \"USD\", rates: {EUR: ...,\nSGD: ..., ...}, date: \"YYYY-MM-DD\"}.","operationId":"get_latest_rates_currency_rates_get","parameters":[{"name":"base","in":"query","required":false,"schema":{"type":"string","minLength":3,"maxLength":3,"description":"Base ISO 4217 currency code, e.g. 'USD'","default":"USD","title":"Base"},"description":"Base ISO 4217 currency code, e.g. 'USD'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/currency/supported":{"get":{"tags":["currency"],"summary":"List all supported currencies","description":"Return the full set of currency codes Frankfurter (ECB) supports, as a\nmapping of code -> human-readable name.","operationId":"list_supported_currencies_currency_supported_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportedResponse"}}}}}}},"/currency/":{"get":{"tags":["currency"],"summary":"Currency API metadata","operationId":"root_currency__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Root Currency  Get"}}}}}}},"/mortgage/":{"get":{"tags":["mortgage"],"summary":"Mortgage Calculator API info","description":"Return basic info about the mortgage calculator endpoints.","operationId":"info_mortgage__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/mortgage/calculate":{"post":{"tags":["mortgage"],"summary":"Calculate fixed-rate mortgage payment and amortization","description":"Calculate the monthly payment, total interest, total paid, and a compact\namortization schedule for a fixed-rate mortgage.\n\nComputes:\n- **Loan amount** = principal − down_payment\n- **Monthly rate** = annual_interest_rate / 100 / 12\n- **Total months** = loan_term_years × 12\n- **Monthly payment** = P × [r(1+r)^n] / [(1+r)^n − 1]\n  (straight-line division when the rate is 0)\n- **Total paid** = monthly_payment × total_months\n- **Total interest** = total_paid − loan_amount\n- **Amortization schedule** = first 12 + last 12 months only\n  (the full schedule is computed but trimmed to keep the response small;\n  `truncated` indicates whether middle months were omitted)\n\nCurrency-agnostic: all monetary values are in whatever unit `principal`\nis supplied in.","operationId":"calculate_mortgage_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MortgageCalcRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MortgageCalcResult"}}}},"422":{"description":"Validation error"}}}},"/mortgage/health":{"get":{"tags":["mortgage"],"summary":"Health check","description":"Liveness probe for the mortgage router.","operationId":"health_mortgage_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/affordability/calculate":{"post":{"tags":["Affordability"],"summary":"Calculate Affordability","description":"Calculate Singapore property loan affordability under MAS TDSR/MSR framework.\n\nReturns:\n- Whether the loan passes TDSR and MSR checks\n- Maximum affordable loan amount and property price\n- Stress-tested monthly installment\n- LTV limit and required down payment","operationId":"calculate_affordability_affordability_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AffordabilityRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]}}},"/affordability/quick":{"get":{"tags":["Affordability"],"summary":"Quick Affordability","description":"Quick affordability check: can you afford this property?","operationId":"quick_affordability_affordability_quick_get","parameters":[{"name":"monthly_income","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Gross monthly income in SGD","title":"Monthly Income"},"description":"Gross monthly income in SGD"},{"name":"property_price","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Property price in SGD","title":"Property Price"},"description":"Property price in SGD"},{"name":"loan_type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/LoanType","default":"bank_private"}},{"name":"existing_debt","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Existing monthly debt obligations","default":0,"title":"Existing Debt"},"description":"Existing monthly debt obligations"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/address/{postal_code}":{"get":{"tags":["Address Intelligence"],"summary":"Address Intelligence","description":"Full address intelligence for a Singapore postal code.\n\nReturns:\n- Postal district number and name\n- Planning area (URA Master Plan)\n- Market region (CCR/RCR/OCR)\n- HDB town (if applicable)\n- Nearest MRT stations with distance and walking time\n- Approximate coordinates\n\nAll data from static reference tables. No external API calls.","operationId":"address_intelligence_address__postal_code__get","parameters":[{"name":"postal_code","in":"path","required":true,"schema":{"type":"string","title":"Postal Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mrt/search":{"get":{"tags":["Address Intelligence"],"summary":"Search Mrt","description":"Search MRT stations by name. Returns station details with line codes.","operationId":"search_mrt_mrt_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Station name to search (partial match)","title":"Q"},"description":"Station name to search (partial match)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mrt/near/{postal_code}":{"get":{"tags":["Address Intelligence"],"summary":"Mrt Near Postal","description":"Find nearest MRT stations to a Singapore postal code.","operationId":"mrt_near_postal_mrt_near__postal_code__get","parameters":[{"name":"postal_code","in":"path","required":true,"schema":{"type":"string","title":"Postal Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mrt/stations":{"get":{"tags":["Address Intelligence"],"summary":"List All Stations","description":"List all MRT stations in the database.","operationId":"list_all_stations_mrt_stations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/property/analyze":{"post":{"tags":["Property Analysis"],"summary":"Analyze Property","description":"Complete property investment analysis in one call.\n\nReturns stamp duty, transaction comparables, rental yield, affordability,\nand location intelligence — all in a single structured response.\n\nThis is the composite endpoint that makes Bounty worth installing:\nno agent can replicate this analysis by scraping, because it requires\ncombining government transaction data with MAS regulatory formulas.","operationId":"analyze_property_property_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/property/rank":{"post":{"tags":["Property Ranking"],"summary":"Rank Properties","description":"Rank candidate properties by investment value.\n\nAccepts properties from ANY source (user, web search, Apify, listing portals)\nand enriches each with stamp duty, transaction comps, rental yield, affordability,\nand location intelligence. Returns a ranked list with transparent scores.\n\nRegion parameter supports future expansion. Currently only SG returns data.\n\nScoring weights (customizable):\n- value (35%): premium/discount vs recent transaction comps\n- yield (25%): gross rental yield\n- affordability (20%): TDSR/MSR headroom\n- location (20%): MRT proximity + market region","operationId":"rank_properties_property_rank_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]}}},"/property/pitch":{"post":{"tags":["Property Pitch"],"summary":"Property Pitch","description":"Generate a complete property investment pitch.\n\nReturns a structured investment thesis that a property agent can\npresent to a client: price fairness, stamp duty, affordability,\nrental yield, location quality, tenure risk, and a plain-English verdict.\n\nWorks with HDB data now. Private property data requires URA API access.","operationId":"property_pitch_property_pitch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PitchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/tax/income":{"get":{"tags":["SG Financial Calculators"],"summary":"Income Tax Get","description":"Singapore individual income tax calculator. Resident progressive rates (YA 2024+).","operationId":"income_tax_get_tax_income_get","parameters":[{"name":"annual_income","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Gross annual income in SGD","title":"Annual Income"},"description":"Gross annual income in SGD"},{"name":"deductions","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Total deductions","default":0,"title":"Deductions"},"description":"Total deductions"},{"name":"reliefs","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Total personal reliefs","default":0,"title":"Reliefs"},"description":"Total personal reliefs"},{"name":"is_resident","in":"query","required":false,"schema":{"type":"boolean","description":"Tax residency","default":true,"title":"Is Resident"},"description":"Tax residency"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["SG Financial Calculators"],"summary":"Income Tax Post","description":"Singapore individual income tax calculator (POST body).","operationId":"income_tax_post_tax_income_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncomeTaxRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/gst":{"get":{"tags":["SG Financial Calculators"],"summary":"Gst Calculator","description":"Singapore GST calculator. Current rate: 9% (effective 1 Jan 2024).","operationId":"gst_calculator_gst_get","parameters":[{"name":"amount","in":"query","required":true,"schema":{"type":"number","description":"Amount in SGD (inclusive or exclusive of GST)","title":"Amount"},"description":"Amount in SGD (inclusive or exclusive of GST)"},{"name":"mode","in":"query","required":false,"schema":{"type":"string","description":"'add' (add GST to price) or 'remove' (extract GST from GST-inclusive price)","default":"add","title":"Mode"},"description":"'add' (add GST to price) or 'remove' (extract GST from GST-inclusive price)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/commission":{"get":{"tags":["SG Financial Calculators"],"summary":"Commission Calculator","description":"Singapore property agent commission estimator. Rates are market norms, not legally fixed.\n\nSale commissions:\n- HDB: seller pays 2% (incl. GST), buyer typically $0\n- Private: seller pays 2%, buyer pays 1% (both incl. GST)\n- Landed: seller pays 2-4%, negotiable\n\nRental commissions:\n- <24 months: tenant pays 0.5 month, landlord pays 0.5-1 month\n- >=24 months: tenant pays 1 month, landlord pays 1 month","operationId":"commission_calculator_commission_get","parameters":[{"name":"transaction_type","in":"query","required":true,"schema":{"type":"string","description":"sale, rental, or sublet","title":"Transaction Type"},"description":"sale, rental, or sublet"},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","description":"hdb, private, or landed","default":"hdb","title":"Property Type"},"description":"hdb, private, or landed"},{"name":"price","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Sale price or monthly rent (SGD)","title":"Price"},"description":"Sale price or monthly rent (SGD)"},{"name":"is_seller_landlord","in":"query","required":false,"schema":{"type":"boolean","description":"true = seller/landlord side, false = buyer/tenant side","default":true,"title":"Is Seller Landlord"},"description":"true = seller/landlord side, false = buyer/tenant side"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cpf/housing":{"get":{"tags":["SG Financial Calculators"],"summary":"Cpf Housing Eligibility","description":"Estimate CPF Ordinary Account accumulation for housing use.\n\nCPF contribution rates (total = employer + employee) by age, for wages <= $6,000/month:\n- Age <=35: 37% (17% employer + 20% employee). OA allocation: 23%\n- Age 36-45: 37%. OA allocation: 21%\n- Age 46-50: 37%. OA allocation: 19%\n- Age 51-55: 37%. OA allocation: 15%\n- Age 55-60: 26% (13+13). OA allocation: 12%\n- Age 61-65: 16.5% (9+7.5). OA allocation: 10.5%\n\nOA monthly allocation goes toward housing.","operationId":"cpf_housing_eligibility_cpf_housing_get","parameters":[{"name":"monthly_income","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Gross monthly income in SGD","title":"Monthly Income"},"description":"Gross monthly income in SGD"},{"name":"age","in":"query","required":true,"schema":{"type":"integer","maximum":65,"minimum":16,"description":"Current age (affects CPF contribution rate)","title":"Age"},"description":"Current age (affects CPF contribution rate)"},{"name":"existing_oa_balance","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Existing CPF OA balance","default":0,"title":"Existing Oa Balance"},"description":"Existing CPF OA balance"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/salary/search":{"get":{"tags":["SG Salary Benchmark"],"summary":"Salary Search","description":"Benchmark salary for a Singapore role using live MyCareersFuture job postings.\n\nReturns median, percentile ranges, and annual equivalents computed from\nreal employer-posted salary ranges. Data is from Singapore's official\ngovernment job portal (MyCareersFuture / WSG).\n\nFree endpoint.","operationId":"salary_search_salary_search_get","parameters":[{"name":"role","in":"query","required":true,"schema":{"type":"string","description":"Job title or keyword (e.g., 'equity analyst', 'software engineer')","title":"Role"},"description":"Job title or keyword (e.g., 'equity analyst', 'software engineer')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":10,"description":"Max job listings to scan","default":100,"title":"Limit"},"description":"Max job listings to scan"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schools/near/{postal_code}":{"get":{"tags":["SG School Proximity"],"summary":"Schools Near Postal","description":"Find primary and secondary schools within a radius of a Singapore postal code.\n\nIn Singapore, school proximity is a major property value driver:\n- Within 1km: Priority for Primary 1 Phase 2C ballot\n- Within 2km: Second priority for Phase 2C\n- Beyond 2km: General admission\n\nData source: OpenStreetMap (294 schools with verified coordinates).\nUses the existing address intelligence endpoint for geocoding.\n\nFree endpoint.","operationId":"schools_near_postal_schools_near__postal_code__get","parameters":[{"name":"postal_code","in":"path","required":true,"schema":{"type":"string","title":"Postal Code"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":5.0,"minimum":0.5,"description":"Search radius in km","default":2.0,"title":"Radius Km"},"description":"Search radius in km"},{"name":"school_type","in":"query","required":false,"schema":{"type":"string","description":"Filter: 'primary', 'secondary', or '' for all","default":"","title":"School Type"},"description":"Filter: 'primary', 'secondary', or '' for all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schools/list":{"get":{"tags":["SG School Proximity"],"summary":"List Schools","description":"List all schools in the database with coordinates.\n\nFree endpoint. Useful for agents to see coverage.","operationId":"list_schools_schools_list_get","parameters":[{"name":"school_type","in":"query","required":false,"schema":{"type":"string","description":"Filter: 'primary', 'secondary', or '' for all","default":"","title":"School Type"},"description":"Filter: 'primary', 'secondary', or '' for all"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Max results (0 = all)","default":0,"title":"Limit"},"description":"Max results (0 = all)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hdb/eip/{town}":{"get":{"tags":["HDB EIP Quota"],"summary":"Eip Check Town","description":"Check HDB Ethnic Integration Policy (EIP) limits for a Singapore town.\n\nThe EIP ensures a balanced ethnic mix in HDB estates. Buyers from certain\nethnic groups may be restricted from purchasing flats in blocks/neighborhoods\nwhere their group's quota is full.\n\nThis endpoint provides:\n- The maximum percentage of units available to the buyer's ethnic group\n- Whether the buyer faces EIP restrictions (qualitative)\n- SPR quota information if applicable\n\nNOTE: Real-time availability requires checking the HDB e-info portal:\nhttps://services2.hdb.gov.sg/webapp/BB31EINFO/\n\nFree endpoint.","operationId":"eip_check_town_hdb_eip__town__get","parameters":[{"name":"town","in":"path","required":true,"schema":{"type":"string","title":"Town"}},{"name":"buyer_ethnicity","in":"query","required":true,"schema":{"type":"string","description":"Malay, Chinese, Indian, or Others","title":"Buyer Ethnicity"},"description":"Malay, Chinese, Indian, or Others"},{"name":"is_spr","in":"query","required":false,"schema":{"type":"boolean","description":"Whether buyer is a non-Malaysian SPR","default":false,"title":"Is Spr"},"description":"Whether buyer is a non-Malaysian SPR"},{"name":"is_malaysian_spr","in":"query","required":false,"schema":{"type":"boolean","description":"Whether buyer is a Malaysian SPR","default":false,"title":"Is Malaysian Spr"},"description":"Whether buyer is a Malaysian SPR"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hdb/lease-decay":{"get":{"tags":["HDB Lease Analysis"],"summary":"Lease Decay Analysis","description":"Analyze HDB lease decay and its impact on financing, CPF, and resale value.\n\nKey thresholds:\n- 95+ years remaining: Like new. Full financing, full CPF.\n- 60-95 years: Healthy. Standard financing.\n- 40-60 years: Warning. Some banks may reduce loan tenure.\n- 30-40 years: Restricted. Most banks cap loan tenure at remaining lease - 5 years.\n- 20-30 years: CPF restricted. Reduced OA withdrawal limit.\n- < 20 years: Critical. No bank financing. Minimal CPF. Cash buyers only.\n\nSource: HDB, MAS, CPF Board published rules.\nFree endpoint.","operationId":"lease_decay_analysis_hdb_lease_decay_get","parameters":[{"name":"lease_commencement_year","in":"query","required":true,"schema":{"type":"integer","description":"Year the 99-year lease commenced (not TOP year, not build year - check HDB portal)","title":"Lease Commencement Year"},"description":"Year the 99-year lease commenced (not TOP year, not build year - check HDB portal)"},{"name":"current_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Current estimated value in SGD (optional, for value impact)","title":"Current Value"},"description":"Current estimated value in SGD (optional, for value impact)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ura/status":{"get":{"tags":["URA Private Property"],"summary":"Ura Status","description":"Check if URA API is configured and get a quick health check.\nFree endpoint.","operationId":"ura_status_ura_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ura/transactions":{"get":{"tags":["URA Private Property"],"summary":"Ura Transactions","description":"Get private residential property transactions (caveat data) from URA.\n\nReturns transaction records including:\n- Project name, street, market segment (CCR/RCR/OCR)\n- Property type (condo, apt, landed, etc.)\n- Sale price, area (sqm/sqft), PSF\n- Transaction date, sale type (new sale, resale, sub-sale)\n- Tenure (freehold, 99yr, 999yr, etc.)\n\nData is paginated in batches (~10,000 records per batch).\n\nPrice: $0.05/call\nSource: URA Developer API (PMI_Resi_Transaction)","operationId":"ura_transactions_ura_transactions_get","parameters":[{"name":"batch","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Batch number (results paginated)","default":1,"title":"Batch"},"description":"Batch number (results paginated)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/ura/rental-median":{"get":{"tags":["URA Private Property"],"summary":"Ura Rental Median","description":"Get median rental data by project name from URA.\n\nReturns median rental rates ($psf/month) for private residential projects,\nbroken down by property type (condo, apt, landed) and quarter.\n\nPrice: $0.05/call\nSource: URA Developer API (PMI_Resi_Rental_Median)","operationId":"ura_rental_median_ura_rental_median_get","parameters":[{"name":"project_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by project/condo name (case-insensitive partial match)","title":"Project Name"},"description":"Filter by project/condo name (case-insensitive partial match)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/ura/developer-sales":{"get":{"tags":["URA Private Property"],"summary":"Ura Developer Sales","description":"Get developer sales data (units sold by developers) from URA.\n\nReturns units launched and sold by project, including:\n- Project name, developer, location\n- Units launched, units sold, units remaining\n- Median price\n- Reference quarter\n\nPrice: $0.05/call\nSource: URA Developer API (PMI_Resi_Developer_Sales)","operationId":"ura_developer_sales_ura_developer_sales_get","parameters":[{"name":"ref_period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reference period, e.g. '2506' for Jun 2025. Leave empty for latest.","title":"Ref Period"},"description":"Reference period, e.g. '2506' for Jun 2025. Leave empty for latest."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/ura/pipeline":{"get":{"tags":["URA Private Property"],"summary":"Ura Pipeline","description":"Get future private residential supply pipeline from URA.\n\nReturns projects that are in the planning/construction pipeline:\n- Project name, location, developer\n- Number of units planned\n- Expected completion period\n- Project stage\n\nThis tells buyers/investors about upcoming supply that could affect prices.\nResults are capped at 50 records per call for performance.\n\nPrice: $0.05/call\nSource: URA Developer API (PMI_Resi_Pipeline)","operationId":"ura_pipeline_ura_pipeline_get","parameters":[{"name":"batch","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Batch number (results paginated)","default":1,"title":"Batch"},"description":"Batch number (results paginated)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/ura/rental-contracts":{"get":{"tags":["URA Private Property"],"summary":"Ura Rental Contracts","description":"Get private residential rental contract data from URA.\n\nReturns aggregate rental contract statistics by area and property type.\n\nPrice: $0.05/call\nSource: URA Developer API (PMI_Resi_Rental)","operationId":"ura_rental_contracts_ura_rental_contracts_get","parameters":[{"name":"ref_period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reference period, e.g. '25q1' for Q1 2025","title":"Ref Period"},"description":"Reference period, e.g. '25q1' for Q1 2025"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/property-tax":{"get":{"tags":["Property Decision Tools"],"summary":"Property Tax","description":"Singapore property tax calculator.\n\nOwner-occupier residential: progressive 0-32% (effective Jan 2024).\nNon-owner-occupied residential: progressive 10-20%.\nNon-residential (commercial/industrial): flat 10%.\n\nSource: IRAS property tax rates, verified from iras.gov.sg.","operationId":"property_tax_property_tax_get","parameters":[{"name":"annual_value","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Annual Value of the property in SGD (from IRAS/property tax bill)","title":"Annual Value"},"description":"Annual Value of the property in SGD (from IRAS/property tax bill)"},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","description":"residential or non-residential","default":"residential","title":"Property Type"},"description":"residential or non-residential"},{"name":"is_owner_occupied","in":"query","required":false,"schema":{"type":"boolean","description":"Whether owner lives in the property (affects rate)","default":true,"title":"Is Owner Occupied"},"description":"Whether owner lives in the property (affects rate)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/buy-vs-rent":{"get":{"tags":["Property Decision Tools"],"summary":"Buy Vs Rent","description":"Buy-vs-Rent analysis: should you buy or rent over your holding period?\n\nComputes total cost of buying (down payment + mortgage + stamp duty + property tax +\nmaintenance) vs total cost of renting (rent + opportunity cost of down payment invested).\n\nReturns a year-by-year comparison and break-even analysis.","operationId":"buy_vs_rent_buy_vs_rent_get","parameters":[{"name":"property_price","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Property purchase price in SGD","title":"Property Price"},"description":"Property purchase price in SGD"},{"name":"monthly_rent","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Monthly rent for comparable property in SGD","title":"Monthly Rent"},"description":"Monthly rent for comparable property in SGD"},{"name":"annual_value","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Property Annual Value (for property tax). If 0, estimated from monthly rent * 12.","default":0,"title":"Annual Value"},"description":"Property Annual Value (for property tax). If 0, estimated from monthly rent * 12."},{"name":"down_payment_pct","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":5,"description":"Down payment percentage (25% for bank loan, 20% for HDB loan)","default":25,"title":"Down Payment Pct"},"description":"Down payment percentage (25% for bank loan, 20% for HDB loan)"},{"name":"mortgage_rate","in":"query","required":false,"schema":{"type":"number","exclusiveMinimum":0,"description":"Mortgage interest rate (%) — 2.6% is HDB concessionary, banks ~2.5-3.5%","default":2.6,"title":"Mortgage Rate"},"description":"Mortgage interest rate (%) — 2.6% is HDB concessionary, banks ~2.5-3.5%"},{"name":"loan_tenure_years","in":"query","required":false,"schema":{"type":"integer","maximum":35,"minimum":5,"description":"Loan tenure in years","default":25,"title":"Loan Tenure Years"},"description":"Loan tenure in years"},{"name":"holding_period_years","in":"query","required":false,"schema":{"type":"integer","maximum":40,"minimum":1,"description":"How long you plan to hold the property","default":10,"title":"Holding Period Years"},"description":"How long you plan to hold the property"},{"name":"property_appreciation_pct","in":"query","required":false,"schema":{"type":"number","description":"Expected annual property price appreciation (%)","default":3.0,"title":"Property Appreciation Pct"},"description":"Expected annual property price appreciation (%)"},{"name":"rent_increases_pct","in":"query","required":false,"schema":{"type":"number","description":"Expected annual rent increase (%)","default":2.0,"title":"Rent Increases Pct"},"description":"Expected annual rent increase (%)"},{"name":"investment_return_pct","in":"query","required":false,"schema":{"type":"number","description":"If you invested the down payment instead, expected annual return (%)","default":4.0,"title":"Investment Return Pct"},"description":"If you invested the down payment instead, expected annual return (%)"},{"name":"maintenance_monthly","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Monthly maintenance/conservancy/management fees","default":300,"title":"Maintenance Monthly"},"description":"Monthly maintenance/conservancy/management fees"},{"name":"is_owner_occupied","in":"query","required":false,"schema":{"type":"boolean","description":"If owner-occupied, use lower property tax rates","default":true,"title":"Is Owner Occupied"},"description":"If owner-occupied, use lower property tax rates"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/company/{domain}":{"get":{"tags":["Company Intelligence"],"summary":"Company Intelligence","description":"Analyze any company website: tech stack, contacts, security, metadata.\n\nReturns detected technologies (CMS, frameworks, analytics, CDN, payments,\nchat, auth), contact emails, social profiles, SSL certificate info,\nand security headers in one structured response.\n\nReplaces BuiltWith + Hunter + SSL Labs in a single call.","operationId":"company_intelligence_company__domain__get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyIntelResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/news/search":{"get":{"tags":["News Search"],"summary":"Search News","description":"Search news articles by keyword or topic.\n\nAggregates from Google News and other free RSS sources.\nReturns structured JSON with title, source, URL, publish date, summary, and image.\n\nNo API key needed, no subscription. Pay per call.","operationId":"search_news_news_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"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/NewsSearchResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]}}},"/jobs/search":{"get":{"tags":["Job Search"],"summary":"Search Jobs","description":"Search job postings and hiring threads across public sources.","operationId":"search_jobs_jobs_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":120,"description":"Search query, e.g. 'AI engineer', 'sales Singapore', 'Python remote'","title":"Q"},"description":"Search query, e.g. 'AI engineer', 'sales Singapore', 'Python remote'"},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"Optional location substring filter","title":"Location"},"description":"Optional location substring filter"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Maximum normalized results to return","default":10,"title":"Limit"},"description":"Maximum normalized results to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]}}},"/reviews/app/{country}/{app_id}":{"get":{"tags":["App Reviews"],"summary":"App Reviews","description":"Fetch recent App Store reviews for an app ID and country.","operationId":"app_reviews_reviews_app__country___app_id__get","parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter App Store country code, e.g. us, sg, gb","title":"Country"},"description":"Two-letter App Store country code, e.g. us, sg, gb"},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":32,"description":"Numeric App Store app ID","title":"App Id"},"description":"Numeric App Store app ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum recent reviews to return","default":25,"title":"Limit"},"description":"Maximum recent reviews to return"},{"name":"min_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":5,"minimum":1},{"type":"null"}],"description":"Optional minimum star rating filter","title":"Min Rating"},"description":"Optional minimum star rating filter"},{"name":"max_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":5,"minimum":1},{"type":"null"}],"description":"Optional maximum star rating filter","title":"Max Rating"},"description":"Optional maximum star rating filter"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppReviewsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"402":{"description":"Payment Required"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]}}},"/social/":{"get":{"tags":["social-trends"],"summary":"Social Trend Search API info","description":"Return basic info about the social trend search endpoint.","operationId":"info_social__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/social/trend-search":{"get":{"tags":["social-trends"],"summary":"Cross-platform social trend search","description":"Search Reddit, YouTube, and Instagram in parallel for a query.\n\nReturns a normalized feed with explicit per-source health. **Failed sources\nare reported, never silently empty.** This is the difference between\n\"no results\" and \"the source is down\".\n\n**What you get per platform:**\n\n- **Reddit** — top submissions matching the query (title, selftext, score,\n  comment count, subreddit, URL, author).\n- **YouTube** — top videos (title, channel, view count, like count, comment\n  count, upload date, URL).\n- **Instagram** — top creators posting under the matching hashtag (handle,\n  follower count, caption, hashtag volume). Login-wall limited to ~10\n  items; no per-post engagement counts.\n\n**What you DON'T get (yet):**\n\n- TikTok, XHS, Douyin (pending paid API integration)\n- Comments / replies (top-level posts only)\n- Per-post engagement on Instagram\n- Time-series velocity (single snapshot only)\n\n**Use cases:**\n\n- Marketers: discover dominant creators, language, and hooks in a niche.\n- Investors: detect consumer behavior shifts before mainstream coverage.\n- Founders: validate demand and surface customer pain language.","operationId":"trend_search_social_trend_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Search query (keyword, brand, trend, hashtag).","examples":["dopamine detox"],"title":"Q"},"description":"Search query (keyword, brand, trend, hashtag)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Max items per source. Default 10, max 30.","default":10,"title":"Limit"},"description":"Max items per source. Default 10, max 30."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendSearchResponse"}}}},"422":{"description":"Validation error"}}}},"/social/health":{"get":{"tags":["social-trends"],"summary":"Health check","description":"Liveness probe for the social-trends router.","operationId":"health_social_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error"}}}},"/social/search":{"post":{"tags":["social"],"summary":"Social Search","operationId":"social_search_social_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/search/cached":{"post":{"tags":["social"],"summary":"Cached Social Search","operationId":"cached_social_search_social_search_cached_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CachedSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/tiktok/search":{"post":{"tags":["social"],"summary":"Tiktok Search","operationId":"tiktok_search_social_tiktok_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TikTokSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/reddit/feed":{"get":{"tags":["social"],"summary":"Reddit Feed","operationId":"reddit_feed_social_reddit_feed_get","parameters":[{"name":"subreddit","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":21,"pattern":"^[A-Za-z0-9_]+$","title":"Subreddit"}},{"name":"keyword","in":"query","required":false,"schema":{"type":"string","maxLength":200,"default":"","title":"Keyword"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Count"}},{"name":"time_filter","in":"query","required":false,"schema":{"type":"string","pattern":"^(|1day|week|month)$","default":"","title":"Time Filter"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(|rising|new|latest|hot)$","default":"","title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/reddit/post":{"get":{"tags":["social"],"summary":"Reddit Post","operationId":"reddit_post_social_reddit_post_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","maxLength":500,"title":"Url"}},{"name":"comment_limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":20,"title":"Comment Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/sources/health":{"get":{"tags":["social"],"summary":"Sources Health","operationId":"sources_health_social_sources_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/social/platforms":{"get":{"tags":["social"],"summary":"List Platforms","operationId":"list_platforms_social_platforms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/social/queries":{"post":{"tags":["social"],"summary":"Create Query","operationId":"create_query_social_queries_post","parameters":[{"name":"x-social-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Social-Admin-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionQueryRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["social"],"summary":"Due Queries","operationId":"due_queries_social_queries_get","parameters":[{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"At"}},{"name":"x-social-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Social-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/queries/{query_id}":{"get":{"tags":["social"],"summary":"Get Query","operationId":"get_query_social_queries__query_id__get","parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"integer","title":"Query Id"}},{"name":"x-social-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Social-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/queries/{query_id}/collect":{"post":{"tags":["social"],"summary":"Collect Query","operationId":"collect_query_social_queries__query_id__collect_post","parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"integer","title":"Query Id"}},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"At"}},{"name":"x-social-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Social-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/collect-due":{"post":{"tags":["social"],"summary":"Collect Due","operationId":"collect_due_social_collect_due_post","parameters":[{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"At"}},{"name":"x-social-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Social-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/history/{platform}/{post_id}":{"get":{"tags":["social"],"summary":"Observation History","operationId":"observation_history_social_history__platform___post_id__get","parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}},{"name":"x-social-admin-token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Social-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/youtube/search":{"get":{"tags":["social-intelligence"],"summary":"Youtube Search","description":"Search YouTube videos with engagement metrics. Fast (flat-playlist).","operationId":"youtube_search_social_youtube_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Count"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(relevance|views|latest)$","default":"relevance","title":"Sort"}},{"name":"time_filter","in":"query","required":false,"schema":{"type":"string","pattern":"^(|1day|week|month|halfyear)$","default":"","title":"Time Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/youtube/video/{video_id}":{"get":{"tags":["social-intelligence"],"summary":"Youtube Video","description":"Deep video intelligence. Full metadata: description, likes, tags, channel subs.","operationId":"youtube_video_social_youtube_video__video_id__get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/youtube/channel/{handle}":{"get":{"tags":["social-intelligence"],"summary":"Youtube Channel","description":"Channel overview: subscriber count, recent top videos by views.","operationId":"youtube_channel_social_youtube_channel__handle__get","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string","title":"Handle"}},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of recent videos","default":10,"title":"Count"},"description":"Number of recent videos"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/tiktok/trending":{"post":{"tags":["social-intelligence"],"summary":"Tiktok Trending","description":"Discover trending TikTok content by region and category.\n\nRequires proxy to be configured (BOUNTY_PROXY_SERVER env vars).\nWithout proxy, TikTok will IP-block after first request.","operationId":"tiktok_trending_social_tiktok_trending_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TikTokTrendingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/social/trends":{"post":{"tags":["social-intelligence"],"summary":"Cross Platform Trends","description":"360-degree view of a topic across platforms.\n\nSearches all requested platforms, normalizes results, and produces:\n- Top content by engagement per platform\n- Top creators/channels across platforms\n- Platform activity distribution\n- Viral outliers (unusually high engagement)\n\nThis is the killer endpoint: one call, all platforms, analyzed.","operationId":"cross_platform_trends_social_trends_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossPlatformTrendsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pricing":{"get":{"summary":"Pricing Page","operationId":"pricing_page_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/providers":{"get":{"summary":"Providers Page","operationId":"providers_page_providers_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/setup":{"get":{"summary":"Setup Page","operationId":"setup_page_setup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/manifest.json":{"get":{"summary":"Manifest","description":"Machine-readable marketplace manifest for agent discovery.","operationId":"manifest_manifest_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/pricing.json":{"get":{"summary":"Pricing Json","description":"Machine-readable pricing data for agents and crawlers.","operationId":"pricing_json_pricing_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/dashboard/api/investing/radar":{"get":{"tags":["dashboard"],"summary":"Get Investing Radar","operationId":"get_investing_radar_dashboard_api_investing_radar_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"country","in":"query","required":false,"schema":{"type":"string","default":"","title":"Country"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"","title":"Category"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/social-pulse":{"get":{"tags":["dashboard"],"summary":"Get Investing Social Pulse","description":"Read the latest persisted social-first discovery output.","operationId":"get_investing_social_pulse_dashboard_api_investing_social_pulse_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/tracker":{"get":{"tags":["dashboard"],"summary":"Get Investing Tracker","description":"Serve the private tracker from live artifacts or its packaged snapshot.","operationId":"get_investing_tracker_dashboard_api_investing_tracker_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/private-radar":{"get":{"tags":["dashboard"],"summary":"Get Private Investing Radar","description":"Read persisted trade-ready leads plus cited near-miss review decisions.","operationId":"get_private_investing_radar_dashboard_api_investing_private_radar_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/private-radar/scans":{"post":{"tags":["dashboard"],"summary":"Start Private Investing Scan","operationId":"start_private_investing_scan_dashboard_api_investing_private_radar_scans_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/private-radar/scans/{run_id}":{"get":{"tags":["dashboard"],"summary":"Get Private Investing Scan","operationId":"get_private_investing_scan_dashboard_api_investing_private_radar_scans__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/dossier-runs":{"post":{"tags":["dashboard"],"summary":"Create Investment Dossier Run","operationId":"create_investment_dossier_run_dashboard_api_investing_dossier_runs_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestmentDossierRunCreateRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["dashboard"],"summary":"List Investment Dossier Runs","operationId":"list_investment_dossier_runs_dashboard_api_investing_dossier_runs_get","parameters":[{"name":"workspace_id","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"default","title":"Workspace Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/dossier-runs/{run_id}":{"get":{"tags":["dashboard"],"summary":"Get Investment Dossier Run","operationId":"get_investment_dossier_run_dashboard_api_investing_dossier_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/dossier-runs/{run_id}/execute":{"post":{"tags":["dashboard"],"summary":"Execute Investment Dossier Run","operationId":"execute_investment_dossier_run_dashboard_api_investing_dossier_runs__run_id__execute_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/dossier-runs/{run_id}/dossier":{"get":{"tags":["dashboard"],"summary":"Get Investment Dossier For Run","operationId":"get_investment_dossier_for_run_dashboard_api_investing_dossier_runs__run_id__dossier_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/dossiers/{dossier_id}":{"get":{"tags":["dashboard"],"summary":"Get Saved Investment Dossier","operationId":"get_saved_investment_dossier_dashboard_api_investing_dossiers__dossier_id__get","parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/radar/runs/{sweep_id}":{"get":{"tags":["dashboard"],"summary":"Get Investing Radar Run","operationId":"get_investing_radar_run_dashboard_api_investing_radar_runs__sweep_id__get","parameters":[{"name":"sweep_id","in":"path","required":true,"schema":{"type":"string","title":"Sweep Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/investing/radar/candidates/{candidate_id}":{"get":{"tags":["dashboard"],"summary":"Get Investing Radar Candidate","operationId":"get_investing_radar_candidate_dashboard_api_investing_radar_candidates__candidate_id__get","parameters":[{"name":"candidate_id","in":"path","required":true,"schema":{"type":"integer","title":"Candidate Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones":{"get":{"tags":["dashboard"],"summary":"List Zones","operationId":"list_zones_dashboard_api_zones_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Zone","operationId":"create_zone_dashboard_api_zones_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones/{zone_id}":{"delete":{"tags":["dashboard"],"summary":"Delete Zone","operationId":"delete_zone_dashboard_api_zones__zone_id__delete","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"integer","title":"Zone Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones/{zone_id}/pause":{"post":{"tags":["dashboard"],"summary":"Pause Zone","operationId":"pause_zone_dashboard_api_zones__zone_id__pause_post","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"integer","title":"Zone Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones/{zone_id}/resume":{"post":{"tags":["dashboard"],"summary":"Resume Zone","operationId":"resume_zone_dashboard_api_zones__zone_id__resume_post","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"integer","title":"Zone Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones/{zone_id}/run":{"post":{"tags":["dashboard"],"summary":"Run Zone","description":"Start zone collection as a background task. Returns immediately.","operationId":"run_zone_dashboard_api_zones__zone_id__run_post","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"integer","title":"Zone Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones/{zone_id}/status":{"get":{"tags":["dashboard"],"summary":"Zone Status","description":"Get current/last run status for a zone.","operationId":"zone_status_dashboard_api_zones__zone_id__status_get","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"integer","title":"Zone Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones/{zone_id}/report":{"get":{"tags":["dashboard"],"summary":"Get Zone Report","description":"Get latest monitoring reports for a zone.","operationId":"get_zone_report_dashboard_api_zones__zone_id__report_get","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"integer","title":"Zone Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/zones/{zone_id}/diff":{"get":{"tags":["dashboard"],"summary":"Get Zone Diff","description":"Get week-over-week diff for a zone.","operationId":"get_zone_diff_dashboard_api_zones__zone_id__diff_get","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"integer","title":"Zone Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discover/options":{"get":{"tags":["dashboard"],"summary":"Discovery Options","description":"Return the validated Google Trends controls used by Explore.","operationId":"discovery_options_dashboard_api_discover_options_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discover":{"get":{"tags":["dashboard"],"summary":"Discover Keywords","description":"Run top-down keyword discovery in an explicit scan mode.\n\nPipeline:\n1. Candidate generation via Google Trends trending_now (trendspy)\n2. User filters (volume, growth, age, categories)\n3. Mode-governed check: trends_snapshot stops at Trends metadata\n   (zero broker/LLM calls); root_sweep adds root social evidence\n   with max_threads=0 and no LLM. Thread hydration and conversation\n   analysis happen only in explicit research-runs.","operationId":"discover_keywords_dashboard_api_discover_get","parameters":[{"name":"geo","in":"query","required":false,"schema":{"type":"string","default":"US","title":"Geo"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Explicit scan mode: trends_snapshot (default) or root_sweep. Deep modes run only through explicit research-runs.","title":"Mode"},"description":"Explicit scan mode: trends_snapshot (default) or root_sweep. Deep modes run only through explicit research-runs."},{"name":"gate","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Legacy social-source check flag. Maps to root_sweep; never triggers thread hydration or LLM analysis.","title":"Gate"},"description":"Legacy social-source check flag. Maps to root_sweep; never triggers thread hydration or LLM analysis."},{"name":"min_volume","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum search volume","default":0,"title":"Min Volume"},"description":"Minimum search volume"},{"name":"min_growth","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum growth %","default":0,"title":"Min Growth"},"description":"Minimum growth %"},{"name":"max_age_hours","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Only trends started within N hours","default":0,"title":"Max Age Hours"},"description":"Only trends started within N hours"},{"name":"categories","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated category names to include","default":"","title":"Categories"},"description":"Comma-separated category names to include"},{"name":"gate_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return candidates whose configured social check threshold passed","default":false,"title":"Gate Only"},"description":"Only return candidates whose configured social check threshold passed"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discover/trend-detail":{"get":{"tags":["dashboard"],"summary":"Get Trend Detail","description":"Enrich a single trend with interest-over-time timeline and related queries.\n\nReturns weekly sparkline data and rising/top related search queries from\nGoogle Trends, so users can triage trends without running a full research plan.","operationId":"get_trend_detail_dashboard_api_discover_trend_detail_get","parameters":[{"name":"keyword","in":"query","required":true,"schema":{"type":"string","description":"Trend keyword to enrich","title":"Keyword"},"description":"Trend keyword to enrich"},{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Region code","default":"US","title":"Geo"},"description":"Region code"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/research-runs":{"post":{"tags":["dashboard"],"summary":"Create Discovery Research Run","description":"Persist a deterministic plan; live collection intentionally happens elsewhere.","operationId":"create_discovery_research_run_dashboard_api_discovery_research_runs_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchRunCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["dashboard"],"summary":"List Discovery Research Runs","operationId":"list_discovery_research_runs_dashboard_api_discovery_research_runs_get","parameters":[{"name":"workspace_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/research-runs/{run_id}":{"get":{"tags":["dashboard"],"summary":"Get Discovery Research Run","operationId":"get_discovery_research_run_dashboard_api_discovery_research_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/research-runs/{run_id}/candidates":{"get":{"tags":["dashboard"],"summary":"Get Discovery Research Run Candidates","operationId":"get_discovery_research_run_candidates_dashboard_api_discovery_research_runs__run_id__candidates_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/research-runs/{run_id}/candidates/{candidate_id}/history":{"get":{"tags":["dashboard"],"summary":"Get Discovery Research Candidate Stage History","operationId":"get_discovery_research_candidate_stage_history_dashboard_api_discovery_research_runs__run_id__candidates__candidate_id__history_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","title":"Candidate Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/research-runs/{run_id}/candidates/{candidate_id}/promote":{"post":{"tags":["dashboard"],"summary":"Promote Discovery Research Candidate","operationId":"promote_discovery_research_candidate_dashboard_api_discovery_research_runs__run_id__candidates__candidate_id__promote_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string","title":"Candidate Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/research-runs/{run_id}/execute":{"post":{"tags":["dashboard"],"summary":"Execute Research Run","description":"Start a persisted research run and return immediately for status polling.","operationId":"execute_research_run_dashboard_api_discovery_research_runs__run_id__execute_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/research-runs/{run_id}/findings":{"get":{"tags":["dashboard"],"summary":"Get Research Run Findings","description":"Return persisted findings for a completed research run.","operationId":"get_research_run_findings_dashboard_api_discovery_research_runs__run_id__findings_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/candidates/{geo}/{keyword}/history":{"get":{"tags":["dashboard"],"summary":"Get Discovery Candidate History","description":"Return persisted observations and explicit gaps for one candidate.","operationId":"get_discovery_candidate_history_dashboard_api_discovery_candidates__geo___keyword__history_get","parameters":[{"name":"geo","in":"path","required":true,"schema":{"type":"string","title":"Geo"}},{"name":"keyword","in":"path","required":true,"schema":{"type":"string","title":"Keyword"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/runs/{run_id}/usage":{"get":{"tags":["dashboard"],"summary":"Get Discovery Run Usage","description":"Return persisted cost receipts and additive totals for one Discovery run.","operationId":"get_discovery_run_usage_dashboard_api_discovery_runs__run_id__usage_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/promotion/shadow/evaluate":{"post":{"tags":["dashboard"],"summary":"Evaluate Promotion Shadow","description":"Evaluate persisted evidence in shadow mode; execute no downstream action.","operationId":"evaluate_promotion_shadow_dashboard_api_promotion_shadow_evaluate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionShadowRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/promotion/funnel":{"get":{"tags":["dashboard"],"summary":"Promotion Funnel","operationId":"promotion_funnel_dashboard_api_promotion_funnel_get","parameters":[{"name":"workspace_id","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Workspace Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/explore/families":{"get":{"tags":["dashboard"],"summary":"Global Explore Families","operationId":"global_explore_families_dashboard_api_explore_families_get","parameters":[{"name":"workspace_id","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Workspace Id"}},{"name":"perspective_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Perspective Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/explore/families/{family_id}/labels":{"get":{"tags":["dashboard"],"summary":"Family Labels","operationId":"family_labels_dashboard_api_explore_families__family_id__labels_get","parameters":[{"name":"family_id","in":"path","required":true,"schema":{"type":"string","title":"Family Id"}},{"name":"workspace_id","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Workspace Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/explore/families/{family_id}/actions":{"post":{"tags":["dashboard"],"summary":"Create Family Action","operationId":"create_family_action_dashboard_api_explore_families__family_id__actions_post","parameters":[{"name":"family_id","in":"path","required":true,"schema":{"type":"string","title":"Family Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FamilyActionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/lenses/presets":{"get":{"tags":["dashboard"],"summary":"Discovery Lens Presets","description":"Return neutral and use-case views without assigning universal scores.","operationId":"discovery_lens_presets_dashboard_api_discovery_lenses_presets_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects":{"get":{"tags":["dashboard"],"summary":"List Workspace Projects","operationId":"list_workspace_projects_dashboard_api_workspaces__workspace_id__projects_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Workspace Project","operationId":"create_workspace_project_dashboard_api_workspaces__workspace_id__projects_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}":{"get":{"tags":["dashboard"],"summary":"Get Workspace Project","operationId":"get_workspace_project_dashboard_api_workspaces__workspace_id__projects__project_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["dashboard"],"summary":"Update Workspace Project","operationId":"update_workspace_project_dashboard_api_workspaces__workspace_id__projects__project_id__put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["dashboard"],"summary":"Update Workspace Project","operationId":"update_workspace_project_dashboard_api_workspaces__workspace_id__projects__project_id__patch","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboard"],"summary":"Archive Workspace Project","operationId":"archive_workspace_project_dashboard_api_workspaces__workspace_id__projects__project_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects":{"get":{"tags":["dashboard"],"summary":"List Project Subjects","operationId":"list_project_subjects_dashboard_api_workspaces__workspace_id__projects__project_id__subjects_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Inactive"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Project Subject","operationId":"create_project_subject_dashboard_api_workspaces__workspace_id__projects__project_id__subjects_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubjectCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id}":{"get":{"tags":["dashboard"],"summary":"Get Project Subject","operationId":"get_project_subject_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["dashboard"],"summary":"Update Project Subject","operationId":"update_project_subject_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubjectUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["dashboard"],"summary":"Update Project Subject","operationId":"update_project_subject_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__patch","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubjectUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboard"],"summary":"Archive Project Subject","operationId":"archive_project_subject_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id}/aliases":{"get":{"tags":["dashboard"],"summary":"List Subject Aliases","operationId":"list_subject_aliases_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__aliases_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Subject Alias","operationId":"create_subject_alias_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__aliases_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id}/aliases/{alias_id}":{"get":{"tags":["dashboard"],"summary":"Get Subject Alias","operationId":"get_subject_alias_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__aliases__alias_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"alias_id","in":"path","required":true,"schema":{"type":"string","title":"Alias Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboard"],"summary":"Delete Subject Alias","operationId":"delete_subject_alias_dashboard_api_workspaces__workspace_id__projects__project_id__subjects__subject_id__aliases__alias_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}},{"name":"alias_id","in":"path","required":true,"schema":{"type":"string","title":"Alias Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions":{"get":{"tags":["dashboard"],"summary":"List Project Actions","operationId":"list_project_actions_dashboard_api_workspaces__workspace_id__projects__project_id__actions_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"subject_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Project Action","operationId":"create_project_action_dashboard_api_workspaces__workspace_id__projects__project_id__actions_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions/{action_id}":{"get":{"tags":["dashboard"],"summary":"Get Project Action","operationId":"get_project_action_dashboard_api_workspaces__workspace_id__projects__project_id__actions__action_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"action_id","in":"path","required":true,"schema":{"type":"string","title":"Action Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboard"],"summary":"Cancel Project Action","operationId":"cancel_project_action_dashboard_api_workspaces__workspace_id__projects__project_id__actions__action_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"action_id","in":"path","required":true,"schema":{"type":"string","title":"Action Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions/{action_id}/cancel":{"post":{"tags":["dashboard"],"summary":"Cancel Project Action","operationId":"cancel_project_action_dashboard_api_workspaces__workspace_id__projects__project_id__actions__action_id__cancel_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"action_id","in":"path","required":true,"schema":{"type":"string","title":"Action Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/lenses":{"get":{"tags":["dashboard"],"summary":"List Workspace Lenses","operationId":"list_workspace_lenses_dashboard_api_workspaces__workspace_id__lenses_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Workspace Lens","operationId":"create_workspace_lens_dashboard_api_workspaces__workspace_id__lenses_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchLensCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}":{"get":{"tags":["dashboard"],"summary":"Get Workspace Lens","operationId":"get_workspace_lens_dashboard_api_workspaces__workspace_id__lenses__lens_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["dashboard"],"summary":"Create Workspace Lens Version","operationId":"create_workspace_lens_version_dashboard_api_workspaces__workspace_id__lenses__lens_id__patch","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchLensVersionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["dashboard"],"summary":"Create Workspace Lens Version","operationId":"create_workspace_lens_version_dashboard_api_workspaces__workspace_id__lenses__lens_id__put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchLensVersionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboard"],"summary":"Archive Workspace Lens","operationId":"archive_workspace_lens_dashboard_api_workspaces__workspace_id__lenses__lens_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/versions":{"get":{"tags":["dashboard"],"summary":"List Workspace Lens Versions","operationId":"list_workspace_lens_versions_dashboard_api_workspaces__workspace_id__lenses__lens_id__versions_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Workspace Lens Version","operationId":"create_workspace_lens_version_dashboard_api_workspaces__workspace_id__lenses__lens_id__versions_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchLensVersionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/versions/{version}":{"get":{"tags":["dashboard"],"summary":"Get Workspace Lens Version","operationId":"get_workspace_lens_version_dashboard_api_workspaces__workspace_id__lenses__lens_id__versions__version__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/duplicate":{"post":{"tags":["dashboard"],"summary":"Duplicate Workspace Lens","operationId":"duplicate_workspace_lens_dashboard_api_workspaces__workspace_id__lenses__lens_id__duplicate_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DuplicateLensRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/archive":{"post":{"tags":["dashboard"],"summary":"Archive Workspace Lens","operationId":"archive_workspace_lens_dashboard_api_workspaces__workspace_id__lenses__lens_id__archive_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"lens_id","in":"path","required":true,"schema":{"type":"string","title":"Lens Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/fields":{"get":{"tags":["dashboard"],"summary":"List Workspace Fields","operationId":"list_workspace_fields_dashboard_api_workspaces__workspace_id__fields_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboard"],"summary":"Create Workspace Field","operationId":"create_workspace_field_dashboard_api_workspaces__workspace_id__fields_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/fields/{field_id}":{"get":{"tags":["dashboard"],"summary":"Get Workspace Field","operationId":"get_workspace_field_dashboard_api_workspaces__workspace_id__fields__field_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"field_id","in":"path","required":true,"schema":{"type":"string","title":"Field Id"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboard"],"summary":"Archive Workspace Field","operationId":"archive_workspace_field_dashboard_api_workspaces__workspace_id__fields__field_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"field_id","in":"path","required":true,"schema":{"type":"string","title":"Field Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/workspaces/{workspace_id}/fields/{field_id}/archive":{"post":{"tags":["dashboard"],"summary":"Archive Workspace Field","operationId":"archive_workspace_field_dashboard_api_workspaces__workspace_id__fields__field_id__archive_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}},{"name":"field_id","in":"path","required":true,"schema":{"type":"string","title":"Field Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/discovery/lenses/evaluate":{"post":{"tags":["dashboard"],"summary":"Evaluate Discovery Candidate Lens","description":"Evaluate one persisted candidate under a versioned, user-defined lens.","operationId":"evaluate_discovery_candidate_lens_dashboard_api_discovery_lenses_evaluate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryLensEvaluationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/alerts":{"get":{"tags":["dashboard"],"summary":"Get Recent Alerts","description":"Get recent alerts across all zones.","operationId":"get_recent_alerts_dashboard_api_alerts_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/api/stats":{"get":{"tags":["dashboard"],"summary":"Get Stats","description":"Dashboard overview stats.","operationId":"get_stats_dashboard_api_stats_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard":{"get":{"summary":"Dashboard Page","description":"Stable Classic Bounty workbench while Investor Radar is rebuilt.","operationId":"dashboard_page_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/dashboard/classic":{"get":{"summary":"Classic Dashboard Page","description":"Preserved horizontal Bounty research workbench.","operationId":"classic_dashboard_page_dashboard_classic_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/dashboard/investing-preview":{"get":{"summary":"Investing Preview Page","description":"Private preview surface; not the default customer experience.","operationId":"investing_preview_page_dashboard_investing_preview_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/.well-known/agentcash.json":{"get":{"summary":"Agentcash Well Known","operationId":"agentcash_well_known__well_known_agentcash_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Xml","operationId":"sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"llms.txt — structured description for LLM discovery at inference time.","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"summary":"Llms Full Txt","description":"Full crawlable documentation for LLM training and inference.","operationId":"llms_full_txt_llms_full_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"ActionCreateRequest":{"properties":{"action_type":{"type":"string","title":"Action Type"},"subject_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject Id"},"actor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Id"},"target_type":{"type":"string","title":"Target Type","default":"project"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"requested_budget":{"additionalProperties":true,"type":"object","title":"Requested Budget"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["action_type"],"title":"ActionCreateRequest"},"AffordabilityRequest":{"properties":{"monthly_income":{"type":"number","exclusiveMinimum":0.0,"title":"Monthly Income","description":"Gross monthly income in SGD (all borrowers combined)"},"existing_monthly_debt":{"type":"number","minimum":0.0,"title":"Existing Monthly Debt","description":"Total monthly debt obligations (car loans, personal loans, credit card min payments, other mortgages)","default":0},"property_price":{"type":"number","exclusiveMinimum":0.0,"title":"Property Price","description":"Property purchase price in SGD"},"loan_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Loan Amount","description":"Requested loan amount. If omitted, calculated from LTV."},"interest_rate":{"type":"number","exclusiveMinimum":0.0,"title":"Interest Rate","description":"Actual interest rate (annual). HDB concessionary: 2.6%, bank: varies","default":0.026},"loan_tenure_years":{"type":"integer","maximum":35.0,"minimum":1.0,"title":"Loan Tenure Years","description":"Loan tenure in years","default":30},"borrower_age":{"type":"integer","maximum":75.0,"minimum":21.0,"title":"Borrower Age","description":"Age of youngest borrower","default":35},"loan_type":{"$ref":"#/components/schemas/LoanType","description":"Type of loan","default":"bank_private"},"housing_loan_count":{"type":"integer","minimum":1.0,"title":"Housing Loan Count","description":"Number of outstanding housing loans including this one","default":1}},"type":"object","required":["monthly_income","property_price"],"title":"AffordabilityRequest"},"AliasCreateRequest":{"properties":{"alias":{"type":"string","title":"Alias"},"kind":{"type":"string","title":"Kind","default":"include"}},"type":"object","required":["alias"],"title":"AliasCreateRequest"},"AllTownsMedianResponse":{"properties":{"generated_at":{"type":"string","title":"Generated At"},"total_towns":{"type":"integer","title":"Total Towns"},"source":{"type":"string","title":"Source","default":"https://data.gov.sg/api/action/datastore_search"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"towns":{"items":{"$ref":"#/components/schemas/TownMedianResponse"},"type":"array","title":"Towns"}},"type":"object","required":["generated_at","total_towns","towns"],"title":"AllTownsMedianResponse"},"AmortizationEntry":{"properties":{"month":{"type":"integer","title":"Month","description":"1-indexed month number."},"payment":{"type":"number","title":"Payment","description":"Total payment for the month (principal + interest)."},"principal":{"type":"number","title":"Principal","description":"Principal portion of the month's payment."},"interest":{"type":"number","title":"Interest","description":"Interest portion of the month's payment."},"balance":{"type":"number","title":"Balance","description":"Remaining loan balance after this payment."}},"type":"object","required":["month","payment","principal","interest","balance"],"title":"AmortizationEntry","description":"A single month of the amortization schedule."},"AmortizationSchedule":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/AmortizationEntry"},"type":"array","title":"Entries","description":"Schedule rows (first 12 and last 12 months, or all if the loan is short)."},"total_months":{"type":"integer","title":"Total Months","description":"Total number of months in the full loan term."},"first_months_shown":{"type":"integer","title":"First Months Shown","description":"Number of leading months included."},"last_months_shown":{"type":"integer","title":"Last Months Shown","description":"Number of trailing months included."},"truncated":{"type":"boolean","title":"Truncated","description":"True when middle months were omitted to keep the response small."}},"type":"object","required":["entries","total_months","first_months_shown","last_months_shown","truncated"],"title":"AmortizationSchedule","description":"Compact amortization schedule: first 12 + last 12 months."},"AppReview":{"properties":{"id":{"type":"string","title":"Id"},"rating":{"type":"integer","title":"Rating"},"title":{"type":"string","title":"Title"},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"content":{"type":"string","title":"Content"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"source":{"type":"string","title":"Source","default":"Apple App Store customer reviews"},"topic_flags":{"items":{"type":"string"},"type":"array","title":"Topic Flags"}},"type":"object","required":["id","rating","title","content"],"title":"AppReview"},"AppReviewsResponse":{"properties":{"country":{"type":"string","title":"Country"},"app_id":{"type":"string","title":"App Id"},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name"},"app_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Url"},"generated_at":{"type":"string","title":"Generated At"},"count":{"type":"integer","title":"Count"},"average_rating_sample":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Rating Sample"},"rating_distribution_sample":{"additionalProperties":{"type":"integer"},"type":"object","title":"Rating Distribution Sample"},"topic_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Topic Counts"},"reviews":{"items":{"$ref":"#/components/schemas/AppReview"},"type":"array","title":"Reviews"},"source":{"additionalProperties":{"type":"string"},"type":"object","title":"Source"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"}},"type":"object","required":["country","app_id","app_name","app_url","generated_at","count","average_rating_sample","rating_distribution_sample","topic_counts","reviews","source","notes"],"title":"AppReviewsResponse"},"CachedSearchRequest":{"properties":{"keyword":{"type":"string","minLength":1,"title":"Keyword"},"platforms":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Platforms"},"count":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Count","default":20},"region":{"type":"string","title":"Region","default":""},"max_age_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Max Age Minutes","default":60},"time_filter":{"type":"string","enum":["","1day","week","month","halfyear"],"title":"Time Filter","default":""},"sort":{"type":"string","enum":["","latest","hot"],"title":"Sort","default":""},"reddit":{"anyOf":[{"$ref":"#/components/schemas/RedditSearchOptions"},{"type":"null"}]}},"type":"object","required":["keyword","platforms"],"title":"CachedSearchRequest"},"CandidateProperty":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Property/project name or address"},"property_type":{"type":"string","title":"Property Type","description":"hdb, private, condo, landed","default":"hdb"},"price":{"type":"number","exclusiveMinimum":0.0,"title":"Price","description":"Asking price in local currency"},"town":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Town","description":"Town or neighborhood (e.g. 'TAMPINES', 'Orchard')"},"flat_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flat Type","description":"Flat type for HDB (e.g. '4 ROOM') or size for private (e.g. '3BR')"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code","description":"Postal code for location intelligence"},"monthly_rent":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Monthly Rent","description":"Expected monthly rent (optional, for yield analysis)"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Any user notes about this property"}},"type":"object","required":["price"],"title":"CandidateProperty"},"CollectionQueryRequest":{"properties":{"keyword":{"type":"string","minLength":1,"title":"Keyword"},"platforms":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Platforms"},"region":{"type":"string","title":"Region","default":""},"interval_minutes":{"type":"integer","minimum":1.0,"title":"Interval Minutes"},"next_run_at":{"type":"string","format":"date-time","title":"Next Run At"},"enabled":{"type":"boolean","title":"Enabled","default":true},"time_filter":{"type":"string","enum":["","1day","week","month","halfyear"],"title":"Time Filter","default":""},"sort":{"type":"string","enum":["","latest","hot"],"title":"Sort","default":""},"reddit":{"anyOf":[{"$ref":"#/components/schemas/RedditSearchOptions"},{"type":"null"}]}},"type":"object","required":["keyword","platforms","interval_minutes","next_run_at"],"title":"CollectionQueryRequest"},"CompanyIntelResult":{"properties":{"domain":{"type":"string","title":"Domain","description":"The queried domain"},"fetched_at":{"type":"string","title":"Fetched At","description":"ISO timestamp"},"url":{"type":"string","title":"Url","description":"Full URL fetched"},"redirected_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirected To","description":"Final URL after redirects"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"og_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Title"},"og_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Description"},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Image"},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favicon"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"technologies":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Technologies","description":"Detected technologies grouped by category"},"emails":{"items":{"type":"string"},"type":"array","title":"Emails","description":"Contact emails found"},"phone_numbers":{"items":{"type":"string"},"type":"array","title":"Phone Numbers","description":"Phone numbers found"},"social_links":{"additionalProperties":{"type":"string"},"type":"object","title":"Social Links","description":"Social media profile URLs"},"ssl":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Ssl","description":"SSL certificate info"},"security_headers":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"boolean"}]},"type":"object","title":"Security Headers","description":"Key security response headers"},"meta_robots":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Robots"},"generator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generator"},"charset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Charset"},"page_size_kb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Page Size Kb"},"load_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Load Time Ms"}},"type":"object","required":["domain","fetched_at","url"],"title":"CompanyIntelResult"},"CompoundingFrequency":{"type":"string","enum":["monthly","annually","quarterly","daily","continuous"],"title":"CompoundingFrequency","description":"Compounding cadence for compound interest (ignored for simple interest)."},"ContributionFrequency":{"type":"string","enum":["monthly","annual"],"title":"ContributionFrequency","description":"Cadence at which `contribution_monthly` is added to the balance."},"ConvertResponse":{"properties":{"from_currency":{"type":"string","title":"From Currency","description":"Source ISO 4217 currency code (uppercased)"},"to_currency":{"type":"string","title":"To Currency","description":"Target ISO 4217 currency code (uppercased)"},"amount":{"type":"number","title":"Amount","description":"Original amount in the source currency"},"rate":{"type":"number","title":"Rate","description":"Exchange rate used (1 unit of `from_currency` = `rate` units of `to_currency`)"},"result":{"type":"number","title":"Result","description":"Converted amount in the target currency"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date","description":"Reference date (YYYY-MM-DD) of the ECB rate, as published by Frankfurter"},"cached":{"type":"boolean","title":"Cached","description":"True if the rate was served from the in-memory cache"},"source":{"type":"string","title":"Source","description":"Upstream data source URL"}},"type":"object","required":["from_currency","to_currency","amount","rate","result","cached","source"],"title":"ConvertResponse"},"CrossPlatformTrendsRequest":{"properties":{"topic":{"type":"string","minLength":1,"title":"Topic","description":"Topic/keyword to analyze"},"platforms":{"items":{"type":"string"},"type":"array","maxItems":5,"title":"Platforms","description":"Platforms to include","default":["youtube","tiktok","reddit"]},"count_per_platform":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Count Per Platform","default":15},"time_filter":{"type":"string","enum":["","1day","week","month"],"title":"Time Filter","default":"week"},"region":{"type":"string","title":"Region","description":"Region code for TikTok","default":""}},"type":"object","required":["topic"],"title":"CrossPlatformTrendsRequest"},"CustomFieldCreateRequest":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description","default":""},"data_type":{"type":"string","title":"Data Type"},"source_stage":{"type":"string","title":"Source Stage"},"extraction_mode":{"type":"string","title":"Extraction Mode"},"definition":{"additionalProperties":true,"type":"object","title":"Definition"}},"type":"object","required":["key","label","data_type","source_stage","extraction_mode"],"title":"CustomFieldCreateRequest"},"DiscoveryLensCriterionRequest":{"properties":{"criterion_id":{"type":"string","title":"Criterion Id"},"label":{"type":"string","title":"Label"},"feature_key":{"type":"string","title":"Feature Key"},"mode":{"type":"string","title":"Mode","default":"score"},"weight":{"type":"number","title":"Weight","default":0.0},"minimum":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum"},"maximum":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maximum"},"missing_policy":{"type":"string","title":"Missing Policy","default":"keep_unknown"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["criterion_id","label","feature_key"],"title":"DiscoveryLensCriterionRequest"},"DiscoveryLensEvaluationRequest":{"properties":{"geo":{"type":"string","title":"Geo","default":"US"},"keyword":{"type":"string","title":"Keyword"},"lens_id":{"type":"string","title":"Lens Id"},"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version","default":"1"},"objective":{"type":"string","title":"Objective","default":""},"criteria":{"items":{"$ref":"#/components/schemas/DiscoveryLensCriterionRequest"},"type":"array","title":"Criteria"}},"type":"object","required":["keyword","lens_id","name","criteria"],"title":"DiscoveryLensEvaluationRequest"},"DistrictInfo":{"properties":{"district_number":{"type":"integer","maximum":28.0,"minimum":1.0,"title":"District Number","description":"Singapore postal district number (1–28)"},"district_name":{"type":"string","title":"District Name","description":"Concise name/label for the postal district"},"general_area":{"type":"string","title":"General Area","description":"Broad region the district belongs to"},"areas":{"items":{"type":"string"},"type":"array","title":"Areas","description":"Localities / area names within the postal district"},"postal_sectors":{"items":{"type":"string"},"type":"array","title":"Postal Sectors","description":"Postal sectors (2-digit) that map to this district"}},"type":"object","required":["district_number","district_name","general_area","areas","postal_sectors"],"title":"DistrictInfo"},"DistrictListResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of postal districts (always 28)"},"districts":{"items":{"$ref":"#/components/schemas/DistrictInfo"},"type":"array","title":"Districts"}},"type":"object","required":["total","districts"],"title":"DistrictListResponse"},"DuplicateLensRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"DuplicateLensRequest"},"ExpensesBreakdown":{"properties":{"property_tax":{"type":"number","title":"Property Tax","description":"Annual property tax (SGD)."},"management_fee_annual":{"type":"number","title":"Management Fee Annual","description":"Annual management fees (SGD)."},"maintenance_annual":{"type":"number","title":"Maintenance Annual","description":"Annual maintenance allowance (SGD)."},"other_annual":{"type":"number","title":"Other Annual","description":"Other annual expenses supplied by the caller (SGD)."},"total_annual_expenses":{"type":"number","title":"Total Annual Expenses","description":"Sum of all annual expenses (SGD)."}},"type":"object","required":["property_tax","management_fee_annual","maintenance_annual","other_annual","total_annual_expenses"],"title":"ExpensesBreakdown","description":"Itemised annual expense breakdown."},"FamilyActionRequest":{"properties":{"workspace_id":{"type":"string","title":"Workspace Id","default":"default"},"action_type":{"type":"string","title":"Action Type"},"route":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route"},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome"},"details":{"additionalProperties":true,"type":"object","title":"Details"}},"type":"object","required":["action_type"],"title":"FamilyActionRequest"},"FlatTypeStats":{"properties":{"type":{"type":"string","title":"Type","default":""},"median_price":{"type":"number","title":"Median Price"},"count":{"type":"integer","title":"Count"},"min_price":{"type":"number","title":"Min Price"},"max_price":{"type":"number","title":"Max Price"},"price_psf_range":{"$ref":"#/components/schemas/PricePsfRange"}},"type":"object","required":["median_price","count","min_price","max_price"],"title":"FlatTypeStats"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IncomeTaxRequest":{"properties":{"annual_income":{"type":"number","exclusiveMinimum":0.0,"title":"Annual Income","description":"Gross annual income in SGD"},"deductions":{"type":"number","minimum":0.0,"title":"Deductions","description":"Total deductions (CPF, expenses, donations, etc.)","default":0},"reliefs":{"type":"number","minimum":0.0,"title":"Reliefs","description":"Total personal reliefs (earned income, spouse, child, etc.)","default":0},"is_resident":{"type":"boolean","title":"Is Resident","description":"Tax residency status (true = resident, false = non-resident)","default":true},"employment_income_only":{"type":"boolean","title":"Employment Income Only","description":"Whether income is solely from employment (affects non-resident rate)","default":true}},"type":"object","required":["annual_income"],"title":"IncomeTaxRequest"},"InterestType":{"type":"string","enum":["simple","compound"],"title":"InterestType","description":"Whether interest accrues linearly (simple) or on prior interest (compound)."},"InvestCalcRequest":{"properties":{"principal":{"type":"number","minimum":0.0,"title":"Principal","description":"Initial amount invested (any currency). 0 is allowed for contributions-only growth.","examples":[10000.0]},"annual_rate":{"type":"number","minimum":0.0,"title":"Annual Rate","description":"Annual interest / growth rate as a percent (e.g. 7 means 7%).","examples":[7.0]},"years":{"type":"integer","minimum":1.0,"title":"Years","description":"Investment horizon in whole years.","examples":[20]},"contribution_monthly":{"type":"number","minimum":0.0,"title":"Contribution Monthly","description":"Recurring contribution amount per period. Its cadence is set by `contribution_frequency`: when monthly (default) this amount is added every month; when annual it is added once per year.","default":0.0,"examples":[500.0]},"contribution_frequency":{"$ref":"#/components/schemas/ContributionFrequency","description":"How often `contribution_monthly` is added: monthly or annual.","default":"monthly"},"interest_type":{"$ref":"#/components/schemas/InterestType","description":"simple = interest accrues linearly on deposited capital only; compound = interest is earned on previously-accrued interest.","default":"compound"},"compounding_frequency":{"$ref":"#/components/schemas/CompoundingFrequency","description":"Compounding cadence for compound interest. Ignored when `interest_type` is simple. Monthly is the default.","default":"monthly"}},"type":"object","required":["principal","annual_rate","years"],"title":"InvestCalcRequest","description":"Request body for POST /invest/calculate."},"InvestCalcResult":{"properties":{"principal":{"type":"number","title":"Principal"},"annual_rate":{"type":"number","title":"Annual Rate"},"years":{"type":"integer","title":"Years"},"contribution_monthly":{"type":"number","title":"Contribution Monthly"},"contribution_frequency":{"$ref":"#/components/schemas/ContributionFrequency"},"interest_type":{"$ref":"#/components/schemas/InterestType"},"compounding_frequency":{"$ref":"#/components/schemas/CompoundingFrequency"},"final_balance":{"type":"number","title":"Final Balance"},"total_contributed":{"type":"number","title":"Total Contributed","description":"All money deposited: principal + every recurring contribution."},"total_interest_earned":{"type":"number","title":"Total Interest Earned","description":"final_balance − total_contributed."},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier","description":"final_balance / principal. None when principal is 0."},"yearly_growth":{"items":{"$ref":"#/components/schemas/YearRow"},"type":"array","title":"Yearly Growth"},"source":{"type":"string","title":"Source"},"calculation_date":{"type":"string","title":"Calculation Date"}},"type":"object","required":["principal","annual_rate","years","contribution_monthly","contribution_frequency","interest_type","compounding_frequency","final_balance","total_contributed","total_interest_earned","yearly_growth","source","calculation_date"],"title":"InvestCalcResult","description":"Response model for the investment-growth calculation."},"InvestmentDossierRunCreateRequest":{"properties":{"workspace_id":{"type":"string","maxLength":100,"minLength":1,"title":"Workspace Id","default":"default"},"source_scan_id":{"type":"string","maxLength":100,"minLength":1,"title":"Source Scan Id"},"candidate_id":{"type":"string","maxLength":100,"minLength":1,"title":"Candidate Id"},"selection_mode":{"type":"string","pattern":"^(qualified|research_only)$","title":"Selection Mode","default":"research_only"},"company_name":{"type":"string","maxLength":240,"minLength":1,"title":"Company Name"},"ticker":{"anyOf":[{"type":"string","maxLength":24},{"type":"null"}],"title":"Ticker"},"exchange_code":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Exchange Code","default":"US"},"primary_document_urls":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"Primary Document Urls"},"transcript_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Transcript Url"},"assumptions":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Assumptions"},"idempotency_key":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["source_scan_id","candidate_id","company_name"],"title":"InvestmentDossierRunCreateRequest"},"JobResult":{"properties":{"title":{"type":"string","title":"Title"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"salary_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Min"},"salary_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Salary Max"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"posted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posted At"},"url":{"type":"string","title":"Url"},"source":{"type":"string","title":"Source"},"source_terms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Terms"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excerpt"}},"type":"object","required":["title","url","source"],"title":"JobResult"},"JobsSearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"limit":{"type":"integer","title":"Limit"},"count":{"type":"integer","title":"Count"},"generated_at":{"type":"string","title":"Generated At"},"results":{"items":{"$ref":"#/components/schemas/JobResult"},"type":"array","title":"Results"},"sources":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Sources"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"}},"type":"object","required":["query","location","limit","count","generated_at","results","sources","notes"],"title":"JobsSearchResponse"},"LoanType":{"type":"string","enum":["hdb","bank_hdb","bank_private"],"title":"LoanType"},"MortgageCalcRequest":{"properties":{"principal":{"type":"number","exclusiveMinimum":0.0,"title":"Principal","description":"Property purchase price / loan base amount, before any down payment is subtracted. Must be greater than 0. In any currency.","examples":[800000.0]},"annual_interest_rate":{"type":"number","minimum":0.0,"title":"Annual Interest Rate","description":"Nominal annual interest rate as a percent (e.g. 4.5 means 4.5%). Must be >= 0; use 0 for an interest-free loan.","examples":[4.5]},"loan_term_years":{"type":"integer","maximum":100.0,"exclusiveMinimum":0.0,"title":"Loan Term Years","description":"Loan term in whole years. Must be between 1 and 100.","examples":[30]},"down_payment":{"type":"number","minimum":0.0,"title":"Down Payment","description":"Optional up-front down payment to subtract from the principal. Must be >= 0 and strictly less than `principal`. Defaults to 0 (full principal is financed).","default":0.0,"examples":[200000.0]}},"type":"object","required":["principal","annual_interest_rate","loan_term_years"],"title":"MortgageCalcRequest","description":"Request body for POST /mortgage/calculate."},"MortgageCalcResult":{"properties":{"principal":{"type":"number","title":"Principal"},"down_payment":{"type":"number","title":"Down Payment"},"loan_amount":{"type":"number","title":"Loan Amount"},"annual_interest_rate":{"type":"number","title":"Annual Interest Rate"},"loan_term_years":{"type":"integer","title":"Loan Term Years"},"monthly_interest_rate":{"type":"number","title":"Monthly Interest Rate"},"total_months":{"type":"integer","title":"Total Months"},"monthly_payment":{"type":"number","title":"Monthly Payment"},"total_interest":{"type":"number","title":"Total Interest"},"total_paid":{"type":"number","title":"Total Paid"},"amortization_schedule":{"$ref":"#/components/schemas/AmortizationSchedule"},"source":{"type":"string","title":"Source"},"calculation_date":{"type":"string","title":"Calculation Date"}},"type":"object","required":["principal","down_payment","loan_amount","annual_interest_rate","loan_term_years","monthly_interest_rate","total_months","monthly_payment","total_interest","total_paid","amortization_schedule","source","calculation_date"],"title":"MortgageCalcResult","description":"Response model for the mortgage calculation."},"NewsArticle":{"properties":{"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"source":{"type":"string","title":"Source","description":"Publication name"},"published":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published","description":"ISO timestamp or raw date string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"}},"type":"object","required":["title","link","source"],"title":"NewsArticle"},"NewsSearchResult":{"properties":{"query":{"type":"string","title":"Query"},"fetched_at":{"type":"string","title":"Fetched At"},"total_results":{"type":"integer","title":"Total Results"},"articles":{"items":{"$ref":"#/components/schemas/NewsArticle"},"type":"array","title":"Articles"}},"type":"object","required":["query","fetched_at","total_results","articles"],"title":"NewsSearchResult"},"PitchRequest":{"properties":{"property_type":{"type":"string","title":"Property Type","description":"hdb, private, condo, landed","default":"hdb"},"property_price":{"type":"number","exclusiveMinimum":0.0,"title":"Property Price","description":"Asking price in SGD"},"town":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Town","description":"HDB town (e.g. 'TAMPINES') or area name"},"flat_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flat Type","description":"HDB flat type (e.g. '4 ROOM') or unit type (e.g. '3BR')"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name","description":"Condo/project name (for private property)"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code","description":"Postal code for location intelligence"},"sqft":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Sqft","description":"Floor area in square feet"},"monthly_rent":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Monthly Rent","description":"Expected monthly rent (optional)"},"tenure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenure","description":"Freehold, 99-year, 999-year, etc."},"top_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Top Year","description":"Year of Temporary Occupation Permit (TOP)"},"buyer_profile":{"$ref":"#/components/schemas/apis__property_pitch__BuyerProfile","description":"SC, SPR, FR, entity","default":"SC"},"property_count":{"type":"integer","minimum":1.0,"title":"Property Count","description":"Number of properties owned including this one","default":1},"monthly_income":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Monthly Income","description":"Gross monthly income"},"existing_monthly_debt":{"type":"number","minimum":0.0,"title":"Existing Monthly Debt","description":"Existing monthly debt","default":0},"buyer_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Notes","description":"Any specific concerns or goals the buyer has"}},"type":"object","required":["property_price"],"title":"PitchRequest","description":"Request body for POST /property/pitch."},"PostalCodeResult":{"properties":{"postal_code":{"type":"string","title":"Postal Code","description":"The 6-digit Singapore postal code queried"},"sector":{"type":"string","title":"Sector","description":"Postal sector — first two digits of the postal code"},"district_number":{"type":"integer","maximum":28.0,"minimum":1.0,"title":"District Number","description":"Singapore postal district (1–28)"},"district_name":{"type":"string","title":"District Name","description":"Concise name/label for the postal district"},"general_area":{"type":"string","title":"General Area","description":"Broad region the district belongs to (e.g. Core Central (CCR))"},"areas":{"items":{"type":"string"},"type":"array","title":"Areas","description":"Localities / area names within the postal district"}},"type":"object","required":["postal_code","sector","district_number","district_name","general_area","areas"],"title":"PostalCodeResult"},"PostalSectorInfo":{"properties":{"total_sectors":{"type":"integer","title":"Total Sectors"},"sectors":{"additionalProperties":{"type":"integer"},"type":"object","title":"Sectors","description":"Mapping of 2-digit postal sector → district number"}},"type":"object","required":["total_sectors","sectors"],"title":"PostalSectorInfo","description":"Helper view: every postal sector and the district it maps to."},"PricePsfRange":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"},"median":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median"}},"type":"object","title":"PricePsfRange"},"ProjectCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"default_geo":{"type":"string","title":"Default Geo","default":""},"first_subject":{"anyOf":[{"$ref":"#/components/schemas/SubjectCreateRequest"},{"type":"null"}]}},"type":"object","required":["name"],"title":"ProjectCreateRequest"},"ProjectUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_geo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Geo"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"ProjectUpdateRequest"},"PromotionShadowRequest":{"properties":{"workspace_id":{"type":"string","title":"Workspace Id","default":"default"},"evidence":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Evidence"},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policy"}},"type":"object","required":["evidence"],"title":"PromotionShadowRequest"},"PropertyAnalysisRequest":{"properties":{"region":{"$ref":"#/components/schemas/Region","description":"Region/country code. SG supported now; HK/AE/AU/JP planned.","default":"SG"},"property_type":{"$ref":"#/components/schemas/apis__property_analysis__PropertyType","description":"HDB or private property","default":"hdb"},"property_price":{"type":"number","exclusiveMinimum":0.0,"title":"Property Price","description":"Property price / asking price in SGD"},"town":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Town","description":"HDB town (e.g. 'TAMPINES'). Required for HDB."},"flat_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flat Type","description":"HDB flat type (e.g. '4 ROOM')"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code","description":"Postal code for location intelligence"},"monthly_rent":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Monthly Rent","description":"Expected monthly rent in SGD"},"buyer_profile":{"$ref":"#/components/schemas/apis__property_analysis__BuyerProfile","description":"Buyer profile for stamp duty","default":"SC"},"property_count":{"type":"integer","minimum":1.0,"title":"Property Count","description":"Number of properties owned including this one","default":1},"monthly_income":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Monthly Income","description":"Gross monthly income for affordability check"},"existing_monthly_debt":{"type":"number","minimum":0.0,"title":"Existing Monthly Debt","description":"Existing monthly debt obligations","default":0},"loan_tenure_years":{"type":"integer","maximum":35.0,"minimum":1.0,"title":"Loan Tenure Years","default":30},"borrower_age":{"type":"integer","maximum":75.0,"minimum":21.0,"title":"Borrower Age","default":35}},"type":"object","required":["property_price"],"title":"PropertyAnalysisRequest"},"RankRequest":{"properties":{"region":{"$ref":"#/components/schemas/Region","description":"Region/country code. SG supported now. HK, AE, AU, JP coming.","default":"SG"},"candidates":{"items":{"$ref":"#/components/schemas/CandidateProperty"},"type":"array","maxItems":50,"minItems":1,"title":"Candidates","description":"Candidate properties to evaluate and rank"},"buyer_profile":{"type":"string","title":"Buyer Profile","description":"Buyer profile: SC, SPR, FR, entity","default":"SC"},"property_count":{"type":"integer","minimum":1.0,"title":"Property Count","description":"Number of properties owned including this one","default":1},"monthly_income":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Monthly Income","description":"Gross monthly income for affordability analysis"},"existing_monthly_debt":{"type":"number","minimum":0.0,"title":"Existing Monthly Debt","description":"Existing monthly debt obligations","default":0},"weights":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Weights","description":"Custom scoring weights. Keys: value, yield, affordability, location. All should sum to 1.0."}},"type":"object","required":["candidates"],"title":"RankRequest"},"RatesResponse":{"properties":{"base":{"type":"string","title":"Base","description":"Base ISO 4217 currency code"},"date":{"type":"string","title":"Date","description":"Reference date (YYYY-MM-DD) of the published rates"},"rates":{"additionalProperties":{"type":"number"},"type":"object","title":"Rates","description":"Mapping of target currency code -> rate relative to the base"},"cached":{"type":"boolean","title":"Cached","description":"True if the rates were served from the in-memory cache"},"source":{"type":"string","title":"Source","description":"Upstream data source URL"}},"type":"object","required":["base","date","rates","cached","source"],"title":"RatesResponse"},"RedditSearchOptions":{"properties":{"subreddits":{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":1,"title":"Subreddits"}},"additionalProperties":false,"type":"object","required":["subreddits"],"title":"RedditSearchOptions"},"Region":{"type":"string","enum":["SG","HK","AE","AU","JP"],"title":"Region"},"RentalCalcRequest":{"properties":{"property_price":{"type":"number","exclusiveMinimum":0.0,"title":"Property Price","description":"Property purchase price in SGD. Must be greater than 0.","examples":[1200000.0]},"monthly_rent":{"type":"number","minimum":0.0,"title":"Monthly Rent","description":"Gross monthly rental income in SGD. Must be >= 0.","examples":[4200.0]},"annual_expenses":{"type":"number","minimum":0.0,"title":"Annual Expenses","description":"Other annual operating expenses (insurance, etc.) in SGD.","default":0.0,"examples":[1200.0]},"property_tax_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Property Tax Rate","description":"Property tax applied as a fraction of gross annual rental. Singapore property tax is tiered in reality; 0.04 is a simplified flat default.","default":0.04,"examples":[0.04]},"management_fee_monthly":{"type":"number","minimum":0.0,"title":"Management Fee Monthly","description":"Monthly property-management / letting-agent fee in SGD.","default":0.0,"examples":[350.0]},"maintenance_monthly":{"type":"number","minimum":0.0,"title":"Maintenance Monthly","description":"Average monthly maintenance / repair allowance in SGD.","default":0.0,"examples":[150.0]}},"type":"object","required":["property_price","monthly_rent"],"title":"RentalCalcRequest","description":"Request body for POST /rental-yield/calculate."},"RentalCalcResult":{"properties":{"property_price":{"type":"number","title":"Property Price"},"monthly_rent":{"type":"number","title":"Monthly Rent"},"gross_annual_rent":{"type":"number","title":"Gross Annual Rent"},"net_annual_rent":{"type":"number","title":"Net Annual Rent"},"gross_yield_percent":{"type":"number","title":"Gross Yield Percent"},"net_yield_percent":{"type":"number","title":"Net Yield Percent"},"cap_rate":{"type":"number","title":"Cap Rate"},"monthly_cashflow":{"type":"number","title":"Monthly Cashflow"},"annual_cashflow":{"type":"number","title":"Annual Cashflow"},"expenses_breakdown":{"$ref":"#/components/schemas/ExpensesBreakdown"},"price_to_rent_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price To Rent Ratio","description":"property_price / gross_annual_rent. None when gross rent is 0."},"years_to_break_even":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Years To Break Even","description":"property_price / net_annual_rent. None when net rent <= 0."},"source":{"type":"string","title":"Source"},"calculation_date":{"type":"string","title":"Calculation Date"}},"type":"object","required":["property_price","monthly_rent","gross_annual_rent","net_annual_rent","gross_yield_percent","net_yield_percent","cap_rate","monthly_cashflow","annual_cashflow","expenses_breakdown","source","calculation_date"],"title":"RentalCalcResult","description":"Response model for the rental-yield calculation."},"ResearchLensCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"spec":{"additionalProperties":true,"type":"object","title":"Spec"}},"type":"object","required":["name","spec"],"title":"ResearchLensCreateRequest"},"ResearchLensVersionRequest":{"properties":{"spec":{"additionalProperties":true,"type":"object","title":"Spec"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["spec"],"title":"ResearchLensVersionRequest"},"ResearchRunCreateRequest":{"properties":{"workspace_id":{"type":"string","title":"Workspace Id"},"name":{"type":"string","maxLength":160,"minLength":1,"title":"Name"},"lens_preset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lens Preset Id"},"source_discovery_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Discovery Run Id"},"candidates":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":5,"minItems":1,"title":"Candidates"},"budget":{"additionalProperties":true,"type":"object","title":"Budget"},"required_depth":{"type":"string","title":"Required Depth","default":"candidate"},"lens_required_depth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lens Required Depth"},"lens":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Lens"},"priority_metrics":{"items":{"type":"string"},"type":"array","title":"Priority Metrics"}},"type":"object","required":["workspace_id","name","candidates"],"title":"ResearchRunCreateRequest"},"SearchRequest":{"properties":{"keyword":{"type":"string","minLength":1,"title":"Keyword","description":"Search query"},"platforms":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Platforms","description":"Platforms to search"},"count":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Count","description":"Items per platform","default":20},"time_filter":{"type":"string","enum":["","1day","week","month","halfyear"],"title":"Time Filter","default":""},"sort":{"type":"string","enum":["","latest","hot"],"title":"Sort","default":""},"region":{"type":"string","title":"Region","description":"Region code, e.g. US, CN, SG","default":""},"reddit":{"anyOf":[{"$ref":"#/components/schemas/RedditSearchOptions"},{"type":"null"}]}},"type":"object","required":["keyword"],"title":"SearchRequest"},"SearchResponse":{"properties":{"count":{"type":"integer","title":"Count"},"limit":{"type":"integer","title":"Limit"},"filters_applied":{"additionalProperties":true,"type":"object","title":"Filters Applied"},"transactions":{"items":{"$ref":"#/components/schemas/Transaction"},"type":"array","title":"Transactions"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["count","limit","filters_applied","transactions"],"title":"SearchResponse"},"StampDutyRequest":{"properties":{"price":{"type":"number","exclusiveMinimum":0.0,"title":"Price","description":"Property purchase price or market value in SGD (whichever is higher)"},"property_type":{"$ref":"#/components/schemas/app__PropertyType","description":"Residential or non-residential","default":"residential"},"buyer_profile":{"$ref":"#/components/schemas/app__BuyerProfile","description":"Buyer profile for ABSD calculation","default":"SC"},"property_count":{"type":"integer","minimum":1.0,"title":"Property Count","description":"Number of residential properties owned including this one","default":1}},"type":"object","required":["price"],"title":"StampDutyRequest"},"StampDutyResult":{"properties":{"price":{"type":"number","title":"Price"},"property_type":{"type":"string","title":"Property Type"},"buyer_profile":{"type":"string","title":"Buyer Profile"},"property_count":{"type":"integer","title":"Property Count"},"bsd":{"type":"integer","title":"Bsd"},"bsd_breakdown":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Bsd Breakdown"},"absd":{"type":"integer","title":"Absd"},"absd_rate_percent":{"type":"number","title":"Absd Rate Percent"},"absd_applicable":{"type":"boolean","title":"Absd Applicable"},"total_stamp_duty":{"type":"integer","title":"Total Stamp Duty"},"effective_rate_percent":{"type":"number","title":"Effective Rate Percent"},"calculation_date":{"type":"string","title":"Calculation Date"},"source":{"type":"string","title":"Source"}},"type":"object","required":["price","property_type","buyer_profile","property_count","bsd","bsd_breakdown","absd","absd_rate_percent","absd_applicable","total_stamp_duty","effective_rate_percent","calculation_date","source"],"title":"StampDutyResult"},"SubjectCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"geo":{"type":"string","title":"Geo","default":""},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms"},"cadence_minutes":{"type":"integer","title":"Cadence Minutes","default":10080},"active":{"type":"boolean","title":"Active","default":true},"lens_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lens Id"},"lens_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lens Version"},"budget":{"additionalProperties":true,"type":"object","title":"Budget"}},"type":"object","required":["name"],"title":"SubjectCreateRequest"},"SubjectUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"geo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo"},"platforms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Platforms"},"cadence_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cadence Minutes"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"},"lens_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lens Id"},"lens_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lens Version"},"budget":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Budget"}},"type":"object","title":"SubjectUpdateRequest"},"SupportedResponse":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of supported currencies"},"currencies":{"additionalProperties":{"type":"string"},"type":"object","title":"Currencies","description":"Mapping of currency code -> human-readable name"},"cached":{"type":"boolean","title":"Cached","description":"True if the list was served from the in-memory cache"},"source":{"type":"string","title":"Source","description":"Upstream data source URL"}},"type":"object","required":["count","currencies","cached","source"],"title":"SupportedResponse"},"TikTokSearchRequest":{"properties":{"keyword":{"type":"string","minLength":1,"title":"Keyword"},"count":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Count","default":12},"sort":{"type":"string","title":"Sort","default":""},"time_filter":{"type":"string","title":"Time Filter","default":""}},"type":"object","required":["keyword"],"title":"TikTokSearchRequest"},"TikTokTrendingRequest":{"properties":{"keyword":{"type":"string","title":"Keyword","description":"Optional category/niche filter","default":""},"region":{"type":"string","title":"Region","description":"Region code (US, SG, ID, etc.)","default":"US"},"count":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Count","default":12},"sort":{"type":"string","enum":["hot","latest"],"title":"Sort","default":"hot"},"time_filter":{"type":"string","enum":["","1day","week","month"],"title":"Time Filter","default":""}},"type":"object","title":"TikTokTrendingRequest"},"TownInfo":{"properties":{"town":{"type":"string","title":"Town"},"transaction_count":{"type":"integer","title":"Transaction Count"}},"type":"object","required":["town","transaction_count"],"title":"TownInfo"},"TownMedianResponse":{"properties":{"town":{"type":"string","title":"Town"},"flat_types":{"items":{"$ref":"#/components/schemas/FlatTypeStats"},"type":"array","title":"Flat Types"}},"type":"object","required":["town","flat_types"],"title":"TownMedianResponse"},"TownsResponse":{"properties":{"total_towns":{"type":"integer","title":"Total Towns"},"total_transactions":{"type":"integer","title":"Total Transactions"},"generated_at":{"type":"string","title":"Generated At"},"source":{"type":"string","title":"Source","default":"https://data.gov.sg/api/action/datastore_search"},"resource_id":{"type":"string","title":"Resource Id"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"towns":{"items":{"$ref":"#/components/schemas/TownInfo"},"type":"array","title":"Towns"}},"type":"object","required":["total_towns","total_transactions","generated_at","resource_id","towns"],"title":"TownsResponse"},"Transaction":{"properties":{"month":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Month"},"town":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Town"},"flat_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flat Type"},"block":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block"},"street_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name"},"storey_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storey Range"},"floor_area_sqm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Floor Area Sqm"},"flat_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flat Model"},"lease_commence_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lease Commence Date"},"remaining_lease":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remaining Lease"},"resale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Resale Price"}},"type":"object","title":"Transaction"},"TrendSearchResponse":{"properties":{"query":{"type":"string","title":"Query","description":"The search query."},"fetched_at":{"type":"string","title":"Fetched At","description":"ISO timestamp of the fetch."},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"Aggregate counts: sources_total, sources_ok, sources_partial, sources_failed, content_items."},"sources":{"additionalProperties":true,"type":"object","title":"Sources","description":"Per-source result keyed by source name. Each value has: status, method, count, items[], error, meta. status is one of ok|partial|error. Missing data is reported explicitly, never silently empty."},"notes":{"items":{"type":"string"},"type":"array","title":"Notes","description":"Honest caveats: which sources are login-wall limited, which failed, what data is NOT included."}},"type":"object","required":["query","fetched_at","summary","sources"],"title":"TrendSearchResponse","description":"Normalized multi-platform social trend response."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"YearRow":{"properties":{"year":{"type":"integer","title":"Year","description":"Year number (1-based)."},"balance":{"type":"number","title":"Balance","description":"Balance at the end of the year."},"contributions_so_far":{"type":"number","title":"Contributions So Far","description":"Total money deposited up to and including this year (principal + recurring contributions)."},"interest_earned":{"type":"number","title":"Interest Earned","description":"Cumulative interest earned as of the end of this year (= balance − contributions_so_far)."}},"type":"object","required":["year","balance","contributions_so_far","interest_earned"],"title":"YearRow","description":"One row of the yearly growth table."},"ZoneCreate":{"properties":{"name":{"type":"string","title":"Name"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms","default":["youtube","reddit","tiktok","x","instagram"]},"interval_hours":{"type":"integer","title":"Interval Hours","default":168},"region":{"type":"string","title":"Region","default":""},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["name","keywords"],"title":"ZoneCreate"},"apis__property_analysis__BuyerProfile":{"type":"string","enum":["SC","SPR","FR","entity"],"title":"BuyerProfile"},"apis__property_analysis__PropertyType":{"type":"string","enum":["hdb","private"],"title":"PropertyType"},"apis__property_pitch__BuyerProfile":{"type":"string","enum":["SC","SPR","FR","entity"],"title":"BuyerProfile"},"app__BuyerProfile":{"type":"string","enum":["SC","SPR","FR","entity","developer","trustee"],"title":"BuyerProfile"},"app__PropertyType":{"type":"string","enum":["residential","non-residential"],"title":"PropertyType"}}},"x-discovery":{"ownershipProofs":[]}}