{"openapi":"3.1.0","info":{"title":"Bramwell, Inc. public read API","version":"1.0.0","description":"Read-only list of the companies Bramwell, Inc. owns. Public pages and this endpoint need no authentication. The company list is version 1. GET /portfolio.json returns the header API-Version: 1. Send API-Version: 1 to pin that version. Omit the header and the response is still version 1. Any other value returns HTTP 400 and a JSON error. The read URL stays /portfolio.json. The version is a header because this site publishes one company list. Version 1 is the current version. Its responses do not include a Deprecation header or a Sunset header. If a breaking change is required, this version stays available, its responses gain the RFC 9745 Deprecation header and an RFC 8594 Sunset date, and the developers page states that date before the version is removed. A JSON error is one object with three fields: error, message, and resolution. error is one of not_found, method_not_allowed, not_acceptable, unsupported_version. message says what failed. resolution says what to request instead. An unknown path with Accept: application/json returns HTTP 404 and that object. The same path with Accept: text/html returns the HTML page. Accept: text/markdown, or a .md URL, returns markdown. The bytes do not vary by User-Agent. An HTML page requested with Accept: application/json, when that type outranks HTML, returns HTTP 406 and that object. Other media types on a page return HTTP 406 as plain text. POST, PUT, PATCH, and DELETE on /portfolio.json return HTTP 405, the Allow: GET header, and that object. The same status and object are returned for unsupported methods on the other public read documents. An API-Version value other than 1 on GET /portfolio.json returns HTTP 400 and that object. The OpenAPI description at /openapi.json references this object from every error response on the company list.","contact":{"email":"jaxon@bramwell.ai","url":"https://bramwell.ai/contact/"}},"servers":[{"url":"https://bramwell.ai"}],"paths":{"/portfolio.json":{"get":{"operationId":"listCompanies","summary":"List the companies Bramwell, Inc. owns","description":"Returns each company's own site and the holding company's relationship to it. Para Labs and Paralax are editorially independent. The response header API-Version is 1. This version is current: responses omit Deprecation and Sunset.","parameters":[{"name":"API-Version","in":"header","required":false,"description":"Selects the company-list version. The only published value is 1. Omit the header for version 1. Any other value returns HTTP 400.","schema":{"type":"string","enum":["1"],"default":"1"}}],"responses":{"200":{"description":"Company list, version 1.","headers":{"API-Version":{"description":"Company-list version returned. The only current version is 1, and it is not deprecated.","schema":{"type":"string","enum":["1"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"The companies Bramwell, Inc. owns, and each company's own site.","required":["publisher","url","companies"],"properties":{"publisher":{"type":"string","enum":["Bramwell, Inc."],"description":"Owner and operator of this site."},"url":{"type":"string","format":"uri","description":"Canonical URL of the holding-company site."},"companies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","url","relationship","description"],"properties":{"name":{"type":"string","description":"Company name."},"url":{"type":"string","format":"uri","description":"The company's own site."},"relationship":{"type":"string","enum":["Owned and operated by Bramwell, Inc.","Owned by Bramwell, Inc. Editorially independent."],"description":"How Bramwell, Inc. owns the company."},"description":{"type":"string","description":"What the company's own site is for."}}}}}}}}},"400":{"description":"The API-Version header is not version 1.","headers":{"API-Version":{"description":"Company-list version returned. The only current version is 1, and it is not deprecated.","schema":{"type":"string","enum":["1"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"unsupported_version","message":"The only company-list version is 1.","resolution":"Omit API-Version or send API-Version: 1."}}}},"405":{"description":"POST, PUT, PATCH, and DELETE are not supported. GET does not return this status.","headers":{"Allow":{"description":"The only supported method.","schema":{"type":"string","enum":["GET"]}},"API-Version":{"description":"Company-list version returned. The only current version is 1, and it is not deprecated.","schema":{"type":"string","enum":["1"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"method_not_allowed","message":"This endpoint accepts GET only.","resolution":"Send GET /portfolio.json and read /openapi.json."}}}}}}}},"components":{"schemas":{"Portfolio":{"type":"object","additionalProperties":false,"description":"The companies Bramwell, Inc. owns, and each company's own site.","required":["publisher","url","companies"],"properties":{"publisher":{"type":"string","enum":["Bramwell, Inc."],"description":"Owner and operator of this site."},"url":{"type":"string","format":"uri","description":"Canonical URL of the holding-company site."},"companies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","url","relationship","description"],"properties":{"name":{"type":"string","description":"Company name."},"url":{"type":"string","format":"uri","description":"The company's own site."},"relationship":{"type":"string","enum":["Owned and operated by Bramwell, Inc.","Owned by Bramwell, Inc. Editorially independent."],"description":"How Bramwell, Inc. owns the company."},"description":{"type":"string","description":"What the company's own site is for."}}}}}},"Error":{"type":"object","additionalProperties":false,"description":"Error object returned for the company list and for JSON clients.","required":["error","message","resolution"],"properties":{"error":{"type":"string","enum":["not_found","method_not_allowed","not_acceptable","unsupported_version"],"description":"Stable error code."},"message":{"type":"string","description":"What failed."},"resolution":{"type":"string","description":"What to request instead."}}}}}}