MarineVerse AI
MarineVerse AI · Acciones GPT
MarineVerse API V3
MarineVerse API v3 documentation.
GET /api/v3/globe_boatsGet all boats owned by or crewed by the current userGET /api/v3/globe_boats/{uuid}Get details for a specific boatGET /api/v3/globe_boats/{uuid}/proximity_infoGet proximity information (closest port and land) for a boatGET /api/v3/globe_boats/{uuid}/port_historyGet port visit history for a boatGET /api/v3/globe_boats/{uuid}/travel_statsGet travel statistics for a boatGET /api/v3/sailing_progressGet sailing progress for the current userGET /api/v3/users/meGet the current user profile
Esquema original API
{
"openapi": "3.1.0",
"info": {
"title": "MarineVerse API V3",
"version": "v3",
"description": "MarineVerse API v3 documentation."
},
"servers": [
{
"url": "https://api.marineverse.com"
},
{
"url": "http://localhost:3000"
}
],
"components": {
"securitySchemes": {
"OAuth2": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://www.marineverse.com/oauth/authorize",
"tokenUrl": "https://api.marineverse.com/oauth/token",
"refreshUrl": "https://api.marineverse.com/oauth/token",
"scopes": {
"public": "Basic public access.",
"sailing_cv": "Read sailing tutorial progress and CV data.",
"globe_read": "Read MarineVerse Globe boat data."
}
}
},
"x-tokenEndpointAuthMethodsSupported": [
"none"
],
"x-revocationEndpoint": "https://api.marineverse.com/oauth/revoke",
"x-responseTypesSupported": [
"code"
],
"x-codeChallengeMethodsSupported": [
"S256",
"plain"
],
"x-issuer": "https://api.marineverse.com"
}
},
"schemas": {
"ErrorResponse": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
},
"required": [
"error"
]
},
"SailingTutorialProgress": {
"type": "object",
"properties": {
"yacht_tutorial_basics_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_basics_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_steering_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_steering_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_wind_direction_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_wind_direction_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_sailing_terms_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_sailing_terms_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_upwind_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_upwind_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_pos_speed_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_pos_speed_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_starting_race_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_starting_race_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_spinnaker_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"yacht_tutorial_spinnaker_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"dinghy_tutorial_basics_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"dinghy_tutorial_basics_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"dinghy_tutorial_sailing_terms_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"dinghy_tutorial_sailing_terms_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"dinghy_tutorial_going_fast_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"dinghy_tutorial_going_fast_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"sailing_ed_self_mastery_started_at": {
"type": [
"string",
"null"
],
"format": "date_time"
},
"sailing_ed_self_mastery_finished_at": {
"type": [
"string",
"null"
],
"format": "date_time"
}
},
"required": [
"yacht_tutorial_basics_started_at",
"yacht_tutorial_basics_finished_at",
"yacht_tutorial_steering_started_at",
"yacht_tutorial_steering_finished_at",
"yacht_tutorial_wind_direction_started_at",
"yacht_tutorial_wind_direction_finished_at",
"yacht_tutorial_sailing_terms_started_at",
"yacht_tutorial_sailing_terms_finished_at",
"yacht_tutorial_upwind_started_at",
"yacht_tutorial_upwind_finished_at",
"yacht_tutorial_pos_speed_started_at",
"yacht_tutorial_pos_speed_finished_at",
"yacht_tutorial_starting_race_started_at",
"yacht_tutorial_starting_race_finished_at",
"yacht_tutorial_spinnaker_started_at",
"yacht_tutorial_spinnaker_finished_at",
"dinghy_tutorial_basics_started_at",
"dinghy_tutorial_basics_finished_at",
"dinghy_tutorial_sailing_terms_started_at",
"dinghy_tutorial_sailing_terms_finished_at",
"dinghy_tutorial_going_fast_started_at",
"dinghy_tutorial_going_fast_finished_at",
"sailing_ed_self_mastery_started_at",
"sailing_ed_self_mastery_finished_at"
]
},
"SailingProgressResponse": {
"type": "object",
"properties": {
"tutorial": {
"$ref": "#/components/schemas/SailingTutorialProgress"
},
"next_step": {
"type": [
"string",
"null"
]
},
"yacht_onboarding_progress": {
"type": [
"number",
"null"
],
"format": "float"
},
"dinghy_onboarding_progress": {
"type": [
"number",
"null"
],
"format": "float"
},
"finished_race": {
"type": [
"boolean",
"null"
]
},
"display_name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid"
}
},
"required": [
"tutorial",
"next_step",
"yacht_onboarding_progress",
"dinghy_onboarding_progress",
"finished_race",
"display_name",
"uuid"
]
},
"UserMeResponse": {
"type": "object",
"properties": {
"display_name": {
"type": "string"
},
"sailing_experience": {
"type": [
"string",
"null"
]
},
"marineverse_interests": {
"type": [
"string",
"null"
]
},
"time_zone": {
"type": [
"string",
"null"
]
},
"country_code": {
"type": [
"string",
"null"
]
},
"uuid": {
"type": "string",
"format": "uuid"
}
},
"required": [
"display_name",
"sailing_experience",
"marineverse_interests",
"time_zone",
"country_code",
"uuid"
]
},
"BoatSummary": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid"
},
"coordinates": {
"type": "string"
},
"latitude": {
"type": "number",
"format": "float"
},
"longitude": {
"type": "number",
"format": "float"
},
"heading": {
"type": "number",
"format": "float"
},
"location_name": {
"type": [
"string",
"null"
]
},
"last_speed_kts": {
"type": [
"number",
"null"
],
"format": "float"
},
"is_owner": {
"type": "boolean"
},
"is_crew": {
"type": "boolean"
}
},
"required": [
"name",
"uuid",
"coordinates",
"latitude",
"longitude",
"heading",
"location_name",
"last_speed_kts",
"is_owner",
"is_crew"
]
},
"BoatDetails": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid"
},
"coordinates": {
"type": "string"
},
"latitude": {
"type": "number",
"format": "float"
},
"longitude": {
"type": "number",
"format": "float"
},
"heading": {
"type": "number",
"format": "float"
},
"location_name": {
"type": [
"string",
"null"
]
},
"last_speed_kts": {
"type": [
"number",
"null"
],
"format": "float"
},
"mainsail_hoist": {
"type": [
"number",
"null"
],
"format": "float"
},
"jib_hoist": {
"type": [
"number",
"null"
],
"format": "float"
},
"is_owner": {
"type": "boolean"
},
"is_crew": {
"type": "boolean"
}
},
"required": [
"name",
"uuid",
"coordinates",
"latitude",
"longitude",
"heading",
"location_name",
"last_speed_kts",
"mainsail_hoist",
"jib_hoist",
"is_owner",
"is_crew"
]
},
"BoatsIndexResponse": {
"type": "object",
"properties": {
"boats": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BoatSummary"
}
}
},
"required": [
"boats"
]
},
"BoatShowResponse": {
"type": "object",
"properties": {
"boat": {
"$ref": "#/components/schemas/BoatDetails"
}
},
"required": [
"boat"
]
},
"PortInfo": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid"
},
"distance_nm": {
"type": "number",
"format": "float"
},
"compass_bearing": {
"type": "string"
}
},
"required": [
"name",
"uuid",
"distance_nm",
"compass_bearing"
]
},
"LandInfo": {
"type": "object",
"properties": {
"distance_nm": {
"type": "number",
"format": "float"
}
},
"required": [
"distance_nm"
]
},
"ProximityInfoResponse": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid"
},
"coordinates": {
"type": "string"
},
"closest_port": {
"oneOf": [
{
"$ref": "#/components/schemas/PortInfo"
},
{
"type": "null"
}
]
},
"closest_land": {
"oneOf": [
{
"$ref": "#/components/schemas/LandInfo"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"uuid",
"coordinates",
"closest_port",
"closest_land"
]
},
"PortCall": {
"type": "object",
"properties": {
"port_name": {
"type": "string"
},
"port_uuid": {
"type": "string",
"format": "uuid"
},
"event_type": {
"type": "string"
},
"event_timestamp": {
"type": "string",
"format": "date-time"
}
},
"required": [
"port_name",
"port_uuid",
"event_type",
"event_timestamp"
]
},
"PortHistoryResponse": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid"
},
"total_ports_visited": {
"type": "integer"
},
"recent_port_calls": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PortCall"
}
}
},
"required": [
"name",
"uuid",
"total_ports_visited",
"recent_port_calls"
]
},
"TravelStatsResponse": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid"
},
"period_type": {
"type": "string"
},
"metric_date": {
"type": "string",
"format": "date"
},
"distance_nm": {
"type": "number",
"format": "float"
}
},
"required": [
"name",
"uuid",
"period_type",
"metric_date",
"distance_nm"
]
}
}
},
"paths": {
"/api/v3/globe_boats": {
"get": {
"summary": "Get all boats owned by or crewed by the current user",
"tags": [
"Globe Boats"
],
"operationId": "getGlobeBoats",
"security": [
{
"OAuth2": [
"globe_read"
]
}
],
"parameters": [
{
"name": "Authorization",
"in": "header",
"type": "string",
"required": true,
"description": "Bearer token for OAuth2 authentication",
"schema": {
"type": "string",
"default": "Bearer <token>"
}
}
],
"responses": {
"200": {
"description": "boats returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoatsIndexResponse"
}
}
}
},
"410": {
"description": "user account deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/api/v3/globe_boats/{uuid}": {
"get": {
"summary": "Get details for a specific boat",
"tags": [
"Globe Boats"
],
"operationId": "getGlobeBoat",
"security": [
{
"OAuth2": [
"globe_read"
]
}
],
"parameters": [
{
"name": "Authorization",
"in": "header",
"type": "string",
"required": true,
"description": "Bearer token for OAuth2 authentication",
"schema": {
"type": "string",
"default": "Bearer <token>"
}
},
{
"name": "uuid",
"in": "path",
"required": true,
"description": "Boat UUID",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "boat details returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoatShowResponse"
}
}
}
},
"404": {
"description": "boat not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"410": {
"description": "user account deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/api/v3/globe_boats/{uuid}/proximity_info": {
"get": {
"summary": "Get proximity information (closest port and land) for a boat",
"tags": [
"Globe Boats"
],
"operationId": "getBoatProximityInfo",
"security": [
{
"OAuth2": [
"globe_read"
]
}
],
"parameters": [
{
"name": "Authorization",
"in": "header",
"type": "string",
"required": true,
"description": "Bearer token for OAuth2 authentication",
"schema": {
"type": "string",
"default": "Bearer <token>"
}
},
{
"name": "uuid",
"in": "path",
"required": true,
"description": "Boat UUID",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "proximity information returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProximityInfoResponse"
}
}
}
},
"404": {
"description": "boat not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"410": {
"description": "user account deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/api/v3/globe_boats/{uuid}/port_history": {
"get": {
"summary": "Get port visit history for a boat",
"tags": [
"Globe Boats"
],
"operationId": "getBoatPortHistory",
"security": [
{
"OAuth2": [
"globe_read"
]
}
],
"parameters": [
{
"name": "Authorization",
"in": "header",
"type": "string",
"required": true,
"description": "Bearer token for OAuth2 authentication",
"schema": {
"type": "string",
"default": "Bearer <token>"
}
},
{
"name": "uuid",
"in": "path",
"required": true,
"description": "Boat UUID",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "limit",
"in": "query",
"required": false,
"description": "Maximum number of port calls to return (default: 10)",
"schema": {
"type": "integer",
"default": 10
}
}
],
"responses": {
"200": {
"description": "port history returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PortHistoryResponse"
}
}
}
},
"404": {
"description": "boat not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"410": {
"description": "user account deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/api/v3/globe_boats/{uuid}/travel_stats": {
"get": {
"summary": "Get travel statistics for a boat",
"tags": [
"Globe Boats"
],
"operationId": "getBoatTravelStats",
"security": [
{
"OAuth2": [
"globe_read"
]
}
],
"parameters": [
{
"name": "Authorization",
"in": "header",
"type": "string",
"required": true,
"description": "Bearer token for OAuth2 authentication",
"schema": {
"type": "string",
"default": "Bearer <token>"
}
},
{
"name": "uuid",
"in": "path",
"required": true,
"description": "Boat UUID",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "period_type",
"in": "query",
"required": false,
"description": "Period type: 'daily', 'monthly', 'yearly', or 'overall' (default: 'overall')",
"schema": {
"type": "string",
"enum": [
"daily",
"monthly",
"yearly",
"overall"
],
"default": "overall"
}
},
{
"name": "metric_date",
"in": "query",
"required": false,
"description": "Metric date in YYYY-MM-DD format (or YYYY-MM, or YYYY)",
"schema": {
"type": "string",
"format": "date"
}
}
],
"responses": {
"200": {
"description": "travel stats returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TravelStatsResponse"
}
}
}
},
"404": {
"description": "boat not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"410": {
"description": "user account deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"422": {
"description": "invalid date format",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/api/v3/sailing_progress": {
"get": {
"summary": "Get sailing progress for the current user",
"tags": [
"Sailing Progress"
],
"operationId": "getSailingProgress",
"security": [
{
"OAuth2": [
"sailing_cv"
]
}
],
"parameters": [
{
"name": "Authorization",
"in": "header",
"type": "string",
"required": true,
"description": "Bearer token for OAuth2 authentication",
"schema": {
"type": "string",
"default": "Bearer <token>"
}
}
],
"responses": {
"200": {
"description": "sailing progress found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SailingProgressResponse"
}
}
}
},
"410": {
"description": "user account deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/api/v3/users/me": {
"get": {
"summary": "Get the current user profile",
"tags": [
"Users"
],
"operationId": "getCurrentUser",
"security": [
{
"OAuth2": [
"public"
]
}
],
"parameters": [
{
"name": "Authorization",
"in": "header",
"type": "string",
"required": true,
"description": "Bearer token for OAuth2 authentication",
"schema": {
"type": "string",
"default": "Bearer <token>"
}
}
],
"responses": {
"200": {
"description": "current user returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserMeResponse"
}
}
}
},
"410": {
"description": "user account deleted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
}
}
}