{"openapi":"3.1.0","info":{"title":"Recoup public website tools","version":"1.0.0","description":"Search and read public Recoup content, assess workflow readiness, calculate a scenario, and prepare a project brief. Anonymous, bounded, read-only computation: no account data, inquiry submission, purchases, or code execution. These are website tools; the authenticated music platform API and MCP are documented separately at /docs. Version v1 permits additive fields; incompatible changes require a new versioned path. Clients should ignore unknown response fields.","contact":{"name":"Recoup","email":"hi@recoupable.dev","url":"https://recoupable.dev/contact"},"termsOfService":"https://recoupable.dev/terms"},"servers":[{"url":"https://recoupable.dev","description":"Recoup website; use the origin that served this specification for local or preview testing."}],"security":[],"externalDocs":{"description":"Agent guide and platform connection options","url":"https://recoupable.dev/agents"},"paths":{"/agent-api/v1/search":{"get":{"operationId":"search_recoup","summary":"Find relevant public Recoup content","description":"Search Recoup’s public website, guides, API documentation, blog, and playbook. Returns matching public content with IDs for read_recoup_page. Use a relevant query and optional content type; follow the returned cursor for more matches.","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":240,"description":"Words or a question to search for."}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["all","page","docs","blog","playbook"],"default":"all"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10,"default":5}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Opaque pagination cursor returned by the previous search."}}],"responses":{"200":{"description":"Matching results. An empty results array is a successful search with no match.","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","maxItems":10,"items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Stable registry ID. Supply this to read_recoup_page."},"type":{"type":"string","enum":["page","docs","blog","playbook"]},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"representation":{"type":"string","enum":["summary","full"],"description":"Marketing pages are explicit summaries. Guides and articles provide their public content."},"updatedAt":{"type":"string","description":"Source modification date when available; never a generated freshness date."},"publishedAt":{"type":"string","description":"Original source publication date, when available."},"api":{"type":"object","properties":{"method":{"type":"string"},"path":{"type":"string"},"specificationUrl":{"type":"string","format":"uri"}},"required":["method","path","specificationUrl"]}},"required":["id","type","title","description","url","representation"]},{"type":"object","properties":{"excerpt":{"type":"string"}},"required":["excerpt"]}]}},"total":{"type":"integer","minimum":0},"nextCursor":{"type":["string","null"]}},"required":["query","results","total","nextCursor"]}}}},"400":{"description":"Invalid input, unknown tool, or unsupported cursor. Correct the named inputs before retrying.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No public content has this registry ID. Search for an ID first.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"Temporarily unable to complete the request. Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/agent-api/v1/read":{"get":{"operationId":"read_recoup_page","summary":"Read public content by registry ID","description":"Read the public text of a Recoup page by an ID returned by search_recoup. Use the returned continuation offset when the content is longer than one response. Does not browse arbitrary URLs or read private account data.","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":300,"description":"Public content ID returned by search_recoup."}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"description":"Character offset supplied by the previous response; start at zero."}},{"name":"maxLength","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":12000,"default":6000,"description":"Maximum characters to return."}}],"responses":{"200":{"description":"One bounded text segment. Continue at nextOffset until null.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Stable registry ID. Supply this to read_recoup_page."},"type":{"type":"string","enum":["page","docs","blog","playbook"]},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"representation":{"type":"string","enum":["summary","full"],"description":"Marketing pages are explicit summaries. Guides and articles provide their public content."},"updatedAt":{"type":"string","description":"Source modification date when available; never a generated freshness date."},"publishedAt":{"type":"string","description":"Original source publication date, when available."},"api":{"type":"object","properties":{"method":{"type":"string"},"path":{"type":"string"},"specificationUrl":{"type":"string","format":"uri"}},"required":["method","path","specificationUrl"]}},"required":["id","type","title","description","url","representation"]},{"type":"object","properties":{"markdown":{"type":"string"},"offset":{"type":"integer","minimum":0},"nextOffset":{"type":["integer","null"],"minimum":0},"totalLength":{"type":"integer","minimum":0}},"required":["markdown","offset","nextOffset","totalLength"]}]}}}},"400":{"description":"Invalid input, unknown tool, or unsupported cursor. Correct the named inputs before retrying.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No public content has this registry ID. Search for an ID first.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"Temporarily unable to complete the request. Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/agent-api/v1/tools":{"post":{"operationId":"execute_recoup_website_tool","summary":"Run a public website tool","description":"Runs one of five public tools without saving a lead or accessing an account. Maximum request body: 16 KB. Request arguments must match the selected tool. All operations are repeatable and do not mutate server data; no idempotency key or credentials are needed. In compatible browsers, prepare_project_brief also opens a local review panel through WebMCP. A raw HTTP call returns the draft only.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"const":"search_recoup","type":"string"},"arguments":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":240,"description":"Words or a question to search for."},"type":{"type":"string","enum":["all","page","docs","blog","playbook"],"default":"all"},"limit":{"type":"integer","minimum":1,"maximum":10,"default":5},"cursor":{"type":"string","minLength":1,"maxLength":200,"description":"Opaque pagination cursor returned by the previous search."}},"required":["query"],"additionalProperties":false}},"required":["name","arguments"],"additionalProperties":false},{"type":"object","properties":{"name":{"const":"read_recoup_page","type":"string"},"arguments":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300,"description":"Public content ID returned by search_recoup."},"offset":{"type":"integer","minimum":0,"default":0,"description":"Character offset supplied by the previous response; start at zero."},"maxLength":{"type":"integer","minimum":1,"maximum":12000,"default":6000,"description":"Maximum characters to return."}},"required":["id"],"additionalProperties":false}},"required":["name","arguments"],"additionalProperties":false},{"type":"object","properties":{"name":{"const":"estimate_workflow_roi","type":"string"},"arguments":{"type":"object","properties":{"monthlyHours":{"type":"number","minimum":0,"maximum":100000,"description":"Current total team hours spent on this workflow per month, in hours/month."},"hourlyCost":{"type":"number","minimum":0,"maximum":10000,"description":"Loaded labor cost in USD per person-hour."},"timeReduction":{"type":"number","minimum":0,"maximum":100,"description":"Assumed share of current work time saved, in percent from 0 to 100. Supply your own assumption; this is not a Recoup performance promise."},"monthlySystemCost":{"type":"number","minimum":0,"maximum":1000000,"description":"Estimated recurring system and operating cost, in USD/month."},"setupCost":{"type":"number","minimum":0,"maximum":10000000,"description":"Estimated one-time implementation cost, in USD."}},"required":["monthlyHours","hourlyCost","timeReduction","monthlySystemCost","setupCost"],"additionalProperties":false}},"required":["name","arguments"],"additionalProperties":false},{"type":"object","properties":{"name":{"const":"assess_workflow_readiness","type":"string"},"arguments":{"type":"object","properties":{"answers":{"type":"object","properties":{"workflow":{"type":"string","enum":["Reporting and finance","Research and acquisition review","Content and release planning","Still deciding"],"description":"Which recurring work would you like to improve?"},"frequency":{"type":"string","enum":["Every day","Every week","Every month","Occasionally"],"description":"How often does your team do this work?"},"information":{"type":"string","enum":["Mostly in one system","Across several tools and files","We need to identify it"],"description":"Where is the information the task needs?"},"access":{"type":"string","enum":["Yes, with the permissions we need","Some of it; we need to arrange access","We are not sure yet"],"description":"Can your team access that information?"},"method":{"type":"string","enum":["Yes, the steps are documented","With help from the person doing it","Not yet; it changes each time"],"description":"Could someone else follow your current process?"},"owner":{"type":"string","enum":["We have someone in mind","We need to agree on an owner","We need help training the team"],"description":"Who would review and own the new workflow?"},"ai":{"type":"string","enum":["We have a repeatable workflow","A few people use individual tools","We are getting started"],"description":"How is the team using AI today?"}},"required":["workflow","frequency","information","access","method","owner","ai"],"additionalProperties":false}},"required":["answers"],"additionalProperties":false}},"required":["name","arguments"],"additionalProperties":false},{"type":"object","properties":{"name":{"const":"prepare_project_brief","type":"string"},"arguments":{"type":"object","properties":{"workflow":{"type":"string","minLength":20,"maxLength":500,"description":"Describe the current workflow and where work gets difficult. Do not include passwords or confidential records."},"desiredOutcome":{"type":"string","minLength":10,"maxLength":500,"description":"What the team would like to improve or produce."},"tools":{"type":"string","minLength":1,"maxLength":500,"description":"Optional tools or data sources involved."},"frequency":{"type":"string","minLength":1,"maxLength":120,"description":"Optional description of how often the work happens."},"interest":{"type":"string","enum":["AI strategy","Custom systems","Team training","Not sure yet"],"default":"Not sure yet"}},"required":["workflow","desiredOutcome"],"additionalProperties":false}},"required":["name","arguments"],"additionalProperties":false}]}}}},"responses":{"200":{"description":"Result for the requested tool. A draft always has submitted:false.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","maxItems":10,"items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Stable registry ID. Supply this to read_recoup_page."},"type":{"type":"string","enum":["page","docs","blog","playbook"]},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"representation":{"type":"string","enum":["summary","full"],"description":"Marketing pages are explicit summaries. Guides and articles provide their public content."},"updatedAt":{"type":"string","description":"Source modification date when available; never a generated freshness date."},"publishedAt":{"type":"string","description":"Original source publication date, when available."},"api":{"type":"object","properties":{"method":{"type":"string"},"path":{"type":"string"},"specificationUrl":{"type":"string","format":"uri"}},"required":["method","path","specificationUrl"]}},"required":["id","type","title","description","url","representation"]},{"type":"object","properties":{"excerpt":{"type":"string"}},"required":["excerpt"]}]}},"total":{"type":"integer","minimum":0},"nextCursor":{"type":["string","null"]}},"required":["query","results","total","nextCursor"]},{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Stable registry ID. Supply this to read_recoup_page."},"type":{"type":"string","enum":["page","docs","blog","playbook"]},"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"representation":{"type":"string","enum":["summary","full"],"description":"Marketing pages are explicit summaries. Guides and articles provide their public content."},"updatedAt":{"type":"string","description":"Source modification date when available; never a generated freshness date."},"publishedAt":{"type":"string","description":"Original source publication date, when available."},"api":{"type":"object","properties":{"method":{"type":"string"},"path":{"type":"string"},"specificationUrl":{"type":"string","format":"uri"}},"required":["method","path","specificationUrl"]}},"required":["id","type","title","description","url","representation"]},{"type":"object","properties":{"markdown":{"type":"string"},"offset":{"type":"integer","minimum":0},"nextOffset":{"type":["integer","null"],"minimum":0},"totalLength":{"type":"integer","minimum":0}},"required":["markdown","offset","nextOffset","totalLength"]}]},{"type":"object","properties":{"status":{"const":"calculated"},"assumptions":{"type":"object","properties":{"monthlyHours":{"type":"number","minimum":0,"maximum":100000,"description":"Current total team hours spent on this workflow per month, in hours/month."},"hourlyCost":{"type":"number","minimum":0,"maximum":10000,"description":"Loaded labor cost in USD per person-hour."},"timeReduction":{"type":"number","minimum":0,"maximum":100,"description":"Assumed share of current work time saved, in percent from 0 to 100. Supply your own assumption; this is not a Recoup performance promise."},"monthlySystemCost":{"type":"number","minimum":0,"maximum":1000000,"description":"Estimated recurring system and operating cost, in USD/month."},"setupCost":{"type":"number","minimum":0,"maximum":10000000,"description":"Estimated one-time implementation cost, in USD."}},"required":["monthlyHours","hourlyCost","timeReduction","monthlySystemCost","setupCost"],"additionalProperties":false},"result":{"type":"object","properties":{"hoursSaved":{"type":"number"},"capacityValue":{"type":"number"},"monthlyNetValue":{"type":"number"},"firstYearNetValue":{"type":"number"},"paybackMonths":{"type":["number","null"]}},"required":["hoursSaved","capacityValue","monthlyNetValue","firstYearNetValue","paybackMonths"]},"units":{"type":"object","additionalProperties":{"type":"string"}},"interpretation":{"type":"string"}},"required":["status","assumptions","result","units","interpretation"]},{"type":"object","properties":{"status":{"const":"assessed"},"answers":{"type":"object","properties":{"workflow":{"type":"string","enum":["Reporting and finance","Research and acquisition review","Content and release planning","Still deciding"],"description":"Which recurring work would you like to improve?"},"frequency":{"type":"string","enum":["Every day","Every week","Every month","Occasionally"],"description":"How often does your team do this work?"},"information":{"type":"string","enum":["Mostly in one system","Across several tools and files","We need to identify it"],"description":"Where is the information the task needs?"},"access":{"type":"string","enum":["Yes, with the permissions we need","Some of it; we need to arrange access","We are not sure yet"],"description":"Can your team access that information?"},"method":{"type":"string","enum":["Yes, the steps are documented","With help from the person doing it","Not yet; it changes each time"],"description":"Could someone else follow your current process?"},"owner":{"type":"string","enum":["We have someone in mind","We need to agree on an owner","We need help training the team"],"description":"Who would review and own the new workflow?"},"ai":{"type":"string","enum":["We have a repeatable workflow","A few people use individual tools","We are getting started"],"description":"How is the team using AI today?"}},"required":["workflow","frequency","information","access","method","owner","ai"],"additionalProperties":false},"recommendation":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"steps":{"type":"array","items":{"type":"string"}},"interest":{"type":"string"}},"required":["title","description","steps","interest"]}},"required":["status","answers","recommendation"]},{"type":"object","properties":{"status":{"const":"draft"},"draft":{"type":"object","properties":{"interest":{"type":"string"},"message":{"type":"string"}},"required":["interest","message"]},"submitted":{"const":false},"nextStep":{"const":"/contact"}},"required":["status","draft","submitted","nextStep"]}]}}}},"400":{"description":"Invalid input, unknown tool, or unsupported cursor. Correct the named inputs before retrying.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No public content has this registry ID. Search for an ID first.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"413":{"description":"Request body is larger than 16 KB. Shorten the supplied context.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"415":{"description":"Send application/json.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"Temporarily unable to complete the request. Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]}}},"required":["code","message"]}},"required":["error"]}}}}}}}}}