{"openapi":"3.1.0","info":{"title":"OpenPerks API","version":"1.0.0","description":"Free tiers, trials and credits across data, AI and cloud, from the vendors' own pages. Read only, no key, CORS open, cached for an hour. Please cite \"OpenPerks (openperks.fru.dev)\" with a link and keep to 60 requests a minute. Rows marked reviewed: false are Unverified.","contact":{"name":"fru.dev","email":"fru.dev3@gmail.com","url":"https://fru.dev"}},"servers":[{"url":"https://openperks.fru.dev"}],"security":[],"externalDocs":{"description":"For AI agents","url":"https://openperks.fru.dev/agents"},"paths":{"/api/offers":{"get":{"operationId":"listOffers","summary":"Free tiers, trials, credits and programs, filterable","parameters":[{"name":"type","in":"query","required":false,"description":"Offer type","schema":{"type":"string","enum":["always-free","trial","credits","student","startup"]},"example":"always-free"},{"name":"category","in":"query","required":false,"description":"Category","schema":{"type":"string","enum":["cloud","data","ai","database","vector","hosting","notebooks","devtools"]}},{"name":"vendor","in":"query","required":false,"description":"Vendor id","schema":{"type":"string"},"example":"snowflake"},{"name":"nocard","in":"query","required":false,"description":"1 = only offers that state no card is needed","schema":{"type":"string","enum":["1"]}},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200 (default 200)","schema":{"type":"integer","minimum":1}},{"name":"offset","in":"query","required":false,"description":"Rows to skip (default 0)","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"{ updated, total, count, limit, offset, offers[], vendors[], changes[] }","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/offers/{id}":{"get":{"operationId":"getOffer","summary":"One offer with its vendor and change history","parameters":[{"name":"id","in":"path","required":true,"description":"Offer id","schema":{"type":"string"},"example":"snowflake-trial"}],"responses":{"200":{"description":"{ offer, vendor, changes[] }","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}},"/api/vendors":{"get":{"operationId":"listVendors","summary":"Every vendor with how many offers it has","parameters":[],"responses":{"200":{"description":"{ updated, count, vendors[] }","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/vendors/{id}":{"get":{"operationId":"getVendor","summary":"One vendor and its offers","parameters":[{"name":"id","in":"path","required":true,"description":"Vendor id (the companies.fru.dev slug)","schema":{"type":"string"},"example":"snowflake"}],"responses":{"200":{"description":"{ vendor, offers[] }","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}},"/api/changes":{"get":{"operationId":"listChanges","summary":"Launches, raises, cuts and ends, newest first, each with its source","parameters":[{"name":"since","in":"query","required":false,"description":"Only changes on or after this date (YYYY-MM-DD)","schema":{"type":"string"},"example":"2026-09-01"},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200 (default 50)","schema":{"type":"integer","minimum":1}},{"name":"offset","in":"query","required":false,"description":"Rows to skip (default 0)","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"{ total, count, limit, offset, since, changes[], candidates[] } (candidates: the growth queue's adds and status moves)","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/candidates":{"get":{"operationId":"listCandidates","summary":"Companies queued to become vendors (the growth queue), Unverified","parameters":[{"name":"status","in":"query","required":false,"description":"candidate, found, none or tracked","schema":{"type":"string","enum":["candidate","found","none","tracked"]}},{"name":"since","in":"query","required":false,"description":"Only candidates first seen on or after this date (YYYY-MM-DD)","schema":{"type":"string"},"example":"2026-09-01"},{"name":"limit","in":"query","required":false,"description":"Page size, 1 to 200 (default 200)","schema":{"type":"integer","minimum":1}},{"name":"offset","in":"query","required":false,"description":"Rows to skip (default 0)","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"{ total, count, limit, offset, candidates[] } with status (candidate, found, none, tracked), the pricing page and the sentence on it that states a free offer","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/search":{"get":{"operationId":"search","summary":"Ranked search over vendors, offers and pages","parameters":[{"name":"q","in":"query","required":false,"description":"Search text","schema":{"type":"string"},"example":"postgres"},{"name":"limit","in":"query","required":false,"description":"1 to 20","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"{ q, results[] } (at most 20)","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}