Skip to main content

GraphQL API Reference

GGNomad is GraphQL-first. Product state — destinations, listings (stays, tours, activities, events), availability, itineraries, bookings, trips, and reviews — is served over a single GraphQL endpoint. Every request is authenticated and permission-checked before any data is read or written.

Roadmap items

Operations marked roadmap are committed direction, not yet exposed.

Endpoint​

All operations are sent as POST requests to the GGNomad GraphQL endpoint. The default is production. Set BURDENOFF_ENV=local|alpha|prod to switch:

BURDENOFF_ENVEndpoint
prod (default)https://graphqlworkspaces.burdenoff.com/workspaces/graphql
alphahttps://alphagraphqlworkspaces.burdenoff.com/workspaces/graphql
localhttp://localhost:4003/workspaces/graphql
POST /workspaces/graphql
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

Every field is permission-checked and scoped to the caller's workspace — a query for inventory in another workspace returns nothing. The workspace comes from your authenticated session, never from a client-supplied argument.

Authentication​

OAuth 2.0 / OIDC Interactive and service callers authenticate through single sign-on and send a bearer token:

Authorization: Bearer YOUR_OAUTH_TOKEN

API keys Automation and integration callers use a workspace-scoped API key issued from the developer portal:

Authorization: Bearer YOUR_API_KEY

Discovery & inventory​

List properties (stays) Browse bookable stays in the workspace:

query Properties {
ggnomadProperties(pagination: { skip: 0, take: 20 }) {
id
name
location
pricePerNight
rating
provider { id name type rating }
}
}

Get a single listing Open a stay, tour, activity, or event by id:

query Property($id: ID!) {
ggnomadProperty(id: $id) {
id
name
description
location
pricePerNight
amenities
provider { id name rating }
}
}

The same shape applies to tours (ggnomadTours / ggnomadTour(id)), activities (ggnomadActivities / ggnomadActivity(id)), and events (ggnomadEvents / ggnomadEvent(id)). Transport trips are read via ggnomadTrips.

Bookings & trips​

Create a booking Confirm a reservation against a listing or an event. GGNomad generates a human-readable reference code (GG-{TYPE}-…), validates the target belongs to the caller's workspace, and emits a booking.created event:

mutation Book($input: CreateGgnomadBookingInput!) {
createGgnomadBooking(input: $input) {
id
referenceCode
status # CONFIRMED
paymentStatus # PAID
checkIn
checkOut
}
}
{
"input": {
"targetType": "PROPERTY",
"targetId": "lst_…",
"checkIn": "2026-08-14",
"checkOut": "2026-08-17",
"guests": 2
}
}

List bookings Retrieve the caller's bookings, each on its own timeline:

query Bookings {
ggnomadBookings {
id
referenceCode
status
target { __typename id name }
}
}

Cancel a booking Move a booking to cancelled, with the transition recorded:

mutation Cancel($id: ID!) {
cancelGgnomadBooking(id: $id) { id status }
}

Favorites & wishlist​

Toggle a favorite Save inventory to (or remove it from) a wishlist — the precursor to building an itinerary:

mutation Favorite($targetType: GgnomadBookingType!, $targetId: ID!) {
toggleGgnomadFavorite(targetType: $targetType, targetId: $targetId)
}
query Favorites {
ggnomadFavorites
}

Hosts & operators​

Onboard a provider Register a host or operator (a guesthouse, tour company, or venue):

mutation Provider($input: CreateGgnomadProviderInput!) {
createGgnomadProvider(input: $input) { id name type rating }
}

Create a property listing Add a bookable stay under a provider:

mutation Listing($input: CreateGgnomadPropertyInput!) {
createGgnomadProperty(input: $input) {
id
name
location
pricePerNight
}
}

Analytics & overview Read marketplace and operator analytics:

query Overview {
ggnomadOverviewStats { totalBookings totalRevenue occupancyRate }
ggnomadAnalytics { categoryMix { category count } topProviders { id name } }
}
Roadmap operations

Destinations (GgnomadDestination), reviews (GgnomadReview), itinerary and unified multi-item checkout, and marketplace verification mutations are modelled in the product but are not yet exposed as GraphQL operations. They are committed roadmap — see Core Concepts and the product roadmap.

Error handling​

GGNomad surfaces errors in the standard GraphQL errors array with a typed code in extensions:

{
"errors": [
{
"message": "Workspace context required",
"extensions": { "code": "WORKSPACE_REQUIRED" }
}
]
}

Common codes

  • UNAUTHENTICATED — no valid token
  • FORBIDDEN — the actor lacks the required ggnomad:* permission
  • WORKSPACE_REQUIRED — the request carried no workspace context
  • NOT_FOUND — the target does not exist in this workspace
  • VALIDATION_ERROR — the input failed schema or business validation

Rate limiting​

Quotas are enforced per action, according to the workspace's billing plan. Limits surface as standard headers on the API response:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1623456789

Best practices​

  • Request only the fields you need — GraphQL lets you select exactly the inventory, booking, and provider fields a screen requires
  • Paginate list queries — every list query accepts a pagination argument
  • Handle the typed error codes above rather than parsing messages
  • Respect workspace scoping — never assume an id from one workspace resolves in another

Getting started​

Begin with a read query (ggnomadProperties) to confirm connectivity and your token's ggnomad:read permission, then move on to booking flows. For the full schema and partner integration patterns, see the Developer Guide and API Reference Overview.