Flex Plan Services

A Flex Plan Service is the purchased instance of a Flex Plan on a booking. It follows the same lifecycle model as other booking services: it is created in an Option state, confirmed by payment, and may subsequently be expired or (internally) cancelled.

Supported actions: read and write (create via POST, update via PATCH).

Restrictions

A Flex Plan Service can only be created when all of the following are true:

  • Stop-sell window. The departure is more than 60 days away (90 days for National Geographic Signature departures). Inside this window the corresponding Flex Plan reports availability.status of NOT_BOOKABLE.

  • Late-attach window. Flex can only be attached to an existing booking within 48 hours of the original departure confirmation. Optioned Flex services auto-expire at the end of this window if not confirmed by payment.

  • Region eligibility. The booking must not be classified as a CEU (Central European (DACH) - Austria, Switzerland, or Germany) booking. CEU classification is based on the passenger’s resident address for Direct bookings, or the agency’s business address for Agency bookings.

  • One tier per departure service. A departure service can be associated with at most one Flex Plan Service. If travellers on the same departure service require different Flex Tiers, the departure service must first be split into separate services (contact our sales team to arrange this).

  • Agency eligibility. Flex availability can be disabled for an agency or an entire agency chain. If Flex has been switched off for your agency, Flex products will not be purchasable on your bookings.

  • Cannot be Cancelled. Once Confirmed, a Flex Plan Service cannot be Cancelled and is 100% non-refundable.

Statuses

The status field takes one of the following values:

Status

Description

Option

The service has been created but not paid for. It is held until option_expiry_date (the end of the 48-hour late-attach window or the stop-sell boundary, whichever comes first).

Confirmed

The service has been paid in full and is active. The Flex purchase price must be paid in full to confirm - Flex cannot be confirmed on a tour deposit alone.

Expired

The option lapsed without payment, or was expired explicitly via the API.

Cancelled

The service was cancelled by G Adventures staff.

Note

A confirmed Flex Plan Service cannot be cancelled through the API. Cancelled never appears in the status_transitions[] list and is not an accepted PATCH value. Cancellation of a confirmed Flex service is a manual, case-by-case action performed by G Adventures staff - contact our sales team if this is required.

Fields

Name

Type

Description

id (read-only)

String

href (read-only)

Field

name (read-only)

String

The name of this service.

status

String

The current status of the service:

  • Option: The service is being held on option until the option_expiry_date. No deposit or payment is required to hold an option. An Option service can be Expired or Confirmed.

  • On Request: The service has been requested by the client, but the request has not been sent to the local office. All departures with availability status REQUEST_SPACE can not be put on Option, but must be requested. Full payment is required. An On Request service can be Expired with no cancellation fees applied.

  • Request Confirmation: The service has been requested by the client, and the request has been sent by G Adventures to the local office. A Request Confirmation service can be Cancelled with cancellation fees applied.

  • Confirmed: The service is confirmed. Deposit is always required to confirm, and full payment will be required for a departure where FULL_PAYMENT_REQUIRED_TO_BOOK is present in the flags field. A Confirmed service can be Cancelled with cancellation fees applied.

  • Waitlisted: The service is in a waitlist queue. A cancellation on the product will cause the service to automatically be moved to Option. Only product with availability status WAIT_LIST can be Waitlisted. A Waitlisted service can be Cancelled with no cancellation fees applied.

  • Expired: The service is expired. An Option or On Request service is Expired at midnight EST when it reaches its option_expiry_date. A Waitlisted service can be Expired at any time, but will automatically be Expired when a departure reaches availability status REQUEST_SPACE. No cancellation fees will be applied.

  • Request Cancellation: The service has been requested to be Cancelled. Cancellation fees will be applied when it is Cancelld by G Adventures staff (if applicable).

  • Cancelled: The service is cancelled. A Request Confirmation or Confirmed service can be cancelled with cancellation fees applied.

Active service status transitions:

  • Option –> Confirmed/Expired

  • On Request –> Request Confirmation/Expired

  • Request Confirmation –> Request Cancellation

  • Confirmed –> Request Cancellation

  • Waitlisted –> Expired

status_transitions (read-only)

List

A list of status values to which this service can transition.

type (read-only)

String

The type of this resource.

sub_type (read-only)

String

A brief description of this service type.

start_date (read-only)

Date

The start date of this service.

finish_date (read-only)

Date

The finish date of this service.

customers

Field

The customers on this service.

  • id (read-only)

String

  • href (read-only)

Field

  • name

Nested Object

    • legal_first_name (required)

String

Legal first name as it appears on a passport.

    • legal_middle_name

String

Legal middle name as it appears on a passport.

    • legal_last_name (required)

String

Legal last name as it appears on a passport.

    • common_name

String

The name this person likes to be called if different from their legal name.

    • title (required)

String

The title. Valid values are: Mr, Mrs, Ms, and Miss

date_created (read-only)

Datetime

