{"openapi":"3.1.0","info":{"title":"GrowFast API","version":"1.0.0","description":"Cold outreach and Reddit listening for founders. Any account can create API keys under Settings > API keys; plan limits apply to every call."},"servers":[{"url":"https://growfast.sh"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"sk_live_… key"}}},"paths":{"/api/scan":{"post":{"operationId":"scan_domain","summary":"Read a product's website and return its ideal customer profile, a first cold email and the best-fit companies scored 1-10. Takes about 30 seconds.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"The product's domain, e.g. yourproduct.com"}},"required":["domain"]}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/outreach/import":{"post":{"operationId":"import_leads","summary":"Clean your own list (CSV text with an email column, optional company, name, website) into leads: drops invalid, duplicate, already-emailed, public-sector, role-mailbox (info@, support@) and no-mail-server addresses, and says why. A list that is mostly unmailable is refused whole. confirmOwnList must be true: it records the caller's statement that these are business contacts they have a reason to write to and that the list was not bought, rented or scraped in bulk.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"csv":{"type":"string","description":"CSV text, up to 500 rows"},"confirmOwnList":{"type":"boolean","description":"True confirms this is your own list of business contacts, not a bought, rented or scraped one."}},"required":["csv","confirmOwnList"]}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/outreach":{"get":{"operationId":"get_email_allowance","summary":"How many outreach emails are left this month on the plan.","security":[{"bearer":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/outreach/export":{"get":{"operationId":"export_outreach","summary":"Everyone this account has emailed, as CSV: email, company, contact, product, subject, delivery, replied, reply category.","security":[{"bearer":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/sending-domains":{"get":{"operationId":"list_sending_domains","summary":"The account's sending domains and managed GrowFast address, with remaining sends today.","security":[{"bearer":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/outreach/autopilot":{"get":{"operationId":"list_autopilots","summary":"Every autopilot on the account (one per product) with its last result.","security":[{"bearer":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}},"put":{"operationId":"set_autopilot","summary":"Create or change the autopilot for one product and turn it on or off. Each day it finds new fits (8/10 or better), writes to the decision-maker and sends real email within the daily limit; sent email cannot be recalled.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productDomain":{"type":"string","description":"The product being promoted"},"senderEmail":{"type":"string","description":"The GrowFast address or a verified domain address to send from"},"senderName":{"type":"string","description":"Name shown as the sender"},"leadSource":{"type":"string","enum":["companies","channels"]},"angle":{"type":"string","description":"Optional angle for the emails"},"targeting":{"type":"string","description":"Optional: who to aim at and who to skip, in your words"},"dailyLimit":{"type":"integer","description":"Emails per day"},"enabled":{"type":"boolean"}},"required":["productDomain","senderEmail","enabled"]}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/outreach/replies/{id}/send":{"post":{"operationId":"send_reply","summary":"Send the founder's answer to a prospect who replied, in the same thread, from the address they wrote to. Delivers real email that cannot be recalled.","security":[{"bearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The answer to send"}},"required":["text"]}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/reddit/monitor":{"get":{"operationId":"list_reddit_monitors","summary":"The Reddit monitors on the account, one per product.","security":[{"bearer":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}},"put":{"operationId":"set_reddit_monitor","summary":"Set what to listen for on Reddit for one product. Replaces that product's existing monitor settings. GrowFast finds posts where the author needs the product and drafts a reply and DM; the founder posts them.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productDomain":{"type":"string","description":"The product's domain"},"productName":{"type":"string","description":"The product's name"},"productPitch":{"type":"string","description":"One sentence on what it does"},"keywords":{"type":"string","description":"Up to 6 keywords, comma-separated"}},"required":["productDomain","productName","productPitch","keywords"]}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/reddit/matches":{"get":{"operationId":"list_reddit_matches","summary":"Reddit posts found for a product, best first, with drafted replies.","security":[{"bearer":[]}],"parameters":[{"name":"product","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}},"/api/outreach/research":{"post":{"operationId":"draft_outreach_emails","summary":"For up to 10 companies find the named decision-maker on each company's own site and write a first email to them. Nothing is sent and nothing is saved: the founder reads and edits the drafts. Takes 10-60 seconds.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"seller":{"type":"object","description":"The product being offered","properties":{"productName":{"type":"string","description":"Product name"},"valueProposition":{"type":"string","description":"One or two sentences on what it does for the customer"},"icpTitle":{"type":"string","description":"Optional: the role to write to, e.g. Head of Growth"},"icpIndustry":{"type":"string","description":"Optional: the industry of the companies"}},"required":["productName","valueProposition"]},"leads":{"type":"array","maxItems":10,"description":"Companies to research","items":{"type":"object","properties":{"company":{"type":"string","description":"Company name"},"email":{"type":"string","description":"A contact address the company publishes"},"website":{"type":"string","description":"Optional: the company's domain"}},"required":["company","email"]}}},"required":["seller","leads"]}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Plan or sending limit reached"}}}}}}