Every API here is available over the APIs.io API and to AI agents over MCP.
{"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: pri
# --- truncated at 32 KB (199 KB total) ---
# Full source: https://artifacts.apis.io/bountyapi-com/openapi/_original/bountyapi-com-api-openapi.json