The date/time this service was created, in the standard Dates & Times.

date_confirmed (read-only)

Datetime

The date/time this service had its service status set to Confirmed, in the standard Dates & Times.

date_cancelled (read-only)

Datetime

The date/time this service had its service status set to Cancelled, in the standard Dates & Times.

option_expiry_date (read-only)

Datetime

The date/time when an Option service status will automatically be set to Expired, in the standard Dates & Times.

purchase_price (read-only)

Decimal

The currency-specific purchase price this service was Confirmed at, in the standard Currencies & Prices. The price reflected includes any promotions applied. The price is not locked until the service has its service status set to Confirmed (i.e. the price could change when the service status is on Option).

commission (read-only)

Decimal

The currency-specific commission amount that the booking agent will receive for this service, in the standard Currencies & Prices.

applied_promotion

Nested Object

The promotion applied to this service

  • id (read-only)

String

  • href (read-only)

Field

  • name

String

The name of the promotion used.

  • promotion_code

String

A unique code for this promotion.

  • discount_amount

Decimal

The currency-specific amount that has been discounted from the purchase_price. Add the discount_amount and purchase_price to see the original non-discounted price.

  • commission_rate

Integer

The commission rate for this promotion.

  • terms_and_conditions

String

The promotion applied to this service.

applied_promotions

Field

The promotions applied to this service

  • id (read-only)

String

  • href (read-only)

Field

  • name

String

The name of the promotion used.

  • promotion_code

String

A unique code for this promotion.

  • discount_amount

Decimal

The currency-specific amount that has been discounted from the purchase_price. Add the discount_amount and purchase_price to see the original non-discounted price.

  • commission_rate

Integer

The commission rate for this promotion.

  • terms_and_conditions

String

The promotion applied to this service.

flags (read-only)

List

A list of codes that, when present, require special considerations for a booked service.

The list of departure service flags related to the current status of a request to hike the Inca Trail, or the option booked for services on these special departures:

Service Status Flags

  • SUSPENDED: This departure service has been suspended due to mitigating circumstances out of G Adventures’ control and will not be departing.

Inca Trail Flags

  • ON_INCA_TRAIL: Inca Trail permits have been obtained for all travellers on this service.

  • REQUESTING_INCA_TRAIL: A request to hike the Inca Trail has been submitted. The permits have not yet been obtained for travellers on this service.

  • ON_LARES_TREK: All travellers on this service will be hiking the Lares Trek as the Inca Trail is not available.

  • CUZCO_STAY: All travellers on this service will stay in Cuzco, as either they have chosen this option or the Inca Trail permits are not available for this departure.

  • INCA_TRAIL_UNKNOWN: A request to the local office has been made to confirm availability and additional local intricacies. This is an intermediary state which can occur before REQUESTING_INCA_TRAIL and any of the other states.

booking (read-only)

Reference Object

documents (read-only)

Field

  • id (read-only)

String

  • href (read-only)

Field

  • date_created (required)

Datetime

The time when the resource was created, in the standard Dates & Times.

  • type (read-only)

String

The document type, currently: INVOICE, ATOL_CERTIFICATE, VOUCHER.

  • audience (read-only)

String

The intended audience of this document. Either AGENT or CUSTOMER.

  • booking (read-only)

Reference Object

The related booking resource.

  • mime_type (read-only)

String

The Internet media type.

declined_reason (read-only)

Reference Object

The related declined reason resource.

product (read-only)

Reference Object

A reference to the flex plan itself

associated_services

List

cancellation_terms (read-only)

Reference Object

Reference to the concrete (amount-based) cancellation terms resolved for this service at booking time

flex_plan_addons

List

A list of the flex plan service addons for this service

Get a Flex Plan Service

GET /flex_plan_services/(string: service_id)/

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": "12345",
  "href": "https://rest.gadventures.com/flex_plan_services/12345/",
  "name": "Flex Better",
  "status": "Confirmed",
  "status_transitions": [],
  "type": "flex_plan_services",
  "sub_type": "Flex",
  "start_date": "2025-03-15",
  "finish_date": "2025-03-25",
  "customers": [
    {
      "id": "111",
      "href": "https://rest.gadventures.com/customers/111/",
      "name": {
        "legal_first_name": "John",
        "legal_last_name": "Doe"
      }
    },
    {
      "id": "222",
      "href": "https://rest.gadventures.com/customers/222/",
      "name": {
        "legal_first_name": "Jane",
        "legal_last_name": "Doe"
      }
    }
  ],
  "date_created": "2024-12-01T10:30:00Z",
  "date_confirmed": "2024-12-01T10:30:00Z",
  "date_cancelled": null,
  "option_expiry_date": null,
  "purchase_price": "150.00",
  "commission": "0.00",
  "flags": [],
  "booking": {
    "id": "999",
    "href": "https://rest.gadventures.com/bookings/999/"
  },
  "documents": [],
  "declined_reason": null,
  "product": {
    "id": "111",
    "href": "https://rest.gadventures.com/flex_plans/111/"
  },
  "cancellation_terms": {
    "id": "5678",
    "href": "https://rest.gadventures.com/service_cancellation_terms/5678/"
  },
  "associated_services": [
    {
      "id": "5678",
      "href": "https://rest.gadventures.com/departure_services/5678/",
      "type": "departure_services"
    }
  ],
  "flex_plan_addons": [
    {
      "id": "12345",
      "href": "https://rest.gadventures.com/flex_plan_addons/12345/"
    },
    {
      "id": "67890",
      "href": "https://rest.gadventures.com/flex_plan_addons/67890/"
    }
  ]
}

