Reservation Integration

This documentation will describe the necessary steps to consume the GoTab API in order to create a reservation integration.

GoTab Location Dependencies

  • Products: In order to set up a reservation integration the GoTab location will need to have products. These products will need to be mapped to the resource(s) available for reservation in your system so that when a resource is reserved in your system you know what product_uuid's to pass our API. You can retrieve the data for these products by using the productsList GraphQL query
  • Deposit Product(s): In order for GoTab to create a deposit for a reservation you will need to create a "deposit tab" with a specific deposit product on it. This product will need to be set up in GoTab. It should be set up as what we call an "open product." Meaning that its price is dynamic and you can pass our API whatever amount is appropriate given the reservation total and the rules the operator has defined around taking deposits. This deposit product will also need to be associated to a "deposit processor" in GoTab so that when the product is purchased it creates a record of the stored value. This allows for the deposit to be applied to the "day of tab" later in the guest experience. Often the name of this product in GoTab has something to do with the name of your platform. Something like "Reservations R Us Deposit Product." Lastly, you can (and should) pass our API a name for this product that is dynamic based on what is being reserved and when it is being reserved for.
  • Reservation Deposit Spot: It is usually the case that the operator will want to have their deposit tabs created at a specific spot (think table). Often it includes the name of your platform. Something like "Reservations R Us Deposit Spot." This will need to be created in GoTab.
  • Reservation Spot(s): Depending on the requirements of the integration you may also want to retrieve additional spots from GoTab. You can map these spots to resources in your system so that when you create the "day of tab" in our system you can create it at the appropriate spot. An example of this might be if someone books an hour of golf at "Bay 1" in your platform, upon the guest checking in, you can create the tab at the "Bay 1" spot in GoTab. In order to retrieve this data you will want to use the spotsList GraphQL query.

Creating the "Deposit Tab"

If the requirements of your reservation integration are such that you need to create deposits in GoTab this can accomplished by POSTing to our "Create a tab" route (REST API under ordering). You will want to specify the deposit product and deposit spot in your request. Once this tab is paid for by the guest it will create a deposit that can later be applied to the "day of tab".

Below is an example cURL request to create a "deposit tab." This example includes a reservation_token under items.notes.your_platform_name, which can be optionally provided. If it is provided on the "deposit tab" AND on the "day of tab" our system will enforce validation to make sure the tokens match and the stored deposit is being applied to the correct "day of tab."

The rest of the data under item.notes should be included. This data will show up in our POS UI and will serve as a way for the operator's staff to identify what deposit they should be manually applying to the "day of tab."

# Create the deposit tab
curl --request POST \
  --url "https://gotab.io/api/loc/<LOCATION_UUID>/tabs" \
  --header "Authorization: Bearer <YOUR_BEARER_TOKEN>" \
  --header "Content-Type: application/json" \
  --data '{
    "openTab": true,
    "phoneNumber": "<GUEST_PHONE>",
    "spotUuid": "<DEPOSIT_SPOT_UUID>",
    "name": "<GUEST_NAME>",
    "items": [
      {
        "product": {
          "productUuid": "<DEPOSIT_PRODUCT_UUID>"
        },
        "quantity": 1,
        "name": "<WHAT_IS_BEING_RESERVED_AND_TIME>",
        "unitPrice": "<DEPOSIT_AMOUNT>",
        "notes": {
          "reservations_r_us": {
            "reservation_token": "<RESERVATION_TOKEN>",
            "customer_name": "<CUSTOMER_NAME>",
            "customer_handle": "<CUSTOMER_EMAIL_OR_PHONE>",
            "reservation_end": "12/12/2025 12:00 PM", -- these should be dynamic as well, but follow this format
            "reservation_date": "2025-12-12",
            "reservation_start": "12/12/2054 1:00 PM",
          }
        }
      }
    ]
  }'

Creating the "Day Of Tab"

This will be the tab that is created in GoTab that has the actual products/resources that were booked. The request to create this tab originating from your system can be scheduled to fire, but it's usually better if this request is triggered by some "check in" action made by the operator's staff when the guest arrives on site.

Below is an example cURL request to create a "day of tab." This example includes the optional preAuthSourceTab. The use case for this would be further optimizing the guest experience by copying the payment pre-auth from the guest's deposit tab payment onto this new tab, which would prevent the guest from needing to provide the same payment method upon arrival for their reservation. This is optional. It's a cool feature, but please only use this if the operator has specifically signed off on it and their staff are trained around it.


# Create the day of tab
curl --request POST \
  --url https://gotab.io/api/loc/<YOUR_LOCATION_UUID>/tabs \
  --header 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "openTab": true,
  "spotUuid": <SPOT_UUID>,
  "name": <NAME_ON_RESERVATION_AND_TIME>,
  "items": [
      {
        "product": {
          "productUuid": "<PRODUCT_UUID>"
        },
        "quantity": 1,
        "notes": {
          "reservations_r_us": {
            "reservation_token": "<RESERVATION_TOKEN_FOR_DEPOSIT_VALIDATION>"
          }
        }
      }
    ]
  "orderDetails": {"phoneNumber": <CUSTOMER_PHONE_NUMBER>},
  "preauthSourceTab": {
    "tabUuid": <SOURCE_TAB_UUID>,
    "ccLastFour": <LAST_4_CC_SOURCE_TAB_PAYMENT>,
    "customerId": <SOURCE_TAB_CUSTOMER_ID>
  }
}'