API Reference

Programmatic access to your places, trips, and profile.

#Base URL

https://api.globe.cv/v1

#Authentication

All requests require an API key as a Bearer token in the Authorization header.

Open Settings > API to generate a key. Copy it immediately. It won't be shown again.

curl https://api.globe.cv/v1/places \
  -H "Authorization: Bearer gcv_your_key_here"

#Rate Limiting

Requests are rate limited per API key. When limited, the API returns 429 with a Retry-After header.

TierLimit
Free10 requests/min
Premium60 requests/min
Public (no auth)30 requests/min by IP

#Response Format

JSON with a success boolean. Errors include an error string.

{ "success": true, "places": [...] }
{ "success": false, "error": "Invalid API key" }

#Places

#GET /places

List your places.

ParameterTypeDefaultDescription
pageinteger1Page number
limitinteger50Results per page (max 100)
categorystring-Filter by category
searchstring-Search by name
sortstringdate_addedSort field
orderstringdescasc or desc
formatstringjsonjson or geojson
curl "https://api.globe.cv/v1/places?limit=10&category=city" \
  -H "Authorization: Bearer gcv_your_key_here"

Response:

{
  "success": true,
  "places": [
    {
      "id": "550e8400-...",
      "name": "Tokyo",
      "category": "city",
      "latitude": 35.6762,
      "longitude": 139.6503,
      "identifier": "tokyo-japan"
    }
  ],
  "pagination": { "page": 1, "limit": 10, "total": 42, "pages": 5 }
}

#POST /places

Create a place. Send an array for batch creation (max 10).

ParameterTypeDefaultDescription
namestringrequiredPlace name
latitudenumberrequiredLatitude (-90 to 90)
longitudenumberrequiredLongitude (-180 to 180)
categorystring-Place category
identifierstring-Unique slug
skip_enrichmentbooleanfalseSkip AI enrichment
curl -X POST https://api.globe.cv/v1/places \
  -H "Authorization: Bearer gcv_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"name": "Tokyo", "latitude": 35.6762, "longitude": 139.6503}'

Response:

{ "success": true, "place": { "id": "550e8400-...", "name": "Tokyo", ... } }

#GET /places/:id

Get a single place by ID.

curl https://api.globe.cv/v1/places/PLACE_ID \
  -H "Authorization: Bearer gcv_your_key_here"

#PATCH /places/:id

Update a place. All fields optional.

curl -X PATCH https://api.globe.cv/v1/places/PLACE_ID \
  -H "Authorization: Bearer gcv_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"name": "Tokyo Tower"}'

#DELETE /places/:id

Delete a place.

curl -X DELETE https://api.globe.cv/v1/places/PLACE_ID \
  -H "Authorization: Bearer gcv_your_key_here"

#Profile

#GET /me

Get your profile.

curl https://api.globe.cv/v1/me \
  -H "Authorization: Bearer gcv_your_key_here"

Response:

{
  "success": true,
  "profile": {
    "username": "marcopolo",
    "display_name": "Marco Polo",
    "bio": "Traveler",
    "avatar_url": null
  }
}

#PATCH /me

Update your display name or bio.

curl -X PATCH https://api.globe.cv/v1/me \
  -H "Authorization: Bearer gcv_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"display_name": "New Name"}'

#Trips

#GET /trips

List your trips.

curl https://api.globe.cv/v1/trips \
  -H "Authorization: Bearer gcv_your_key_here"

Response:

{
  "success": true,
  "trips": [{ "id": "550e8400-...", "title": "Japan 2025", "visibility": "public" }]
}

#POST /trips

Create a trip.

ParameterTypeDefaultDescription
titlestringrequiredTrip title
latitudenumberrequiredCenter latitude
longitudenumberrequiredCenter longitude
visibilitystringprivatepublic or private
curl -X POST https://api.globe.cv/v1/trips \
  -H "Authorization: Bearer gcv_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"title": "Japan 2025", "latitude": 35.68, "longitude": 139.69}'

#GET /trips/:id

Get a trip and its segments.

curl https://api.globe.cv/v1/trips/TRIP_ID \
  -H "Authorization: Bearer gcv_your_key_here"

#PATCH /trips/:id

Update title or visibility.

curl -X PATCH https://api.globe.cv/v1/trips/TRIP_ID \
  -H "Authorization: Bearer gcv_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"title": "Updated Title"}'

#DELETE /trips/:id

Delete a trip and all its segments.

curl -X DELETE https://api.globe.cv/v1/trips/TRIP_ID \
  -H "Authorization: Bearer gcv_your_key_here"

#Trip Segments

#GET /trips/:id/segments

List segments for a trip.

curl https://api.globe.cv/v1/trips/TRIP_ID/segments \
  -H "Authorization: Bearer gcv_your_key_here"

#POST /trips/:id/segments

Add a segment.

ParameterTypeDefaultDescription
order_indexintegerrequiredPosition in trip
transport_typestringrequiredflight, train, car, bus, boat, walk, bike, other
titlestring-Segment title
start_datestring-ISO 8601 date
end_datestring-ISO 8601 date
curl -X POST https://api.globe.cv/v1/trips/TRIP_ID/segments \
  -H "Authorization: Bearer gcv_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"order_index": 0, "transport_type": "flight", "title": "Tokyo to Osaka"}'

#PATCH /trips/:id/segments/:segmentId

Update a segment.

curl -X PATCH https://api.globe.cv/v1/trips/TRIP_ID/segments/SEGMENT_ID \
  -H "Authorization: Bearer gcv_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"title": "Updated Segment"}'

#DELETE /trips/:id/segments/:segmentId

Delete a segment.

curl -X DELETE https://api.globe.cv/v1/trips/TRIP_ID/segments/SEGMENT_ID \
  -H "Authorization: Bearer gcv_your_key_here"

#Public Data

No authentication required. Rate limited to 30/min by IP.

#GET /users/:username

Public profile.

curl https://api.globe.cv/v1/users/marcopolo

#GET /users/:username/places

Public places. Pass format=geojson for GeoJSON.

curl https://api.globe.cv/v1/users/marcopolo/places?format=geojson

#GET /users/:username/trips

Public trips. Pass includeSegments=true for full data.

curl https://api.globe.cv/v1/users/marcopolo/trips?includeSegments=true

List featured place categories.

curl https://api.globe.cv/v1/featured-places

Featured places by category.

curl https://api.globe.cv/v1/featured-places/city

#Error Codes

StatusDescription
400Bad request: missing or invalid parameters
401Unauthorized: missing or invalid API key
403Forbidden: place limit reached for your plan
404Not found
405Method not allowed
429Rate limited
500Server error
Questions? support@globe.cv