{"openapi":"3.1.0","info":{"title":"Bolina Marine website API","version":"1.0.0","summary":"Read-only product facts and a contact endpoint for Bolina Marine, the yacht fleet management platform.","description":"Bolina Marine is yacht fleet management software for charter companies, fleet operators, yacht owners and crew.\n\nThis API is served by the marketing site (https://bolinamarine.com). It exposes the product's feature modules and integration catalogue, and accepts contact enquiries.\n\nIt needs no authentication and has no rate-limit tiers. Read-only responses are cached at the edge for an hour.\n\nThe product itself runs at https://app.bolinamarine.com and its API is not public. To discuss programmatic access, submit an enquiry with submitContactEnquiry or email contact@bolinamarine.com.\n\nEvery error response uses the ApiError shape with a stable `code`.","contact":{"name":"Bolina Marine","email":"contact@bolinamarine.com","url":"https://bolinamarine.com/contact"}},"externalDocs":{"description":"Developer docs","url":"https://bolinamarine.com/docs"},"servers":[{"url":"https://bolinamarine.com","description":"Production"}],"tags":[{"name":"Product","description":"What Bolina Marine does: feature modules and integrations."},{"name":"Contact","description":"Send an enquiry to the Bolina Marine team."},{"name":"Discovery","description":"Machine-readable summaries of the site."}],"paths":{"/api/features":{"get":{"operationId":"listFeatureModules","tags":["Product"],"summary":"List feature modules","description":"Returns every Bolina Marine feature module (documentation, scheduling, maintenance, charter coordination, financials, owner reporting) with its overview and sub-features. Use it to answer what the product can do.","responses":{"200":{"description":"All feature modules.","headers":{"Access-Control-Allow-Origin":{"description":"Always `*`: the read-only endpoints may be called from any origin.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FeatureModule"}}}}}}}}}},"/api/features/{slug}":{"get":{"operationId":"getFeatureModule","tags":["Product"],"summary":"Get one feature module","description":"Returns a single feature module by its slug. Call listFeatureModules first if you do not know the slug.","parameters":[{"name":"slug","in":"path","required":true,"description":"The module's URL slug.","schema":{"type":"string","enum":["documentation","scheduling","maintenance","charter-coordination","financials","owner-reporting"]},"example":"documentation"}],"responses":{"200":{"description":"The feature module.","headers":{"Access-Control-Allow-Origin":{"description":"Always `*`: the read-only endpoints may be called from any origin.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/FeatureModule"}}}}}},"404":{"description":"No module has that slug (`code: not_found`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/integrations":{"get":{"operationId":"listIntegrations","tags":["Product"],"summary":"List integrations","description":"Returns the integration catalogue grouped by category (accounting, payments, calendars, charter marketplaces), each with its availability status. Use it to check whether Bolina Marine connects to a given tool.","responses":{"200":{"description":"Integration categories with their connectors.","headers":{"Access-Control-Allow-Origin":{"description":"Always `*`: the read-only endpoints may be called from any origin.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationCategory"}}}}}}}}}},"/api/contact":{"post":{"operationId":"submitContactEnquiry","tags":["Contact"],"summary":"Send an enquiry to the Bolina Marine team","description":"Emails an enquiry to the Bolina Marine team, who reply to the given address within one business day. Use it to request a demo, ask about fit for a fleet, or ask about API access. Only submit on behalf of a person who asked you to.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"},"example":{"name":"Ana Costa","email":"ana@example.com","company":"Atlantic Charters","vessels":"4-10","message":"We run eight catamarans out of Lagos and want a demo of maintenance tracking."}}}},"responses":{"200":{"description":"The enquiry was sent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"400":{"description":"The body is not valid JSON (`invalid_json`) or a field is missing or invalid (`validation_error`, see `details`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"405":{"description":"Only POST is allowed (`method_not_allowed`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"The email provider rejected the message (`email_delivery_failed`). Retry later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Email delivery is not configured (`email_not_configured`). Email contact@bolinamarine.com directly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","tags":["Discovery"],"summary":"Get the llms.txt summary","description":"A Markdown summary of Bolina Marine for language models (https://llmstxt.org): modules, integrations, when to use the product, and how agents should call this site.","responses":{"200":{"description":"Markdown document.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"FeatureModule":{"type":"object","description":"One product module of Bolina Marine.","required":["slug","name","eyebrow","tagline","metaDescription","overview","subFeatures","relatedCaseStudy"],"properties":{"slug":{"type":"string","description":"URL slug; the HTML page is /features/{slug}.","example":"scheduling"},"name":{"type":"string","example":"Scheduling"},"eyebrow":{"type":"string","description":"Short label shown above the title.","example":"Module 02"},"tagline":{"type":"string"},"metaDescription":{"type":"string","description":"One-sentence summary."},"overview":{"type":"array","description":"Overview paragraphs.","items":{"type":"string"}},"subFeatures":{"type":"array","items":{"$ref":"#/components/schemas/SubFeature"}},"relatedCaseStudy":{"type":"object","required":["label","href"],"properties":{"label":{"type":"string"},"href":{"type":"string","description":"Site-relative path."}}}}},"SubFeature":{"type":"object","required":["title","body"],"properties":{"title":{"type":"string"},"body":{"type":"string"}}},"IntegrationCategory":{"type":"object","required":["category","items"],"properties":{"category":{"type":"string","example":"Accounting"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Integration"}}}},"Integration":{"type":"object","required":["name","description","status"],"properties":{"name":{"type":"string","example":"Xero"},"description":{"type":"string"},"status":{"type":"string","enum":["Live","Beta","Coming soon"]},"src":{"type":"string","description":"Site-relative path to the connector's logo, when there is one."}}},"ContactRequest":{"type":"object","required":["name","email","message"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200},"email":{"type":"string","format":"email","maxLength":320,"description":"Where the team will reply."},"company":{"type":"string","maxLength":200},"vessels":{"type":"string","maxLength":20,"description":"Fleet size. The site's form sends one of these values.","examples":["1","2-3","4-10","11+"]},"message":{"type":"string","minLength":1,"maxLength":5000}}},"ContactResponse":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","const":true}}},"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable, machine-readable error code.","enum":["invalid_json","validation_error","not_found","method_not_allowed","email_not_configured","email_delivery_failed"]},"message":{"type":"string","description":"Human-readable explanation."},"hint":{"type":"string","description":"What to do next."},"details":{"type":"object","description":"Per-field problems, for validation_error.","additionalProperties":{"type":"string"}}}}}}}}}