{"openapi":"3.1.0","info":{"title":"Black Sail Map","version":"0.2.5","description":"AI-only map source discovery and actual GeoJSON acquisition/processing. OGC-inspired collection routes and STAC 1.0 catalog; no certified OGC/STAC API conformance claim."},"servers":[{"url":"https://map.blacksail.top"}],"paths":{"/":{"get":{"summary":"AI service descriptor","operationId":"serviceDescriptor","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/healthz":{"get":{"summary":"Runtime and latest source checks","operationId":"health","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/v1/themes":{"get":{"summary":"Supported themes","operationId":"themes","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/v1/maps":{"get":{"summary":"Search map sources","operationId":"mapSearch","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":160}},{"name":"theme","in":"query","schema":{"type":"string","enum":["bathymetry","boundaries","buildings","cartography","coastline","elevation","environment","lakes","land","marine","ocean","ocean-current","physical-geography","places","rivers","salinity","satellite","temperature","transportation","water"]}},{"name":"bbox","in":"query","schema":{"type":"string","description":"west,south,east,north in CRS84"}},{"name":"format","in":"query","schema":{"type":"string","maxLength":40}},{"name":"license","in":"query","schema":{"type":"string","enum":["public_domain","review_terms","mixed"]}},{"name":"strict","in":"query","schema":{"type":"boolean"}},{"name":"downloadable","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/v1/maps/{id}":{"get":{"summary":"Inspect source metadata","operationId":"mapGet","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/v1/maps/{id}/schema":{"get":{"summary":"Inspect actual feature schema","operationId":"mapSchema","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/v1/maps/{id}/verify":{"get":{"summary":"Verify approved dataset snapshot","operationId":"mapVerify","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/v1/maps/{id}/data":{"get":{"summary":"Get validated real GeoJSON features","operationId":"mapData","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"bbox","in":"query","schema":{"type":"string","description":"west,south,east,north"}},{"name":"where","in":"query","schema":{"type":"string","description":"JSON object of exact property values"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}},{"name":"include_geometry","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"GeoJSON; complete intersecting features, not clipping","content":{"application/geo+json":{"schema":{"type":"object","required":["type","features","numberMatched","numberReturned"],"properties":{"type":{"const":"FeatureCollection"},"features":{"type":"array","items":{"type":"object"}},"numberMatched":{"type":"integer"},"numberReturned":{"type":"integer"},"black_sail":{"type":"object"}}}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/v1/fetch":{"post":{"summary":"Acquire and filter actual map features","operationId":"mapFetch","parameters":[],"responses":{"200":{"description":"GeoJSON; complete intersecting features, not clipping","content":{"application/geo+json":{"schema":{"type":"object","required":["type","features","numberMatched","numberReturned"],"properties":{"type":{"const":"FeatureCollection"},"features":{"type":"array","items":{"type":"object"}},"numberMatched":{"type":"integer"},"numberReturned":{"type":"integer"},"black_sail":{"type":"object"}}}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","maxLength":100},"bbox":{"type":"array","items":{"type":"number"},"minItems":4,"maxItems":4,"description":"[west,south,east,north], WGS84 longitude/latitude; split antimeridian boxes"},"where":{"type":"object","additionalProperties":{"type":["string","number","boolean"]},"description":"Exact property-value equality; strings are case insensitive. Use map_schema first."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":20},"offset":{"type":"integer","minimum":0,"maximum":10000,"default":0},"include_geometry":{"type":"boolean","default":true}},"required":["id"],"additionalProperties":false}}}}}},"/v1/match":{"post":{"summary":"Match an AI map task","operationId":"mapMatch","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"q":{"type":"string","maxLength":160},"theme":{"type":"string","enum":["bathymetry","boundaries","buildings","cartography","coastline","elevation","environment","lakes","land","marine","ocean","ocean-current","physical-geography","places","rivers","salinity","satellite","temperature","transportation","water"]},"bbox":{"type":"array","items":{"type":"number"},"minItems":4,"maxItems":4,"description":"[west,south,east,north], WGS84 longitude/latitude; split antimeridian boxes"},"format":{"type":"string","maxLength":40},"license":{"type":"string","enum":["public_domain","review_terms","mixed"]},"strict":{"type":"boolean"},"downloadable":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":50},"task":{"type":"string","maxLength":500},"task_id":{"type":"string"},"requires_processing":{"type":"boolean"}},"required":[],"additionalProperties":false}}}}}},"/v1/process/point":{"post":{"summary":"Point containment in polygon data","operationId":"mapPointLookup","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"longitude":{"type":"number","minimum":-180,"maximum":180},"latitude":{"type":"number","minimum":-90,"maximum":90}},"required":["id","longitude","latitude"],"additionalProperties":false}}}}}},"/collections":{"get":{"summary":"List processable collections","operationId":"collections","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/collections/{id}":{"get":{"summary":"Collection metadata","operationId":"collection","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/collections/{id}/items":{"get":{"summary":"Geometry/property-filtered GeoJSON features","operationId":"features","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"bbox","in":"query","schema":{"type":"string","description":"west,south,east,north"}},{"name":"where","in":"query","schema":{"type":"string","description":"JSON object of exact property values"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}},{"name":"include_geometry","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"GeoJSON; complete intersecting features, not clipping","content":{"application/geo+json":{"schema":{"type":"object","required":["type","features","numberMatched","numberReturned"],"properties":{"type":{"const":"FeatureCollection"},"features":{"type":"array","items":{"type":"object"}},"numberMatched":{"type":"integer"},"numberReturned":{"type":"integer"},"black_sail":{"type":"object"}}}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/collections/{id}/items/{feature_id}":{"get":{"summary":"Single actual feature","operationId":"feature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/stac/catalog.json":{"get":{"summary":"STAC 1.0 collection catalog","operationId":"stacCatalog","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/stac/collections/{id}.json":{"get":{"summary":"STAC collection","operationId":"stacCollection","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}}}},"/mcp":{"post":{"summary":"MCP Streamable HTTP using official SDK","operationId":"mcp","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"],"additionalProperties":false}}}},"security":[{"siteMcpBearer":[]}],"servers":[{"url":"https://black-sail-map.naturalone.chatgpt.site"}],"description":"Platform OAuth endpoint at https://black-sail-map.naturalone.chatgpt.site/mcp; custom-domain /mcp is not provisioned by Sites."},"get":{"summary":"Standalone SSE is not supported","responses":{"405":{"description":"Use POST"}}}},"/v1/maintenance/check":{"post":{"summary":"Authenticated publisher integrity refresh","operationId":"maintenanceCheck","security":[{"maintenanceBearer":[]}],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Maintainer token required"},"503":{"description":"Maintenance authorization not configured"}}}},"/agent/mcp":{"post":{"summary":"Anonymous MCP for approved public map data","operationId":"publicMcp","parameters":[],"responses":{"200":{"description":"Machine-readable JSON result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid JSON/request"},"404":{"description":"Unknown dataset/route"},"413":{"description":"Body or result too large"},"422":{"description":"Invalid arguments"},"429":{"description":"Rate budget exceeded; Retry-After supplied"},"502":{"description":"Publisher data or integrity verification failed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"],"additionalProperties":false}}}}}}},"components":{"securitySchemes":{"siteMcpBearer":{"type":"http","scheme":"bearer","description":"Platform OAuth token; consult /.well-known/oauth-protected-resource/mcp"},"maintenanceBearer":{"type":"http","scheme":"bearer"}},"schemas":{"Theme":{"type":"string","enum":["bathymetry","boundaries","buildings","cartography","coastline","elevation","environment","lakes","land","marine","ocean","ocean-current","physical-geography","places","rivers","salinity","satellite","temperature","transportation","water"]}}}}