Bounty API API

Pay-per-call data APIs for AI agents: company intelligence, news, jobs, app reviews, and Singapore property workflows.

Operations 181

GET /favicon.ico Favicon Ico #
GET /site.webmanifest Webmanifest #
GET / Landing Page #
GET /apis/{slug} Api Catalog Page #
GET /api Root #
POST /stamp-duty Calculate Stamp Duty #
GET /bsd Calculate Bsd Get #
GET /absd Calculate Absd Get #
GET /health Health #
GET /ping Mcp Ping #
GET /ping/stats Mcp Ping Stats #
GET /x402-status X402 Status #
GET /postal/districts List all 28 Singapore postal districts #
GET /postal/sectors Map every postal sector to its district #
GET /postal/district/{district_number} Get details for a specific postal district (1–28) #
GET /postal/{postal_code} Resolve a postal code to its postal district #
GET /rental-yield/ Rental Yield API info #
POST /rental-yield/calculate Calculate Singapore rental investment metrics #
GET /rental-yield/health Health check #
GET /hdb/towns List all HDB towns with transaction counts #
GET /hdb/median Median resale price by flat type for ALL towns #
GET /hdb/median/{town} Median resale price by flat type for a given town #
GET /hdb/search Search HDB resale transactions #
GET /hdb/ HDB resale API metadata #
GET /invest/ Investment growth calculator info #
POST /invest/calculate Calculate compound/simple investment growth #
GET /invest/health Health check #
GET /currency/convert Convert an amount between two currencies #
GET /currency/rates Latest exchange rates for a base currency #
GET /currency/supported List all supported currencies #
GET /currency/ Currency API metadata #
GET /mortgage/ Mortgage Calculator API info #
POST /mortgage/calculate Calculate fixed-rate mortgage payment and amortization #
GET /mortgage/health Health check #
POST /affordability/calculate Calculate Affordability #
GET /affordability/quick Quick Affordability #
GET /address/{postal_code} Address Intelligence #
GET /mrt/search Search Mrt #
GET /mrt/near/{postal_code} Mrt Near Postal #
GET /mrt/stations List All Stations #
POST /property/analyze Analyze Property #
POST /property/rank Rank Properties #
POST /property/pitch Property Pitch #
GET /tax/income Income Tax Get #
POST /tax/income Income Tax Post #
GET /gst Gst Calculator #
GET /commission Commission Calculator #
GET /cpf/housing Cpf Housing Eligibility #
GET /salary/search Salary Search #
GET /schools/near/{postal_code} Schools Near Postal #
GET /schools/list List Schools #
GET /hdb/eip/{town} Eip Check Town #
GET /hdb/lease-decay Lease Decay Analysis #
GET /ura/status Ura Status #
GET /ura/transactions Ura Transactions #
GET /ura/rental-median Ura Rental Median #
GET /ura/developer-sales Ura Developer Sales #
GET /ura/pipeline Ura Pipeline #
GET /ura/rental-contracts Ura Rental Contracts #
GET /property-tax Property Tax #
GET /buy-vs-rent Buy Vs Rent #
GET /company/{domain} Company Intelligence #
GET /news/search Search News #
GET /jobs/search Search Jobs #
GET /reviews/app/{country}/{app_id} App Reviews #
GET /social/ Social Trend Search API info #
GET /social/trend-search Cross-platform social trend search #
GET /social/health Health check #
POST /social/search Social Search #
POST /social/search/cached Cached Social Search #
POST /social/tiktok/search Tiktok Search #
GET /social/reddit/feed Reddit Feed #
GET /social/reddit/post Reddit Post #
GET /social/sources/health Sources Health #
GET /social/platforms List Platforms #
POST /social/queries Create Query #
GET /social/queries Due Queries #
GET /social/queries/{query_id} Get Query #
POST /social/queries/{query_id}/collect Collect Query #
POST /social/collect-due Collect Due #
GET /social/history/{platform}/{post_id} Observation History #
GET /social/youtube/search Youtube Search #
GET /social/youtube/video/{video_id} Youtube Video #
GET /social/youtube/channel/{handle} Youtube Channel #
POST /social/tiktok/trending Tiktok Trending #
POST /social/trends Cross Platform Trends #
GET /pricing Pricing Page #
GET /providers Providers Page #
GET /setup Setup Page #
GET /manifest.json Manifest #
GET /pricing.json Pricing Json #
GET /dashboard/api/investing/radar Get Investing Radar #
GET /dashboard/api/investing/social-pulse Get Investing Social Pulse #
GET /dashboard/api/investing/tracker Get Investing Tracker #
GET /dashboard/api/investing/private-radar Get Private Investing Radar #
POST /dashboard/api/investing/private-radar/scans Start Private Investing Scan #
GET /dashboard/api/investing/private-radar/scans/{run_id} Get Private Investing Scan #
POST /dashboard/api/investing/dossier-runs Create Investment Dossier Run #
GET /dashboard/api/investing/dossier-runs List Investment Dossier Runs #
GET /dashboard/api/investing/dossier-runs/{run_id} Get Investment Dossier Run #
POST /dashboard/api/investing/dossier-runs/{run_id}/execute Execute Investment Dossier Run #
GET /dashboard/api/investing/dossier-runs/{run_id}/dossier Get Investment Dossier For Run #
GET /dashboard/api/investing/dossiers/{dossier_id} Get Saved Investment Dossier #
GET /dashboard/api/investing/radar/runs/{sweep_id} Get Investing Radar Run #
GET /dashboard/api/investing/radar/candidates/{candidate_id} Get Investing Radar Candidate #
GET /dashboard/api/zones List Zones #
POST /dashboard/api/zones Create Zone #
DELETE /dashboard/api/zones/{zone_id} Delete Zone #
POST /dashboard/api/zones/{zone_id}/pause Pause Zone #
POST /dashboard/api/zones/{zone_id}/resume Resume Zone #
POST /dashboard/api/zones/{zone_id}/run Run Zone #
GET /dashboard/api/zones/{zone_id}/status Zone Status #
GET /dashboard/api/zones/{zone_id}/report Get Zone Report #
GET /dashboard/api/zones/{zone_id}/diff Get Zone Diff #
GET /dashboard/api/discover/options Discovery Options #
GET /dashboard/api/discover Discover Keywords #
GET /dashboard/api/discover/trend-detail Get Trend Detail #
POST /dashboard/api/discovery/research-runs Create Discovery Research Run #
GET /dashboard/api/discovery/research-runs List Discovery Research Runs #
GET /dashboard/api/discovery/research-runs/{run_id} Get Discovery Research Run #
GET /dashboard/api/discovery/research-runs/{run_id}/candidates Get Discovery Research Run Candidates #
GET /dashboard/api/discovery/research-runs/{run_id}/candidates/{candidate_id}/history Get Discovery Research Candidate Stage History #
POST /dashboard/api/discovery/research-runs/{run_id}/candidates/{candidate_id}/promote Promote Discovery Research Candidate #
POST /dashboard/api/discovery/research-runs/{run_id}/execute Execute Research Run #
GET /dashboard/api/discovery/research-runs/{run_id}/findings Get Research Run Findings #
GET /dashboard/api/discovery/candidates/{geo}/{keyword}/history Get Discovery Candidate History #
GET /dashboard/api/discovery/runs/{run_id}/usage Get Discovery Run Usage #
POST /dashboard/api/promotion/shadow/evaluate Evaluate Promotion Shadow #
GET /dashboard/api/promotion/funnel Promotion Funnel #
GET /dashboard/api/explore/families Global Explore Families #
GET /dashboard/api/explore/families/{family_id}/labels Family Labels #
POST /dashboard/api/explore/families/{family_id}/actions Create Family Action #
GET /dashboard/api/discovery/lenses/presets Discovery Lens Presets #
GET /dashboard/api/workspaces/{workspace_id}/projects List Workspace Projects #
POST /dashboard/api/workspaces/{workspace_id}/projects Create Workspace Project #
GET /dashboard/api/workspaces/{workspace_id}/projects/{project_id} Get Workspace Project #
PUT /dashboard/api/workspaces/{workspace_id}/projects/{project_id} Update Workspace Project #
PATCH /dashboard/api/workspaces/{workspace_id}/projects/{project_id} Update Workspace Project #
DELETE /dashboard/api/workspaces/{workspace_id}/projects/{project_id} Archive Workspace Project #
GET /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects List Project Subjects #
POST /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects Create Project Subject #
GET /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id} Get Project Subject #
PUT /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id} Update Project Subject #
PATCH /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id} Update Project Subject #
DELETE /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id} Archive Project Subject #
GET /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id}/aliases List Subject Aliases #
POST /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id}/aliases Create Subject Alias #
GET /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id}/aliases/{alias_id} Get Subject Alias #
DELETE /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/subjects/{subject_id}/aliases/{alias_id} Delete Subject Alias #
GET /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions List Project Actions #
POST /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions Create Project Action #
GET /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions/{action_id} Get Project Action #
DELETE /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions/{action_id} Cancel Project Action #
POST /dashboard/api/workspaces/{workspace_id}/projects/{project_id}/actions/{action_id}/cancel Cancel Project Action #
GET /dashboard/api/workspaces/{workspace_id}/lenses List Workspace Lenses #
POST /dashboard/api/workspaces/{workspace_id}/lenses Create Workspace Lens #
GET /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id} Get Workspace Lens #
PATCH /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id} Create Workspace Lens Version #
PUT /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id} Create Workspace Lens Version #
DELETE /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id} Archive Workspace Lens #
GET /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/versions List Workspace Lens Versions #
POST /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/versions Create Workspace Lens Version #
GET /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/versions/{version} Get Workspace Lens Version #
POST /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/duplicate Duplicate Workspace Lens #
POST /dashboard/api/workspaces/{workspace_id}/lenses/{lens_id}/archive Archive Workspace Lens #
GET /dashboard/api/workspaces/{workspace_id}/fields List Workspace Fields #
POST /dashboard/api/workspaces/{workspace_id}/fields Create Workspace Field #
GET /dashboard/api/workspaces/{workspace_id}/fields/{field_id} Get Workspace Field #
DELETE /dashboard/api/workspaces/{workspace_id}/fields/{field_id} Archive Workspace Field #
POST /dashboard/api/workspaces/{workspace_id}/fields/{field_id}/archive Archive Workspace Field #
POST /dashboard/api/discovery/lenses/evaluate Evaluate Discovery Candidate Lens #
GET /dashboard/api/alerts Get Recent Alerts #
GET /dashboard/api/stats Get Stats #
GET /dashboard Dashboard Page #
GET /dashboard/classic Classic Dashboard Page #
GET /dashboard/investing-preview Investing Preview Page #
GET /.well-known/agentcash.json Agentcash Well Known #
GET /robots.txt Robots Txt #
GET /sitemap.xml Sitemap Xml #
GET /llms.txt Llms Txt #
GET /llms-full.txt Llms Full Txt #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bountyapi-com:bounty-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

bountyapi-com-api-openapi.json Raw ↑
{"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