Create a Flex Plan Service

POST /flex_plan_services/

The referenced departure service must already exist, the booking must not be classified as CEU, and the departure service must not already have a Flex Plan Service attached.

Example request:

POST /flex_plan_services/ HTTP/1.1
Host: rest.gadventures.com
Accept: application/json
Content-Type:application/json

{
    "booking": { "id": "999" },
    "departure_service": { "id": "5678" },
    "product": { "id": "111" }
}

Example response:

HTTP/1.1 201 CREATED
Content-Type: application/json

{
  "id": "12345",
  "href": "https://rest.gadventures.com/flex_plan_services/12345/",
  "name": "Flex Better",
  "status": "Option",
  "status_transitions": ["Confirmed", "Expired"],
  "type": "flex_plan_services",
  "sub_type": "Flex",
  "start_date": "2025-03-15",
  "finish_date": "2025-03-25",
  "date_created": "2024-12-01T10:30:00Z",
  "date_confirmed": null,
  "date_cancelled": null,
  "option_expiry_date": "2024-12-03T10:30:00Z",
  "purchase_price": "150.00",
  "commission": "0.00",
  "flags": [],
  "booking": {
    "id": "999",
    "href": "https://rest.gadventures.com/bookings/999/"
  },
  "documents": [],
  "declined_reason": null,
  "product": {
    "id": "111",
    "href": "https://rest.gadventures.com/flex_plans/111/"
  },
  "cancellation_terms": {
    "id": "5678",
    "href": "https://rest.gadventures.com/service_cancellation_terms/5678/"
  },
  "associated_services": [
    {
      "id": "5678",
      "href": "https://rest.gadventures.com/departure_services/5678/",
      "type": "departure_services"
    }
  ],
  "flex_plan_addons": []
}

The new service is created in the Option status with its option_expiry_date set.

Note

A Flex Plan Service never affects the booking’s date of first travel - that remains determined by the departure service’s start date.

Confirmation is driven by payment: once the Flex purchase price is paid in full, the service transitions to Confirmed, date_confirmed is set, and any bundled ancillary products are ordered and attached as Flex Plan Service Addons. From the moment the Flex service covers the departure service, the departure service’s Service Cancellation Terms resolve to this plan’s flex terms instead of the departure’s generic terms.

Update a Flex Plan Service

PATCH /flex_plan_services/(string: service_id)/

The only permitted update is a status transition.

Example request:

PATCH /flex_plan_services/12345/ HTTP/1.1
Host: rest.gadventures.com
Accept: application/json
Content-Type:application/json

{
    "status": "Expired"
}

A successful request returns 200 OK with the updated representation of the service. Only statuses present in the status_transitions[] list are accepted; attempting to transition to Cancelled returns an error.

List services on a Booking

Flex Plan Services appear alongside other services in the booking services list, each in a summary representation:

GET /bookings/(string: booking_id)/services/
{
  "id": "111",
  "href": "https://rest.gadventures.com/flex_plan_services/111/",
  "name": "Flex Better",
  "status": "Confirmed",
  "status_transitions": [],
  "type": "flex_plan_services",
  "sub_type": "Flex",
  "start_date": "2026-08-01",
  "finish_date": "2026-10-02",
  "customers": [
    {
      "id": "222",
      "href": "https://rest.gadventures.com/customers/222/",
      "name": {
        "legal_first_name": "Flexie",
        "legal_middle_name": "McFlex",
        "legal_last_name": "Flex",
        "common_name": "Flexie",
        "title": "Mx"
      }
    }
  ]
}

Exercising the Flex terms

Exercising a Flex service means cancelling the associated departure service while a confirmed Flex service covers it. When the departure service is cancelled:

  • finish_date on the Flex Plan Service is set to the date of exercise.

  • The linked Service Cancellation Terms are applied - refunds, Future Travel Credits (FTCs), and penalties are calculated from the amount-based windows resolved for the departure service, with the window containing the cancellation date determining the refund_amount and travel_credit_amount.

  • Any bundled add-on products are cancelled alongside the service.

  • FTCs issued by Flex carry the booking and travel windows defined for the purchased Flex Tier (12 and 24 months from issuance respectively for G Adventures tiers).

The Flex service itself remains non-refundable regardless of the outcome of the exercise.