{"openapi":"3.1.0","info":{"title":"Proplace API","description":"Proplace Public API — trigger investment memos, screen deals, patch published memos, list available funds. Bearer auth required on all endpoints.","version":"1.0.0"},"servers":[{"url":"/v1"},{"url":"https://api.proplace.co"},{"url":"https://alexandre-79537--sourcing-agent-fastapi-app.modal.run"}],"paths":{"/funds":{"get":{"tags":["v1"],"summary":"List active fund types","description":"Return every fund_type the caller can target with `POST /v1/memos`.","operationId":"listFunds","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FundSummary"},"title":"Response Listfunds"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/funds/{fund_type}":{"get":{"tags":["v1"],"summary":"Get a fund's metadata + redacted thesis summary","operationId":"getFund","parameters":[{"name":"fund_type","in":"path","required":true,"schema":{"type":"string","description":"Fund identifier (case-insensitive)","title":"Fund Type"},"description":"Fund identifier (case-insensitive)"},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memos":{"post":{"tags":["v1"],"summary":"Trigger a memo generation (asynchronous, ~8 minutes)","description":"Kick off the full memo pipeline.\n\nSteps:\n1. Validate fund_type\n2. Compute the public slug\n3. Pre-create a QUEUED row in Airtable (best-effort)\n4. Fire the Make.com scenario webhook\n5. Return 202 with a poll_url\n\nPass an `Idempotency-Key` header to safely retry without duplicating work.","operationId":"triggerMemo","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerMemoIn"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerMemoOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-openai-isConsequential":true}},"/memos/{slug}":{"get":{"tags":["v1"],"summary":"Poll the status of a triggered memo","operationId":"getMemo","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","description":"Slug returned by triggerMemo","title":"Slug"},"description":"Slug returned by triggerMemo"},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/memos/{slug}/patch":{"post":{"tags":["v1"],"summary":"Surgically edit an already-published memo","description":"Apply a list of operations to the published memo's HTML and push back to GitHub.\n\nOperations supported: replace_section, replace_section_inner,\nappend_to_section, prepend_to_section, replace_text.\n\nSet dry_run=true to preview the diff without pushing.","operationId":"patchMemo","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","description":"Slug returned by triggerMemo","title":"Slug"},"description":"Slug returned by triggerMemo"},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchMemoIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-openai-isConsequential":true}},"/screen":{"post":{"tags":["v1"],"summary":"Pre-flight verdict (synchronous, ~10s)","description":"Run a fast triangulation against the fund thesis. Returns verdict + score.\n\nUse this to qualify a deal before committing 8+ minutes to the full memo.","operationId":"screenDeal","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/ScreenIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-openai-isConsequential":false}}},"components":{"schemas":{"CompanyIn":{"properties":{"name":{"type":"string","title":"Name","description":"Company name. Used to compute the slug."},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin","description":"LinkedIn URL of the CEO/founder"},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tagline","description":"One-line value proposition"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"HQ country (full name, e.g. 'France')"},"company_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Stage","description":"e.g. 'pre-seed', 'seed', 'series_a', 'series_b'"},"founders_cofounders":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Founders Cofounders","description":"Free text describing the founding team (names, roles, backgrounds)"},"funding":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Funding","description":"Latest round amount + currency (e.g. '€4M', '$12M')"},"funding_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Funding Date","description":"Date of the latest funding round (free text or ISO)"},"vc_funds":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vc Funds","description":"Comma-separated list of existing investors / VC funds"},"pitch_deck_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pitch Deck Url","description":"Optional public URL to a PDF pitch deck."},"product_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Url"},"pricing_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Url"},"team_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Url"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name","description":"CEO first name (optional hint)"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name","description":"CEO last name (optional hint)"}},"type":"object","required":["name"],"title":"CompanyIn"},"FundDetail":{"properties":{"fund_type":{"type":"string","title":"Fund Type"},"display_name":{"type":"string","title":"Display Name"},"lang":{"type":"string","title":"Lang"},"supports_synergy_model":{"type":"boolean","title":"Supports Synergy Model"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"customer_active":{"type":"boolean","title":"Customer Active"},"thesis_summary":{"additionalProperties":true,"type":"object","title":"Thesis Summary","description":"Public-safe redacted summary of the fund thesis"}},"type":"object","required":["fund_type","display_name","lang","supports_synergy_model","customer_active"],"title":"FundDetail"},"FundSummary":{"properties":{"fund_type":{"type":"string","title":"Fund Type"},"display_name":{"type":"string","title":"Display Name"},"lang":{"type":"string","title":"Lang"},"supports_synergy_model":{"type":"boolean","title":"Supports Synergy Model"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["fund_type","display_name","lang","supports_synergy_model"],"title":"FundSummary"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MemoStatusOut":{"properties":{"slug":{"type":"string","title":"Slug"},"url":{"type":"string","title":"Url"},"status":{"type":"string","enum":["queued","building","ready","failed","unknown"],"title":"Status"},"fund_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fund Type"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"memo_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memo Type"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"}},"type":"object","required":["slug","url","status"],"title":"MemoStatusOut"},"PatchMemoIn":{"properties":{"operations":{"items":{"$ref":"#/components/schemas/PatchOperation"},"type":"array","title":"Operations"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"commit_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Message"}},"type":"object","required":["operations"],"title":"PatchMemoIn"},"PatchOperation":{"properties":{"type":{"type":"string","enum":["replace_section","replace_section_inner","append_to_section","prepend_to_section","replace_text"],"title":"Type"},"section_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Section Id"},"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html"},"find":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Find"},"replace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replace"}},"type":"object","required":["type"],"title":"PatchOperation"},"ScreenIn":{"properties":{"fund_type":{"type":"string","title":"Fund Type"},"company":{"$ref":"#/components/schemas/CompanyIn"}},"type":"object","required":["fund_type","company"],"title":"ScreenIn"},"ScreenOut":{"properties":{"fund_type":{"type":"string","title":"Fund Type"},"company_name":{"type":"string","title":"Company Name"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"arr_mid_eur":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Arr Mid Eur"},"arr_confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arr Confidence"},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"}},"type":"object","required":["fund_type","company_name"],"title":"ScreenOut"},"TriggerMemoIn":{"properties":{"fund_type":{"type":"string","title":"Fund Type","description":"Fund identifier from GET /v1/funds"},"company":{"$ref":"#/components/schemas/CompanyIn"},"memo_type":{"type":"string","enum":["fast","quick","detailed"],"title":"Memo Type","default":"detailed"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang","description":"ISO code, defaults to fund.lang"},"synergies_with":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Synergies With","description":"Airtable record_id of a portfolio company to compute synergies against"},"callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Url","description":"Experimental — webhook posted when the memo is ready"},"publish":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish","description":"Set to \"yes\" to publish to the Open Deal Flow page"},"motive":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Motive","description":"Strategic motive for evaluating this deal (free text)"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Where the deal came from (e.g. 'twitter', 'linkedin', 'inbound', 'manual'). Defaults to 'api_v1' if omitted."}},"type":"object","required":["fund_type","company"],"title":"TriggerMemoIn"},"TriggerMemoOut":{"properties":{"memo_id":{"type":"string","title":"Memo Id"},"slug":{"type":"string","title":"Slug"},"url":{"type":"string","title":"Url"},"status":{"type":"string","enum":["queued","building","ready","failed"],"title":"Status"},"fund_type":{"type":"string","title":"Fund Type"},"memo_type":{"type":"string","title":"Memo Type"},"estimated_seconds":{"type":"integer","title":"Estimated Seconds"},"poll_url":{"type":"string","title":"Poll Url"}},"type":"object","required":["memo_id","slug","url","status","fund_type","memo_type","estimated_seconds","poll_url"],"title":"TriggerMemoOut"},"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"}}}}