{
  "openapi": "3.1.0",
  "info": {
    "version": "2.0",
    "title": "GoTab API",
    "license": {
      "name": "ISC",
      "identifier": "ISC"
    },
    "description": "The GoTab REST API lets you integrate with the GoTab platform for ordering, payments, catalog management, and more.\n\n## Authentication\n\nAll API requests require a Bearer token. Obtain one via the **Generate Access Token** endpoint (`POST /oauth/token`) using your `api_access_id` and `api_access_secret`.\n\nTokens expire after 24 hours. Use the **Refresh Token** endpoint (`POST /oauth/refresh`) to get a new token without re-authenticating.\n\n## Base URL\n\n```\nhttps://gotab.io/api\n```\n\n## Rate Limits\n\n- Standard: 100 requests/minute\n- Premium: 1,000 requests/minute\n\n## Need Help?\n\nContact developer support at api.support@gotab.io or visit https://docs.gotab.io",
    "contact": {
      "name": "GoTab Developer Support",
      "email": "api.support@gotab.io",
      "url": "https://docs.gotab.io"
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Access token obtained from POST /oauth/token. Pass as: Authorization: Bearer <token>"
      }
    },
    "schemas": {
      "ApiErrorWarningModel": {
        "description": "The standard format for errors and warnings.",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "type": {
              "description": "A unique error code representing the error.",
              "type": "string"
            },
            "message": {
              "description": "A human readable message describing the error.",
              "type": "string"
            }
          }
        }
      },
      "ApiResponseModel": {
        "properties": {
          "data": {
            "type": "object"
          },
          "errors": {
            "$ref": "#/components/schemas/ApiErrorWarningModel"
          },
          "warnings": {
            "$ref": "#/components/schemas/ApiErrorWarningModel"
          }
        }
      },
      "ArchiveScheduleInput": {
        "type": "object",
        "properties": {
          "schedule": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "properties": {
                  "laborScheduleUuid": {
                    "type": "string"
                  }
                },
                "required": [
                  "laborScheduleUuid"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "required": [
          "schedule"
        ],
        "additionalProperties": false
      },
      "AttachModifierProduct": {
        "anyOf": [
          {
            "type": "string",
            "description": "The product identifier"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string",
                "description": "An optional description of the modifier."
              },
              "externalId": {
                "type": "string",
                "description": "An optional external identifier for this modifier"
              },
              "shortName": {
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "price": {
                "type": "integer",
                "default": 0,
                "description": "Price in cents"
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Whether this modifier is enabled"
              },
              "require": {
                "type": "boolean",
                "default": false,
                "description": "Whether this modifier is required"
              },
              "allowOptionQuantities": {
                "type": "boolean",
                "default": false
              },
              "productId": {
                "type": "string",
                "description": "The product identifier"
              },
              "productUuid": {
                "type": "string",
                "description": "The product identifier"
              },
              "sku": {
                "type": "string",
                "description": "A custom sku to attach to this modifier. When not provided one will be generated."
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "AuthTokenModel": {
        "required": [
          "token",
          "refreshToken",
          "tokenType",
          "initiated",
          "expires",
          "expiresIn"
        ],
        "properties": {
          "token": {
            "type": "string"
          },
          "refreshToken": {
            "type": "string"
          },
          "tokenType": {
            "type": "string"
          },
          "initiated": {
            "type": "number"
          },
          "expires": {
            "type": "number"
          },
          "expiresIn": {
            "type": "number"
          }
        }
      },
      "CreateScheduleInput": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "GoTab user ID"
          },
          "externalUserId": {
            "type": "string",
            "description": "External ID of a user already mapped to their GoTab user"
          },
          "startTime": {
            "type": "string",
            "description": "Start time of the shift in UTC"
          },
          "endTime": {
            "type": "string",
            "description": "End time of the shift in UTC"
          },
          "userRoleId": {
            "type": "string",
            "description": "GoTab user role ID"
          },
          "externalUserRoleId": {
            "type": "string",
            "description": "External ID of a user role already mapped to a GoTab user role"
          },
          "fulfilled": {
            "type": "string",
            "description": "Time of shift fulfillment in UTC"
          }
        },
        "required": [
          "userId",
          "startTime",
          "endTime"
        ],
        "additionalProperties": false
      },
      "CreateUserInput": {
        "description": "The payment method",
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "The first name of the user"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user"
          },
          "acl": {
            "type": "string",
            "description": "The access control list for the user"
          },
          "displayName": {
            "type": "string",
            "description": "A desired display name for the user, normally used in interfaces. If not supplied will default to `firstName + lastName`"
          },
          "phoneNumber": {
            "type": "string",
            "description": "The phone number of the user. If not supplied the user will be created as a restricted user with limited permission"
          },
          "posPin": {
            "type": "string",
            "description": "The POS pin for the user. The length of the pin should match the length configured for the location"
          },
          "payRate": {
            "type": "number",
            "description": "The pay rate of the user in the smallest unit of the currency of the location. Used as the default pay rate of any supplied user roles. Has no effect if `userRoles` is not supplied"
          },
          "userRoles": {
            "type": "array",
            "description": "The user roles for the user. Must match an existing role at the location",
            "items": {
              "type": "object",
              "properties": {
                "userRole": {
                  "type": "string",
                  "description": "The userRoleUuid or name of the user role to assign to the user"
                },
                "payRate": {
                  "type": "number",
                  "description": "The pay rate of the user in the smallest unit of the currency of the location. Overrides the pay rate of the user role itself. If not provided will use the pay rate of the request if any"
                }
              }
            }
          },
          "sendSms": {
            "type": "boolean",
            "description": "Whether to send a SMS to the created user. Defaults to `false`"
          },
          "email": {
            "type": "string",
            "description": "The email address of the user"
          },
          "aclAgentConfig": {
            "type": "object",
            "description": "Agent-specific configuration to store on the user's acl (e.g. `clockin_enforced`, or an external system's user id). Fully replaces any existing value for this location's acl row — it does not merge, so a partial write clears the keys it omits. Read the current value from `GET /users` and merge client-side to preserve keys you do not own. Omit the field to leave the stored config untouched; pass `{}` to clear it."
          },
          "metadata": {
            "type": "object",
            "description": "Arbitrary additional metadata to store on the user (e.g. an external system's user id). Shallow-merged with existing metadata."
          }
        }
      },
      "CustomerChallengeRequest": {
        "type": "object",
        "properties": {
          "customerHandle": {
            "type": "string",
            "description": "Customer handle to challenge (e.g. phone number or email)."
          }
        },
        "required": [
          "customerHandle"
        ],
        "additionalProperties": false
      },
      "CustomerChallengeResponse": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string",
            "description": "Opaque identifier for the customer record associated to the challenge."
          }
        },
        "required": [
          "customerId"
        ],
        "additionalProperties": false
      },
      "CustomerVerifyRequest": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "string",
            "description": "Unresolved GoTab customer identifier to verify."
          },
          "verificationCode": {
            "type": "string",
            "description": "OTP verification code for the customer."
          },
          "paymentSessionId": {
            "type": "string",
            "description": "Optional payment session identifier for issuing a wallet token."
          },
          "tabUuid": {
            "type": "string",
            "description": "Optional tab UUID associated to the payment session."
          },
          "locationId": {
            "type": "string",
            "description": "Optional location ID associated to the tab."
          }
        },
        "required": [
          "customerId",
          "verificationCode"
        ],
        "additionalProperties": false
      },
      "CustomerVerifyResponse": {
        "type": "object",
        "properties": {
          "verified": {
            "type": "boolean",
            "description": "Whether the customer verification succeeded."
          },
          "customerId": {
            "type": "string",
            "description": "Resolved customer_id"
          },
          "paymentSessionToken": {
            "type": "string",
            "description": "Optional payment session token returned after successful verification."
          }
        },
        "required": [
          "verified"
        ],
        "additionalProperties": false
      },
      "ErrorAlertsModel": {
        "type": "object",
        "properties": {
          "alerts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiErrorWarningModel"
            }
          }
        }
      },
      "IntegrationCustomerInput": {
        "description": "The integration customer input",
        "type": "object",
        "properties": {
          "customerFirstName": {
            "type": "string",
            "description": "The first name of the customer"
          },
          "customerLastName": {
            "type": "string",
            "description": "The last name of the customer"
          },
          "handle": {
            "type": "string",
            "description": "The phone number for the customer"
          }
        }
      },
      "IntegrationCustomerResponse": {
        "description": "The integration customer response",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "The name of the customer"
            },
            "handle": {
              "type": "string",
              "description": "The phone number for the customer"
            },
            "customer_profile_uuid": {
              "type": "string",
              "description": "The customerProfileUuid assigned to the customer"
            }
          }
        }
      },
      "InventoryComponent": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": [
              "string",
              "null"
            ]
          },
          "units": {
            "type": "string"
          },
          "price": {
            "type": [
              "string",
              "null"
            ]
          },
          "stock_level": {
            "type": [
              "number",
              "null"
            ]
          },
          "inventory_level": {
            "type": [
              "number",
              "null"
            ]
          },
          "impacts_availability": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "parent_product_id": {},
          "parent_product_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "minus_one_components": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string"
                },
                "conversion_factor": {
                  "type": "number"
                }
              }
            }
          },
          "plus_one_components": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string"
                },
                "conversion_factor": {
                  "type": "number"
                }
              }
            }
          },
          "product_ids": {
            "type": "array",
            "items": {}
          },
          "products": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "product_id": {},
                "product_uuid": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "is_lowest_level": {
            "type": "boolean"
          },
          "kds_visible": {
            "type": "boolean"
          },
          "router_ids": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer"
            }
          }
        },
        "required": [
          "sku",
          "name",
          "units",
          "minus_one_components",
          "plus_one_components",
          "product_ids",
          "products",
          "is_lowest_level",
          "kds_visible"
        ]
      },
      "InventoryItem": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "productUuid": {
            "type": "string"
          },
          "externalId": {
            "type": "string"
          },
          "variants": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "sku": {
                  "type": "string"
                },
                "isStocked": {
                  "type": "boolean"
                },
                "isDetached": {
                  "type": "boolean"
                },
                "isTracked": {
                  "type": "boolean"
                },
                "quantity": {
                  "type": "integer"
                },
                "mappings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "name",
                "sku",
                "isStocked",
                "isDetached",
                "isTracked",
                "quantity",
                "mappings"
              ],
              "additionalProperties": false
            }
          },
          "updatedAt": {
            "type": "string"
          }
        },
        "required": [
          "productId",
          "productUuid",
          "externalId",
          "variants",
          "updatedAt"
        ],
        "additionalProperties": false
      },
      "InventoryProduct": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "locationId": {
            "type": "string"
          },
          "productUuid": {
            "type": "string"
          },
          "externalId": {
            "type": "string"
          },
          "variants": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "productId": {
                  "type": "string"
                },
                "locationId": {
                  "type": "string"
                },
                "inventoryId": {
                  "type": "string"
                },
                "externalInventoryId": {
                  "type": "string",
                  "description": "Deprecated: use `external_sku` instead. The external inventory id mapped to this variant inventory."
                },
                "externalSku": {
                  "type": "string",
                  "description": "The external sku mapped to this variant inventory."
                },
                "sku": {
                  "type": "string",
                  "description": "The GoTab assigned SKU of the variant. This property cannot be updated."
                },
                "name": {
                  "type": "string"
                },
                "variant": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Variant Designations - A record of variant names mapped to the variant value. Eg: `{\"size\": \"large\", \"color\": \"red\"}`. This designation uniquely identifies an inventory product variant."
                },
                "isStocked": {
                  "type": "boolean"
                },
                "isDetached": {
                  "type": "boolean"
                },
                "isTracked": {
                  "type": "boolean"
                },
                "stockLevel": {
                  "type": "number"
                },
                "externalSkuIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Deprecated: use `barcodes` instead. A list of external SKU ids (eg barcodes) mapped to the product variant."
                },
                "barcodes": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "A list of barcodes mapped to the product variant."
                }
              },
              "required": [
                "productId",
                "locationId",
                "inventoryId",
                "externalInventoryId",
                "externalSku",
                "sku",
                "name",
                "variant",
                "isStocked",
                "isDetached",
                "isTracked",
                "stockLevel",
                "externalSkuIds"
              ],
              "additionalProperties": false
            }
          },
          "name": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          }
        },
        "required": [
          "productId",
          "locationId",
          "productUuid",
          "externalId",
          "variants",
          "name",
          "updatedAt"
        ],
        "additionalProperties": false
      },
      "InventoryTransferInput": {
        "type": "object",
        "properties": {
          "supplierId": {
            "type": "number",
            "description": "An external ID of the integrator or partner."
          },
          "adjustment": {
            "type": "number",
            "description": "Quantity of inventory being transferred."
          },
          "adjustmentReason": {
            "type": "string",
            "description": "A reason from an enumerated list: RECOUNT, RECEIVED, LOST, THEFT"
          },
          "cost": {
            "type": "number",
            "description": "Cost of goods being transferred."
          },
          "source": {
            "type": "object",
            "properties": {
              "sku": {
                "type": "string",
                "description": "The GoTab assigned SKU. This property cannot be updated."
              },
              "locationUuid": {
                "type": "string",
                "description": "The UUID of the GoTab location initiating the transfer."
              },
              "supplierId": {
                "type": "number",
                "description": "An external ID of the integrator or partner initiating the transfer."
              }
            },
            "required": [
              "sku"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "supplierId",
          "adjustment",
          "adjustmentReason"
        ],
        "additionalProperties": false
      },
      "InventoryTransferSource": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string",
            "description": "The GoTab assigned SKU. This property cannot be updated."
          },
          "locationUuid": {
            "type": "string",
            "description": "The UUID of the GoTab location initiating the transfer."
          },
          "supplierId": {
            "type": "number",
            "description": "An external ID of the integrator or partner initiating the transfer."
          }
        },
        "required": [
          "sku"
        ],
        "additionalProperties": false
      },
      "ItemInput": {
        "anyOf": [
          {
            "type": "object",
            "required": [
              "product",
              "quantity"
            ],
            "properties": {
              "product": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "categoryName": {
                        "type": "string",
                        "description": "The name of the category the product belongs to."
                      },
                      "categoryUuid": {
                        "type": "string",
                        "description": "The unique uuid of the category the product belongs to."
                      },
                      "categoryId": {
                        "type": "string",
                        "description": "The unique id of the category the product belongs to."
                      },
                      "productName": {
                        "type": "string",
                        "description": "The name of the product."
                      },
                      "productId": {
                        "type": "string",
                        "description": "The unique id of the product."
                      },
                      "productUuid": {
                        "type": "string",
                        "description": "The unique uuid of the product."
                      }
                    }
                  },
                  {
                    "type": "string",
                    "description": "The unique uuid or id of the product to be added."
                  }
                ]
              },
              "name": {
                "type": "string",
                "description": "A custom name given to the item. This name is visible on the receipt and KDS.",
                "minLength": 3,
                "maxLength": 20
              },
              "unitPrice": {
                "type": "integer",
                "description": "The unit price of the open item in the lowest currency unit. ie cents.",
                "minimum": 1,
                "maximum": 100000
              },
              "quantity": {
                "type": "number",
                "description": "The quantity of items to be ordered."
              },
              "itemUnits": {
                "type": "string",
                "description": "Units that this item represents, e.g. 'oz', 'lbs', 'bottles', 'pints'. This value impacts how the item is viewed on the receipt."
              },
              "modifiers": {
                "$ref": "#/components/schemas/Modifiers"
              }
            },
            "title": "Catalog Item (v2)",
            "description": "An item created from a product in the catalog resolved by passing in properties of the item"
          },
          {
            "type": "object",
            "title": "Catalog Item (v1)",
            "description": "An item created from a product in the catalog resolved by passing in the productUuid. This is deprecated. Use Catalog Item (v2) instead",
            "required": [
              "productUuid",
              "quantity"
            ],
            "properties": {
              "externalId": {
                "type": "string",
                "description": "An external identifier for the item."
              },
              "quantity": {
                "type": "number",
                "description": "The quantity of items to be ordered."
              },
              "productUuid": {
                "type": "string",
                "description": "The unique uuid of the product to be added."
              },
              "modifiers": {
                "$ref": "#/components/schemas/Modifiers"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "quantity",
              "name"
            ],
            "properties": {
              "externalId": {
                "type": "string",
                "description": "An external identifier for the open item."
              },
              "quantity": {
                "type": "number",
                "description": "The quantity of items to be ordered.",
                "minimum": 1
              },
              "name": {
                "type": "string",
                "description": "A name given to the open item. This name is visible on the receipt and KDS.",
                "minLength": 3,
                "maxLength": 20
              },
              "taxRate": {
                "oneOf": [
                  {
                    "type": "number",
                    "description": "A custom tax rate percentage to be applied to the item.",
                    "minimum": 0,
                    "maximum": 1
                  },
                  {
                    "type": "string",
                    "description": "The unique identifier of a ***tax rate group*** to be applied to the item. Ex: `txr_xxxxxxxxxxxxxxxx`."
                  },
                  {
                    "type": "array",
                    "description": "An array of tax identifiers that will resolve to a ***tax rate group*** if one exists and be applied to the item.",
                    "items": {
                      "type": "string",
                      "description": "The unique identifier of a _tax_ to be applied to the open item. Ex: `tax_xxxxxxxxxxxxxxxx`."
                    }
                  }
                ]
              },
              "unitPrice": {
                "type": "integer",
                "description": "The unit price of the open item in the lowest currency unit. ie cents.",
                "minimum": 1,
                "maximum": 100000
              },
              "itemUnits": {
                "type": "string",
                "description": "Units that this item represents, e.g. 'oz', 'lbs', 'bottles', 'pints'. This value impacts how the item is viewed on the receipt."
              },
              "modifiers": {
                "$ref": "#/components/schemas/Modifiers"
              }
            },
            "title": "Open Item",
            "description": "An pen item"
          }
        ]
      },
      "Modifier": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string",
                "description": "An optional description of the modifier."
              },
              "externalId": {
                "type": "string",
                "description": "An optional external identifier for this modifier"
              },
              "shortName": {
                "type": [
                  "string",
                  "null"
                ],
                "default": null
              },
              "price": {
                "type": "integer",
                "default": 0,
                "description": "Price in cents"
              },
              "enabled": {
                "type": "boolean",
                "default": true,
                "description": "Whether this modifier is enabled"
              },
              "require": {
                "type": "boolean",
                "default": false,
                "description": "Whether this modifier is required"
              },
              "allowOptionQuantities": {
                "type": "boolean",
                "default": false
              },
              "type": {
                "type": "string",
                "enum": [
                  "checkbox"
                ]
              },
              "minCount": {
                "type": [
                  "number",
                  "null"
                ],
                "minimum": 0,
                "default": 0
              },
              "maxCount": {
                "type": [
                  "number",
                  "null"
                ],
                "minimum": 1
              },
              "default": {
                "type": "boolean",
                "default": false
              },
              "product": {
                "type": "string",
                "description": "An optional inventory product to associated with this modifier."
              }
            },
            "required": [
              "name",
              "type"
            ],
            "additionalProperties": false,
            "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/name"
              },
              "description": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/description"
              },
              "externalId": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/externalId"
              },
              "shortName": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/shortName"
              },
              "price": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/price"
              },
              "enabled": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/enabled"
              },
              "require": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/require"
              },
              "allowOptionQuantities": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/allowOptionQuantities"
              },
              "type": {
                "type": "string",
                "enum": [
                  "multi"
                ]
              },
              "minCount": {
                "type": "number",
                "minimum": 0,
                "default": 0
              },
              "maxCount": {
                "type": "number",
                "minimum": 1
              },
              "options": {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Modifier/anyOf/0"
                    },
                    {
                      "type": "string",
                      "description": "The name of the modifier. Defaults will be used for all other fields"
                    }
                  ],
                  "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
                },
                "description": "Multi Modifier Options - The options for this multi modifier"
              }
            },
            "required": [
              "name",
              "type",
              "options"
            ],
            "additionalProperties": false,
            "description": "Multi Modifier - A modifier allowing multiple checkbox modifiers to be selected"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/name"
              },
              "description": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/description"
              },
              "externalId": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/externalId"
              },
              "shortName": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/shortName"
              },
              "price": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/price"
              },
              "enabled": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/enabled"
              },
              "require": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/require"
              },
              "allowOptionQuantities": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/allowOptionQuantities"
              },
              "type": {
                "type": "string",
                "enum": [
                  "variant"
                ]
              },
              "minCount": {
                "$ref": "#/components/schemas/Modifier/anyOf/1/properties/minCount"
              },
              "maxCount": {
                "$ref": "#/components/schemas/Modifier/anyOf/1/properties/maxCount"
              },
              "options": {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "name": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/name"
                        },
                        "description": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/description"
                        },
                        "externalId": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/externalId"
                        },
                        "shortName": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/shortName"
                        },
                        "enabled": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/enabled"
                        },
                        "require": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/require"
                        },
                        "allowOptionQuantities": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/allowOptionQuantities"
                        },
                        "type": {
                          "type": "string",
                          "enum": [
                            "variant-item"
                          ],
                          "default": "variant-item"
                        },
                        "minCount": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/minCount"
                        },
                        "maxCount": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/maxCount"
                        },
                        "default": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/default"
                        },
                        "product": {
                          "$ref": "#/components/schemas/Modifier/anyOf/0/properties/product"
                        },
                        "variantId": {
                          "type": "string",
                          "description": "The unique identifier of the variant this option represents"
                        }
                      },
                      "required": [
                        "name"
                      ],
                      "additionalProperties": false,
                      "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
                    },
                    {
                      "type": "string"
                    }
                  ],
                  "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
                },
                "description": "Variant Options - The options for this variant modifier"
              }
            },
            "required": [
              "name",
              "type",
              "options"
            ],
            "additionalProperties": false,
            "description": "Variant Modifier - A modifier representing a variant"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/name"
              },
              "description": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/description"
              },
              "externalId": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/externalId"
              },
              "shortName": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/shortName"
              },
              "price": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/price"
              },
              "enabled": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/enabled"
              },
              "require": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/require"
              },
              "allowOptionQuantities": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/allowOptionQuantities"
              },
              "type": {
                "type": "string",
                "enum": [
                  "select"
                ]
              },
              "enum": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The options for this modifier"
              }
            },
            "required": [
              "name",
              "type",
              "enum"
            ],
            "additionalProperties": false,
            "description": "A modifier intended to show a list of options to the user as a dropdown and allowing a single selection"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/name"
              },
              "description": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/description"
              },
              "externalId": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/externalId"
              },
              "shortName": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/shortName"
              },
              "price": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/price"
              },
              "enabled": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/enabled"
              },
              "require": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/require"
              },
              "allowOptionQuantities": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/allowOptionQuantities"
              },
              "type": {
                "type": "string",
                "enum": [
                  "textarea"
                ]
              },
              "minLength": {
                "type": "number",
                "minimum": 0
              },
              "maxLength": {
                "type": "number",
                "minimum": 1
              },
              "rows": {
                "type": "number",
                "minimum": 1
              }
            },
            "required": [
              "name",
              "type"
            ],
            "additionalProperties": false,
            "description": "Open Text Modifier - A modifier allowing arbitrary text input"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/name"
              },
              "description": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/description"
              },
              "externalId": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/externalId"
              },
              "shortName": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/shortName"
              },
              "price": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/price"
              },
              "enabled": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/enabled"
              },
              "require": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/require"
              },
              "allowOptionQuantities": {
                "$ref": "#/components/schemas/Modifier/anyOf/0/properties/allowOptionQuantities"
              },
              "type": {
                "type": "string",
                "enum": [
                  "radio"
                ]
              },
              "enum": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The options for this modifier"
              }
            },
            "required": [
              "name",
              "type",
              "enum"
            ],
            "additionalProperties": false,
            "description": "Radio Modifier - A modifier intended to show a list of options to the user as a radio button group and allowing a single selection"
          }
        ]
      },
      "ModifierInput": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "key": {
                "type": "string",
                "description": "The key of the modifier."
              },
              "quantity": {
                "type": "number",
                "description": "The quantity of the modifier."
              }
            },
            "title": "Option (v1)"
          },
          {
            "type": "object",
            "properties": {
              "optionGroupHash": {
                "type": "string",
                "description": "The hash of the option group."
              },
              "options": {
                "type": "array",
                "description": "A list of options of the option group.",
                "items": {
                  "$ref": "#/components/schemas/OptionInput"
                }
              }
            },
            "title": "Option (v2)"
          }
        ]
      },
      "ModifierOrModifierReference": {
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string",
                    "description": "An optional description of the modifier."
                  },
                  "externalId": {
                    "type": "string",
                    "description": "An optional external identifier for this modifier"
                  },
                  "shortName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "default": null
                  },
                  "price": {
                    "type": "integer",
                    "default": 0,
                    "description": "Price in cents"
                  },
                  "enabled": {
                    "type": "boolean",
                    "default": true,
                    "description": "Whether this modifier is enabled"
                  },
                  "require": {
                    "type": "boolean",
                    "default": false,
                    "description": "Whether this modifier is required"
                  },
                  "allowOptionQuantities": {
                    "type": "boolean",
                    "default": false
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "checkbox"
                    ]
                  },
                  "minCount": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 0,
                    "default": 0
                  },
                  "maxCount": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "minimum": 1
                  },
                  "default": {
                    "type": "boolean",
                    "default": false
                  },
                  "product": {
                    "type": "string",
                    "description": "An optional inventory product to associated with this modifier."
                  }
                },
                "required": [
                  "name",
                  "type"
                ],
                "additionalProperties": false,
                "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/name"
                  },
                  "description": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/description"
                  },
                  "externalId": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/externalId"
                  },
                  "shortName": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/shortName"
                  },
                  "price": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/price"
                  },
                  "enabled": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/enabled"
                  },
                  "require": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/require"
                  },
                  "allowOptionQuantities": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/allowOptionQuantities"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "multi"
                    ]
                  },
                  "minCount": {
                    "type": "number",
                    "minimum": 0,
                    "default": 0
                  },
                  "maxCount": {
                    "type": "number",
                    "minimum": 1
                  },
                  "options": {
                    "type": "array",
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0"
                        },
                        {
                          "type": "string",
                          "description": "The name of the modifier. Defaults will be used for all other fields"
                        }
                      ],
                      "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
                    },
                    "description": "Multi Modifier Options - The options for this multi modifier"
                  }
                },
                "required": [
                  "name",
                  "type",
                  "options"
                ],
                "additionalProperties": false,
                "description": "Multi Modifier - A modifier allowing multiple checkbox modifiers to be selected"
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/name"
                  },
                  "description": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/description"
                  },
                  "externalId": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/externalId"
                  },
                  "shortName": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/shortName"
                  },
                  "price": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/price"
                  },
                  "enabled": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/enabled"
                  },
                  "require": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/require"
                  },
                  "allowOptionQuantities": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/allowOptionQuantities"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "variant"
                    ]
                  },
                  "minCount": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/1/properties/minCount"
                  },
                  "maxCount": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/1/properties/maxCount"
                  },
                  "options": {
                    "type": "array",
                    "items": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "name": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/name"
                            },
                            "description": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/description"
                            },
                            "externalId": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/externalId"
                            },
                            "shortName": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/shortName"
                            },
                            "enabled": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/enabled"
                            },
                            "require": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/require"
                            },
                            "allowOptionQuantities": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/allowOptionQuantities"
                            },
                            "type": {
                              "type": "string",
                              "enum": [
                                "variant-item"
                              ],
                              "default": "variant-item"
                            },
                            "minCount": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/minCount"
                            },
                            "maxCount": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/maxCount"
                            },
                            "default": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/default"
                            },
                            "product": {
                              "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/product"
                            },
                            "variantId": {
                              "type": "string",
                              "description": "The unique identifier of the variant this option represents"
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "additionalProperties": false,
                          "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
                        },
                        {
                          "type": "string"
                        }
                      ],
                      "description": "Checkbox Modifier - A modifier that can either be checked or unchecked"
                    },
                    "description": "Variant Options - The options for this variant modifier"
                  }
                },
                "required": [
                  "name",
                  "type",
                  "options"
                ],
                "additionalProperties": false,
                "description": "Variant Modifier - A modifier representing a variant"
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/name"
                  },
                  "description": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/description"
                  },
                  "externalId": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/externalId"
                  },
                  "shortName": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/shortName"
                  },
                  "price": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/price"
                  },
                  "enabled": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/enabled"
                  },
                  "require": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/require"
                  },
                  "allowOptionQuantities": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/allowOptionQuantities"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "select"
                    ]
                  },
                  "enum": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "The options for this modifier"
                  }
                },
                "required": [
                  "name",
                  "type",
                  "enum"
                ],
                "additionalProperties": false,
                "description": "A modifier intended to show a list of options to the user as a dropdown and allowing a single selection"
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/name"
                  },
                  "description": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/description"
                  },
                  "externalId": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/externalId"
                  },
                  "shortName": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/shortName"
                  },
                  "price": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/price"
                  },
                  "enabled": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/enabled"
                  },
                  "require": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/require"
                  },
                  "allowOptionQuantities": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/allowOptionQuantities"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "textarea"
                    ]
                  },
                  "minLength": {
                    "type": "number",
                    "minimum": 0
                  },
                  "maxLength": {
                    "type": "number",
                    "minimum": 1
                  },
                  "rows": {
                    "type": "number",
                    "minimum": 1
                  }
                },
                "required": [
                  "name",
                  "type"
                ],
                "additionalProperties": false,
                "description": "Open Text Modifier - A modifier allowing arbitrary text input"
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/name"
                  },
                  "description": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/description"
                  },
                  "externalId": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/externalId"
                  },
                  "shortName": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/shortName"
                  },
                  "price": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/price"
                  },
                  "enabled": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/enabled"
                  },
                  "require": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/require"
                  },
                  "allowOptionQuantities": {
                    "$ref": "#/components/schemas/ModifierOrModifierReference/anyOf/0/anyOf/0/properties/allowOptionQuantities"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "radio"
                    ]
                  },
                  "enum": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "The options for this modifier"
                  }
                },
                "required": [
                  "name",
                  "type",
                  "enum"
                ],
                "additionalProperties": false,
                "description": "Radio Modifier - A modifier intended to show a list of options to the user as a radio button group and allowing a single selection"
              }
            ]
          },
          {
            "type": "string",
            "description": "modifier_uuid"
          },
          {
            "type": "object",
            "properties": {
              "modifierUuid": {
                "type": "string"
              }
            },
            "required": [
              "modifierUuid"
            ],
            "additionalProperties": false
          }
        ]
      },
      "Modifiers": {
        "type": "array",
        "description": "A list of modifiers.",
        "items": {
          "$ref": "#/components/schemas/ModifierInput"
        }
      },
      "OpenDiscountInput": {
        "description": "The integration customer input",
        "type": "object",
        "properties": {
          "discountType": {
            "type": "string",
            "description": "A reason from an enumerated list (percent, amount)."
          },
          "discountValue": {
            "type": "number",
            "description": "The amount of the discount in dollars."
          },
          "discountName": {
            "type": "string",
            "description": "The name of the discount."
          },
          "discountReason": {
            "type": "string",
            "description": "The reason for the discount."
          }
        }
      },
      "Operations": {
        "type": "array",
        "items": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "operation": {
                  "type": "string",
                  "enum": [
                    "upsert-users"
                  ]
                },
                "operationId": {
                  "type": "string",
                  "description": "Optional identifier for individual operation, will be returned if operation throws an error."
                },
                "users": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "firstName": {
                        "type": "string"
                      },
                      "lastName": {
                        "type": "string"
                      },
                      "acl": {
                        "type": "string"
                      },
                      "phoneNumber": {
                        "type": "string",
                        "description": "Used to match existing user in GoTab."
                      },
                      "posPin": {
                        "type": "string",
                        "description": "Length of pos pin must match the length configured for the location."
                      },
                      "email": {
                        "type": "string"
                      },
                      "externalUserId": {
                        "type": "string",
                        "description": "Unique ID from external system for the user."
                      },
                      "userRoles": {
                        "type": "array",
                        "items": {
                          "anyOf": [
                            {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ],
                              "description": "Internal GoTab user role ID or UUID"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "userRoleUuid": {
                                  "type": "string",
                                  "description": "GoTab user role UUID."
                                },
                                "userRoleId": {
                                  "type": "string",
                                  "description": "GoTab user role ID."
                                },
                                "externalUserRoleId": {
                                  "type": "string",
                                  "description": "Unique ID from external system for the user role."
                                },
                                "roleName": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          ],
                          "description": "Internal GoTab user role ID or UUID"
                        }
                      }
                    },
                    "required": [
                      "externalUserId"
                    ],
                    "additionalProperties": false
                  },
                  "minItems": 1
                }
              },
              "required": [
                "operation",
                "users"
              ],
              "additionalProperties": false,
              "description": "Update or insert one or more users",
              "title": "Upsert users"
            },
            {
              "type": "object",
              "properties": {
                "operation": {
                  "type": "string",
                  "enum": [
                    "delete-users"
                  ]
                },
                "operationId": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/0/properties/operationId"
                },
                "users": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/0/properties/users"
                }
              },
              "required": [
                "operation",
                "users"
              ],
              "additionalProperties": false,
              "description": "Archive one or more users",
              "title": "Delete users"
            },
            {
              "type": "object",
              "properties": {
                "operation": {
                  "type": "string",
                  "enum": [
                    "sync-users"
                  ]
                },
                "operationId": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/0/properties/operationId"
                },
                "users": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/0/properties/users"
                }
              },
              "required": [
                "operation",
                "users"
              ],
              "additionalProperties": false,
              "description": "Replace ALL users with the provided list. Use UPSERT if you do not want all outstanding users to be archived",
              "title": "Sync users"
            },
            {
              "type": "object",
              "properties": {
                "operation": {
                  "type": "string",
                  "enum": [
                    "upsert-roles"
                  ]
                },
                "operationId": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/0/properties/operationId"
                },
                "roles": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "externalUserRoleId": {
                        "type": "string",
                        "description": "Unique ID from external system for the user role."
                      },
                      "roleName": {
                        "type": "string"
                      },
                      "rate": {
                        "type": "number",
                        "description": "Pay rate associated with the user role."
                      }
                    },
                    "required": [
                      "externalUserRoleId",
                      "roleName"
                    ],
                    "additionalProperties": false
                  },
                  "minItems": 1
                }
              },
              "required": [
                "operation",
                "roles"
              ],
              "additionalProperties": false,
              "description": "Update or insert one or more user roles",
              "title": "Upsert user roles"
            },
            {
              "type": "object",
              "properties": {
                "operation": {
                  "type": "string",
                  "enum": [
                    "delete-roles"
                  ]
                },
                "operationId": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/0/properties/operationId"
                },
                "roles": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/3/properties/roles"
                }
              },
              "required": [
                "operation",
                "roles"
              ],
              "additionalProperties": false,
              "description": "Archive one or more user roles",
              "title": "Delete user roles"
            },
            {
              "type": "object",
              "properties": {
                "operation": {
                  "type": "string",
                  "enum": [
                    "sync-roles"
                  ]
                },
                "operationId": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/0/properties/operationId"
                },
                "roles": {
                  "$ref": "#/components/schemas/Operations/items/anyOf/3/properties/roles"
                }
              },
              "required": [
                "operation",
                "roles"
              ],
              "additionalProperties": false,
              "description": "Replace ALL user roles with the provided list. Use UPSERT if you do not want all outstanding roles to be archived",
              "title": "Sync user roles"
            }
          ],
          "description": "Operation\nUser or User Role operation to be performed"
        },
        "minItems": 1,
        "description": "Array of user and user role operations to be performed",
        "title": "Operations"
      },
      "OperationsErrorData": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code"
          },
          "message": {
            "type": "string",
            "description": "Human readable message"
          },
          "statusCode": {
            "type": "number"
          },
          "details": {
            "type": "object",
            "properties": {
              "operation": {
                "type": "string",
                "description": "Name of operation where error occurred"
              },
              "index": {
                "type": "string",
                "description": "Index of role or user that failed"
              },
              "operationId": {
                "type": "string",
                "description": "Identifier for individual operation"
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "details"
        ],
        "additionalProperties": false
      },
      "OperationsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "results": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "result": {},
                    "details": {
                      "type": "object",
                      "properties": {
                        "operationId": {
                          "type": "string",
                          "description": "Identifier for individual operation"
                        },
                        "index": {
                          "type": "string",
                          "description": "Operation index"
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "errors": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code"
                    },
                    "message": {
                      "type": "string",
                      "description": "Human readable message"
                    },
                    "statusCode": {
                      "type": "number"
                    },
                    "details": {
                      "type": "object",
                      "properties": {
                        "operation": {
                          "type": "object",
                          "properties": {},
                          "additionalProperties": false,
                          "description": "JSON data of operations passed in"
                        },
                        "index": {
                          "type": "string",
                          "description": "Index of operation that failed"
                        },
                        "operationId": {
                          "type": "string",
                          "description": "Identifier for individual operation that failed"
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": false
      },
      "OperationsResultData": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "externalId": {
                  "type": "string",
                  "description": "External user or user role ID"
                },
                "tableName": {
                  "type": "string",
                  "description": "Users or User Roles"
                },
                "id": {
                  "type": "string",
                  "description": "Internal ID now mapped to user or role"
                },
                "archived": {
                  "type": "boolean",
                  "description": "For delete operations"
                }
              },
              "additionalProperties": false
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "operation"
        ],
        "additionalProperties": false
      },
      "OptionInput": {
        "type": "object",
        "properties": {
          "option_hash": {
            "type": "string",
            "description": "The hash of the option."
          },
          "quantity": {
            "type": "number",
            "description": "The quantity of the option."
          }
        }
      },
      "PatchScheduleInput": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "GoTab user ID"
          },
          "externalUserId": {
            "type": "string",
            "description": "External ID of a user already mapped to their GoTab user"
          },
          "startTime": {
            "type": "string",
            "description": "Start time of the shift in UTC"
          },
          "endTime": {
            "type": "string",
            "description": "End time of the shift in UTC"
          },
          "userRoleId": {
            "type": "string",
            "description": "GoTab user role ID"
          },
          "externalUserRoleId": {
            "type": "string",
            "description": "External ID of a user role already mapped to a GoTab user role"
          },
          "fulfilled": {
            "type": "string",
            "description": "Time of shift fulfillment in UTC"
          }
        },
        "additionalProperties": false
      },
      "PatchUserInput": {
        "description": "The payment method",
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "The first name of the user"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user"
          },
          "acl": {
            "type": "string",
            "description": "The access control list for the user"
          },
          "displayName": {
            "type": "string",
            "description": "A desired display name for the user, normally used in interfaces. If not supplied will default to `firstName + lastName`"
          },
          "posPin": {
            "type": "string",
            "description": "The POS pin for the user. The length of the pin should match the length configured for the location"
          },
          "payRate": {
            "type": "number",
            "description": "The pay rate of the user in the smallest unit of the currency of the location. Used as the default pay rate of any supplied user roles. Has no effect if `userRoles` is not supplied"
          },
          "userRoles": {
            "type": "array",
            "description": "The user roles for the user. Must match an existing role at the location",
            "items": {
              "type": "object",
              "properties": {
                "role": {
                  "type": "string",
                  "description": "The userRoleUuid or name of the user role to assign to the user"
                },
                "payRate": {
                  "type": "number",
                  "description": "The pay rate of the user in the smallest unit of the currency of the location. Overrides the pay rate of the user role itself. If not provided will use the pay rate of the request if any"
                }
              }
            }
          },
          "email": {
            "type": "string",
            "description": "The email address of the user"
          },
          "aclAgentConfig": {
            "type": "object",
            "description": "Agent-specific configuration to store on the user's acl (e.g. `clockin_enforced`, or an external system's user id). Fully replaces any existing value for this location's acl row — it does not merge, so a partial write clears the keys it omits. Read the current value from `GET /users` and merge client-side to preserve keys you do not own. Omit the field to leave the stored config untouched; pass `{}` to clear it. Only applied when `acl` is also supplied."
          },
          "metadata": {
            "type": "object",
            "description": "Arbitrary additional metadata to store on the user (e.g. an external system's user id). Shallow-merged with existing metadata."
          }
        }
      },
      "PaymentIntent": {
        "type": "object",
        "properties": {
          "paymentIntentId": {
            "type": "string"
          },
          "paymentIntentUuid": {
            "type": "string"
          },
          "created": {
            "type": "string"
          },
          "updated": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "tipAmount": {
            "type": "number"
          },
          "customerFee": {
            "type": "number"
          },
          "tabId": {
            "type": "string"
          },
          "locationId": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "paymentId": {
            "type": "string",
            "description": "The payment_id created by the payment intent when authorized"
          },
          "clientReference": {
            "type": "string",
            "description": "An optional reference string provided by the client"
          },
          "replayKey": {
            "type": "string",
            "description": "A unique key that is tied to this payment."
          },
          "notes": {
            "type": "string",
            "description": "Optional notes to associate with the payment intent"
          },
          "itemGroupUuid": {
            "type": "string",
            "description": "The UUID of the item group associated with the payment intent"
          },
          "isPreauth": {
            "type": "boolean",
            "default": false,
            "description": "Whether the payment intent is a pre-authorization"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USD",
              "CAD",
              "AUS"
            ],
            "default": "USD",
            "description": "The currency of the payment intent"
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "PENDING"
                ],
                "description": "The payment intent has been created but no checkout has started"
              },
              {
                "type": "string",
                "enum": [
                  "COLLECTING"
                ],
                "description": "The payment intent is in the process of collecting payment"
              },
              {
                "type": "string",
                "enum": [
                  "COLLECTED"
                ],
                "description": "The payment intent has successfully collected payment"
              },
              {
                "type": "string",
                "enum": [
                  "AUTHORIZING"
                ],
                "description": "The payment intent is in the process of authorizing payment"
              },
              {
                "type": "string",
                "enum": [
                  "AUTHORIZED"
                ],
                "description": "The payment intent has successfully authorized payment"
              },
              {
                "type": "string",
                "enum": [
                  "FAILED"
                ],
                "description": "The payment intent has failed"
              },
              {
                "type": "string",
                "enum": [
                  "AUTHORIZATION_FAILED"
                ],
                "description": "The payment intent failed to authorize payment"
              },
              {
                "type": "string",
                "enum": [
                  "CANCELED"
                ],
                "description": "The payment intent has been canceled"
              }
            ]
          },
          "latestMethod": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "payment_terminal_checkout"
                ],
                "description": "The type of the latest payment method used"
              },
              "id": {
                "type": "string",
                "description": "The id associated with the latest payment method type"
              },
              "uuid": {
                "type": "string",
                "description": "The uuid associated with the latest payment method type"
              },
              "status": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "IN_PROGRESS"
                    ],
                    "description": "The checkout is in progress"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "SUCCESS"
                    ],
                    "description": "The checkout completed successfully"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "FAILED"
                    ],
                    "description": "The checkout failed"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "CANCELED"
                    ],
                    "description": "The checkout was canceled or timed out"
                  }
                ]
              },
              "created": {
                "type": "string"
              },
              "updated": {
                "type": "string"
              }
            },
            "required": [
              "type",
              "id",
              "uuid",
              "status",
              "created"
            ],
            "additionalProperties": false
          },
          "latestPaymentError": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "description": "The error code associated with the latest payment error"
              },
              "message": {
                "type": "string",
                "description": "The error message associated with the latest payment error"
              },
              "detail": {
                "type": "string",
                "description": "Additional details about the latest payment error"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "additionalProperties": false
          },
          "paymentDetails": {
            "type": "object",
            "properties": {
              "paymentId": {
                "type": "string",
                "description": "The ID of the payment associated with the payment intent"
              },
              "name": {
                "type": "string",
                "description": "The name on the payment method used"
              },
              "amount": {
                "type": "number",
                "description": "The amount charged in cents"
              },
              "tipAmount": {
                "type": "number",
                "description": "The tip amount charged in cents"
              },
              "customerFee": {
                "type": "number",
                "description": "The customer fee charged in cents"
              },
              "status": {
                "type": "string",
                "description": "The status of the payment"
              },
              "visualCue": {
                "type": "string",
                "description": "The last 4 digits representing the payment method used"
              }
            },
            "required": [
              "paymentId",
              "name",
              "amount",
              "tipAmount",
              "customerFee",
              "status",
              "visualCue"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "paymentIntentId",
          "paymentIntentUuid",
          "created",
          "amount",
          "tipAmount",
          "customerFee",
          "tabId",
          "locationId",
          "userId",
          "customerId",
          "clientReference",
          "replayKey",
          "status"
        ],
        "additionalProperties": false
      },
      "PaymentIntentErrorResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "null"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {},
                "details": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data",
          "errors"
        ],
        "additionalProperties": false
      },
      "PaymentIntentRequestBody": {
        "type": "object",
        "properties": {
          "tabUuid": {
            "type": "string",
            "description": "The tab_uuid of the tab to associate this payment intent with"
          },
          "amount": {
            "type": "number",
            "description": "The amount to deduct from the tab balance in cents. Negative values are accepted for refund mode tabs and normalized server-side."
          },
          "clientReference": {
            "type": "string",
            "description": "An optional reference string provided by the client"
          },
          "replayKey": {
            "type": "string",
            "description": "A unique key that is tied to this payment."
          },
          "notes": {
            "type": "string",
            "description": "Optional notes to associate with the payment intent"
          },
          "itemGroupUuid": {
            "type": "string"
          },
          "isPreauth": {
            "type": "boolean",
            "default": false
          },
          "currency": {
            "type": "string",
            "enum": [
              "USD",
              "CAD",
              "AUS"
            ],
            "default": "USD"
          }
        },
        "required": [
          "tabUuid",
          "amount",
          "replayKey"
        ],
        "additionalProperties": false
      },
      "PaymentIntentResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "paymentIntentId": {
                "type": "string"
              },
              "paymentIntentUuid": {
                "type": "string"
              },
              "created": {
                "type": "string"
              },
              "updated": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "tipAmount": {
                "type": "number"
              },
              "customerFee": {
                "type": "number"
              },
              "tabId": {
                "type": "string"
              },
              "locationId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "customerId": {
                "type": "string"
              },
              "paymentId": {
                "type": "string",
                "description": "The payment_id created by the payment intent when authorized"
              },
              "clientReference": {
                "type": "string",
                "description": "An optional reference string provided by the client"
              },
              "replayKey": {
                "type": "string",
                "description": "A unique key that is tied to this payment."
              },
              "notes": {
                "type": "string",
                "description": "Optional notes to associate with the payment intent"
              },
              "itemGroupUuid": {
                "type": "string",
                "description": "The UUID of the item group associated with the payment intent"
              },
              "isPreauth": {
                "type": "boolean",
                "default": false,
                "description": "Whether the payment intent is a pre-authorization"
              },
              "currency": {
                "type": "string",
                "enum": [
                  "USD",
                  "CAD",
                  "AUS"
                ],
                "default": "USD",
                "description": "The currency of the payment intent"
              },
              "status": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "PENDING"
                    ],
                    "description": "The payment intent has been created but no checkout has started"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "COLLECTING"
                    ],
                    "description": "The payment intent is in the process of collecting payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "COLLECTED"
                    ],
                    "description": "The payment intent has successfully collected payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "AUTHORIZING"
                    ],
                    "description": "The payment intent is in the process of authorizing payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "AUTHORIZED"
                    ],
                    "description": "The payment intent has successfully authorized payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "FAILED"
                    ],
                    "description": "The payment intent has failed"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "AUTHORIZATION_FAILED"
                    ],
                    "description": "The payment intent failed to authorize payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "CANCELED"
                    ],
                    "description": "The payment intent has been canceled"
                  }
                ]
              },
              "latestMethod": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "payment_terminal_checkout"
                    ],
                    "description": "The type of the latest payment method used"
                  },
                  "id": {
                    "type": "string",
                    "description": "The id associated with the latest payment method type"
                  },
                  "uuid": {
                    "type": "string",
                    "description": "The uuid associated with the latest payment method type"
                  },
                  "status": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "IN_PROGRESS"
                        ],
                        "description": "The checkout is in progress"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "SUCCESS"
                        ],
                        "description": "The checkout completed successfully"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "FAILED"
                        ],
                        "description": "The checkout failed"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "CANCELED"
                        ],
                        "description": "The checkout was canceled or timed out"
                      }
                    ]
                  },
                  "created": {
                    "type": "string"
                  },
                  "updated": {
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "id",
                  "uuid",
                  "status",
                  "created"
                ],
                "additionalProperties": false
              },
              "latestPaymentError": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "description": "The error code associated with the latest payment error"
                  },
                  "message": {
                    "type": "string",
                    "description": "The error message associated with the latest payment error"
                  },
                  "detail": {
                    "type": "string",
                    "description": "Additional details about the latest payment error"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "additionalProperties": false
              },
              "paymentDetails": {
                "type": "object",
                "properties": {
                  "paymentId": {
                    "type": "string",
                    "description": "The ID of the payment associated with the payment intent"
                  },
                  "name": {
                    "type": "string",
                    "description": "The name on the payment method used"
                  },
                  "amount": {
                    "type": "number",
                    "description": "The amount charged in cents"
                  },
                  "tipAmount": {
                    "type": "number",
                    "description": "The tip amount charged in cents"
                  },
                  "customerFee": {
                    "type": "number",
                    "description": "The customer fee charged in cents"
                  },
                  "status": {
                    "type": "string",
                    "description": "The status of the payment"
                  },
                  "visualCue": {
                    "type": "string",
                    "description": "The last 4 digits representing the payment method used"
                  }
                },
                "required": [
                  "paymentId",
                  "name",
                  "amount",
                  "tipAmount",
                  "customerFee",
                  "status",
                  "visualCue"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "paymentIntentId",
              "paymentIntentUuid",
              "created",
              "amount",
              "tipAmount",
              "customerFee",
              "tabId",
              "locationId",
              "userId",
              "customerId",
              "clientReference",
              "replayKey",
              "status"
            ],
            "additionalProperties": false
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {},
                "details": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": false
      },
      "PaymentMethodModel": {
        "description": "The payment method",
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "The amount charged to the processor"
          },
          "processor": {
            "type": "string",
            "description": "The processor for the payment method."
          },
          "type": {
            "type": "string",
            "description": "The payment method type."
          },
          "paymentMethodUuid": {
            "type": "string",
            "description": "The UUID of the saved payment method when type is payment_method."
          },
          "cvc": {
            "type": "string",
            "writeOnly": true,
            "pattern": "^[0-9]{3,4}$",
            "description": "Fresh security code, required for an Adyen CardOnFile customer payment. Omit for other payment paths."
          }
        }
      },
      "PaymentModel": {
        "description": "A representation of a payment to be added to a tab.",
        "type": "object",
        "properties": {
          "payAmount": {
            "description": "The amount of the payment in cents.",
            "type": "integer",
            "minimum": 0
          },
          "tipAmount": {
            "description": "The amount of the tip in cents.",
            "type": "integer",
            "default": 0,
            "minimum": 0
          },
          "externalId": {
            "description": "The external id of the payment.",
            "type": "string"
          },
          "displayName": {
            "description": "How the payment will appear on the tab.",
            "type": "string"
          },
          "customer": {
            "description": "Write-only browser and cardholder context for one stored-card payment attempt.",
            "type": "object",
            "required": [
              "emailAddress",
              "ipAddress",
              "browser"
            ],
            "additionalProperties": false,
            "properties": {
              "emailAddress": {
                "type": "string",
                "format": "email"
              },
              "ipAddress": {
                "type": "string",
                "description": "One explicit shopper IPv4 or IPv6 address observed by the partner server."
              },
              "browser": {
                "type": "object",
                "required": [
                  "acceptHeader",
                  "colorDepth",
                  "language",
                  "screenHeight",
                  "screenWidth",
                  "timezoneOffsetMinutes",
                  "userAgent"
                ],
                "additionalProperties": false,
                "properties": {
                  "acceptHeader": {
                    "type": "string"
                  },
                  "colorDepth": {
                    "type": "integer"
                  },
                  "language": {
                    "type": "string"
                  },
                  "screenHeight": {
                    "type": "integer"
                  },
                  "screenWidth": {
                    "type": "integer"
                  },
                  "timezoneOffsetMinutes": {
                    "type": "integer"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "deviceFingerprint": {
                "type": "string",
                "maxLength": 5000
              }
            }
          },
          "methods": {
            "description": "The payment methods to use for the payment.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentMethodModel"
            }
          }
        }
      },
      "PaymentSessionResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "paymentSessionId": {
                "type": "string"
              },
              "expires": {
                "type": "string"
              }
            },
            "required": [
              "paymentSessionId",
              "expires"
            ],
            "additionalProperties": false
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {},
                "details": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": false
      },
      "PaymentTerminalCancelResult": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Whether the cancel attempt succeeded or is an idempotent no-op"
          },
          "canceled": {
            "type": "boolean",
            "description": "Whether the terminal transaction was actually canceled"
          },
          "code": {
            "type": "string",
            "enum": [
              "NOT_FOUND",
              "ALREADY_COMPLETED",
              "ABORT_FAILED",
              "TRANSPORT_ERROR",
              "CANCEL_IN_FLIGHT",
              "NO_ACTIVE_OPERATION"
            ],
            "description": "A stable cancel code when `canceled` is false"
          },
          "message": {
            "type": "string",
            "description": "Optional diagnostics message; do not branch on this in clients"
          }
        },
        "required": [
          "success",
          "canceled"
        ],
        "additionalProperties": false
      },
      "PaymentTerminalCheckout": {
        "type": "object",
        "properties": {
          "paymentTerminalCheckoutId": {
            "type": "string",
            "description": "The id of the payment terminal checkout"
          },
          "paymentTerminalCheckoutUuid": {
            "type": "string",
            "description": "The uuid of the payment terminal checkout"
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "IN_PROGRESS"
                ],
                "description": "The checkout is in progress"
              },
              {
                "type": "string",
                "enum": [
                  "SUCCESS"
                ],
                "description": "The checkout completed successfully"
              },
              {
                "type": "string",
                "enum": [
                  "FAILED"
                ],
                "description": "The checkout failed"
              },
              {
                "type": "string",
                "enum": [
                  "CANCELED"
                ],
                "description": "The checkout was canceled or timed out"
              }
            ]
          },
          "statusReason": {
            "type": "string",
            "description": "Additional details about the status of the payment terminal checkout"
          },
          "statusReasonCode": {
            "type": "string",
            "enum": [
              "TERMINAL_BUSY",
              "TERMINAL_UNAVAILABLE",
              "TRANSACTION_IN_PROGRESS",
              "TRANSACTION_NOT_FOUND",
              "TRANSACTION_ABORTED",
              "PAYMENT_DECLINED",
              "UNKNOWN"
            ],
            "description": "A stable, gateway-agnostic reason code for status_reason"
          },
          "overallStatus": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "IN_PROGRESS"
                ],
                "description": "The checkout is in progress"
              },
              {
                "type": "string",
                "enum": [
                  "AUTHORIZING"
                ],
                "description": "The payment intent is authorizing the collected payment"
              },
              {
                "type": "string",
                "enum": [
                  "SUCCESS"
                ],
                "description": "The checkout and payment intent completed successfully"
              },
              {
                "type": "string",
                "enum": [
                  "FAILED"
                ],
                "description": "The checkout or payment authorization failed"
              },
              {
                "type": "string",
                "enum": [
                  "CANCELED"
                ],
                "description": "The checkout or payment intent was canceled"
              }
            ],
            "description": "A derived status combining checkout + payment intent status"
          },
          "overallStatusReason": {
            "type": "string",
            "description": "A derived reason message for overall_status when failed/canceled"
          },
          "created": {
            "type": "string"
          },
          "updated": {
            "type": "string"
          },
          "locationId": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "paymentIntent": {
            "type": "object",
            "properties": {
              "paymentIntentId": {
                "type": "string"
              },
              "paymentIntentUuid": {
                "type": "string"
              },
              "created": {
                "type": "string"
              },
              "updated": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "tipAmount": {
                "type": "number"
              },
              "customerFee": {
                "type": "number"
              },
              "tabId": {
                "type": "string"
              },
              "locationId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "customerId": {
                "type": "string"
              },
              "paymentId": {
                "type": "string",
                "description": "The payment_id created by the payment intent when authorized"
              },
              "clientReference": {
                "type": "string",
                "description": "An optional reference string provided by the client"
              },
              "replayKey": {
                "type": "string",
                "description": "A unique key that is tied to this payment."
              },
              "notes": {
                "type": "string",
                "description": "Optional notes to associate with the payment intent"
              },
              "itemGroupUuid": {
                "type": "string",
                "description": "The UUID of the item group associated with the payment intent"
              },
              "isPreauth": {
                "type": "boolean",
                "default": false,
                "description": "Whether the payment intent is a pre-authorization"
              },
              "currency": {
                "type": "string",
                "enum": [
                  "USD",
                  "CAD",
                  "AUS"
                ],
                "default": "USD",
                "description": "The currency of the payment intent"
              },
              "status": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "PENDING"
                    ],
                    "description": "The payment intent has been created but no checkout has started"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "COLLECTING"
                    ],
                    "description": "The payment intent is in the process of collecting payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "COLLECTED"
                    ],
                    "description": "The payment intent has successfully collected payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "AUTHORIZING"
                    ],
                    "description": "The payment intent is in the process of authorizing payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "AUTHORIZED"
                    ],
                    "description": "The payment intent has successfully authorized payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "FAILED"
                    ],
                    "description": "The payment intent has failed"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "AUTHORIZATION_FAILED"
                    ],
                    "description": "The payment intent failed to authorize payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "CANCELED"
                    ],
                    "description": "The payment intent has been canceled"
                  }
                ]
              },
              "latestMethod": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "payment_terminal_checkout"
                    ],
                    "description": "The type of the latest payment method used"
                  },
                  "id": {
                    "type": "string",
                    "description": "The id associated with the latest payment method type"
                  },
                  "uuid": {
                    "type": "string",
                    "description": "The uuid associated with the latest payment method type"
                  },
                  "status": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "IN_PROGRESS"
                        ],
                        "description": "The checkout is in progress"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "SUCCESS"
                        ],
                        "description": "The checkout completed successfully"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "FAILED"
                        ],
                        "description": "The checkout failed"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "CANCELED"
                        ],
                        "description": "The checkout was canceled or timed out"
                      }
                    ]
                  },
                  "created": {
                    "type": "string"
                  },
                  "updated": {
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "id",
                  "uuid",
                  "status",
                  "created"
                ],
                "additionalProperties": false
              },
              "latestPaymentError": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "description": "The error code associated with the latest payment error"
                  },
                  "message": {
                    "type": "string",
                    "description": "The error message associated with the latest payment error"
                  },
                  "detail": {
                    "type": "string",
                    "description": "Additional details about the latest payment error"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "additionalProperties": false
              },
              "paymentDetails": {
                "type": "object",
                "properties": {
                  "paymentId": {
                    "type": "string",
                    "description": "The ID of the payment associated with the payment intent"
                  },
                  "name": {
                    "type": "string",
                    "description": "The name on the payment method used"
                  },
                  "amount": {
                    "type": "number",
                    "description": "The amount charged in cents"
                  },
                  "tipAmount": {
                    "type": "number",
                    "description": "The tip amount charged in cents"
                  },
                  "customerFee": {
                    "type": "number",
                    "description": "The customer fee charged in cents"
                  },
                  "status": {
                    "type": "string",
                    "description": "The status of the payment"
                  },
                  "visualCue": {
                    "type": "string",
                    "description": "The last 4 digits representing the payment method used"
                  }
                },
                "required": [
                  "paymentId",
                  "name",
                  "amount",
                  "tipAmount",
                  "customerFee",
                  "status",
                  "visualCue"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "paymentIntentId",
              "paymentIntentUuid",
              "created",
              "amount",
              "tipAmount",
              "customerFee",
              "tabId",
              "locationId",
              "userId",
              "customerId",
              "clientReference",
              "replayKey",
              "status"
            ],
            "additionalProperties": false
          },
          "paymentTerminal": {
            "type": "object",
            "properties": {
              "deviceName": {
                "type": "string",
                "description": "The name of the payment terminal device"
              },
              "paymentTerminalUuid": {
                "type": "string",
                "description": "The uuid of the payment terminal"
              }
            },
            "required": [
              "deviceName",
              "paymentTerminalUuid"
            ],
            "additionalProperties": false
          },
          "nativeRequest": {
            "type": "string",
            "description": "JSON-encoded native dispatch request, returned only to the transaction ID that claimed the checkout during creation"
          }
        },
        "required": [
          "paymentTerminalCheckoutId",
          "paymentTerminalCheckoutUuid",
          "status",
          "overallStatus",
          "created",
          "updated",
          "locationId",
          "userId",
          "customerId",
          "paymentIntent",
          "paymentTerminal"
        ],
        "additionalProperties": false
      },
      "PaymentTerminalCheckoutErrorResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "null"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {},
                "details": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data",
          "errors"
        ],
        "additionalProperties": false
      },
      "PaymentTerminalCheckoutRequestBody": {
        "type": "object",
        "properties": {
          "payment": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "tabUuid": {
                    "type": "string",
                    "description": "The tab_uuid of the tab to associate this payment intent with"
                  },
                  "amount": {
                    "type": "number",
                    "description": "The amount to deduct from the tab balance in cents. Negative values are accepted for refund mode tabs and normalized server-side."
                  },
                  "tipAmount": {
                    "type": "number",
                    "minimum": 0
                  },
                  "customerFee": {
                    "type": "number",
                    "minimum": 0
                  },
                  "clientReference": {
                    "type": "string",
                    "description": "An optional reference string provided by the client"
                  },
                  "replayKey": {
                    "type": "string",
                    "description": "A unique key that is tied to this payment."
                  },
                  "notes": {
                    "type": "string",
                    "description": "Optional notes to associate with the payment intent"
                  },
                  "itemGroupUuid": {
                    "type": "string"
                  },
                  "isPreauth": {
                    "type": "boolean",
                    "default": false
                  },
                  "currency": {
                    "type": "string",
                    "enum": [
                      "USD",
                      "CAD",
                      "AUS"
                    ],
                    "default": "USD"
                  }
                },
                "required": [
                  "tabUuid",
                  "amount",
                  "replayKey"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "paymentIntentUuid": {
                    "type": "string"
                  }
                },
                "required": [
                  "paymentIntentUuid"
                ],
                "additionalProperties": false
              }
            ]
          },
          "metadata": {
            "type": "object",
            "properties": {
              "tabUuid": {
                "type": "string"
              },
              "tipAmount": {
                "type": "string"
              },
              "customerFee": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "tipConfiguration": {
            "type": "object",
            "properties": {
              "tippableAmount": {
                "type": "number"
              },
              "tipRates": {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "percentage": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "percentage"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "amount": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "amount"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              }
            },
            "required": [
              "tippableAmount",
              "tipRates"
            ],
            "additionalProperties": false
          },
          "displayUuid": {
            "type": "string"
          },
          "tokenize": {
            "type": "boolean"
          },
          "transactionId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "Native dispatch attempt ID, held in device memory for the replay key and reused only until dispatch begins"
          }
        },
        "required": [
          "payment"
        ],
        "additionalProperties": false
      },
      "PaymentTerminalCheckoutRequestPayment": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "tabUuid": {
                "type": "string",
                "description": "The tab_uuid of the tab to associate this payment intent with"
              },
              "amount": {
                "type": "number",
                "description": "The amount to deduct from the tab balance in cents. Negative values are accepted for refund mode tabs and normalized server-side."
              },
              "tipAmount": {
                "type": "number",
                "minimum": 0
              },
              "customerFee": {
                "type": "number",
                "minimum": 0
              },
              "clientReference": {
                "type": "string",
                "description": "An optional reference string provided by the client"
              },
              "replayKey": {
                "type": "string",
                "description": "A unique key that is tied to this payment."
              },
              "notes": {
                "type": "string",
                "description": "Optional notes to associate with the payment intent"
              },
              "itemGroupUuid": {
                "type": "string"
              },
              "isPreauth": {
                "type": "boolean",
                "default": false
              },
              "currency": {
                "type": "string",
                "enum": [
                  "USD",
                  "CAD",
                  "AUS"
                ],
                "default": "USD"
              }
            },
            "required": [
              "tabUuid",
              "amount",
              "replayKey"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "paymentIntentUuid": {
                "type": "string"
              }
            },
            "required": [
              "paymentIntentUuid"
            ],
            "additionalProperties": false
          }
        ]
      },
      "PaymentTerminalCheckoutResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "paymentTerminalCheckoutId": {
                "type": "string",
                "description": "The id of the payment terminal checkout"
              },
              "paymentTerminalCheckoutUuid": {
                "type": "string",
                "description": "The uuid of the payment terminal checkout"
              },
              "status": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "IN_PROGRESS"
                    ],
                    "description": "The checkout is in progress"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "SUCCESS"
                    ],
                    "description": "The checkout completed successfully"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "FAILED"
                    ],
                    "description": "The checkout failed"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "CANCELED"
                    ],
                    "description": "The checkout was canceled or timed out"
                  }
                ]
              },
              "statusReason": {
                "type": "string",
                "description": "Additional details about the status of the payment terminal checkout"
              },
              "statusReasonCode": {
                "type": "string",
                "enum": [
                  "TERMINAL_BUSY",
                  "TERMINAL_UNAVAILABLE",
                  "TRANSACTION_IN_PROGRESS",
                  "TRANSACTION_NOT_FOUND",
                  "TRANSACTION_ABORTED",
                  "PAYMENT_DECLINED",
                  "UNKNOWN"
                ],
                "description": "A stable, gateway-agnostic reason code for status_reason"
              },
              "overallStatus": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "IN_PROGRESS"
                    ],
                    "description": "The checkout is in progress"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "AUTHORIZING"
                    ],
                    "description": "The payment intent is authorizing the collected payment"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "SUCCESS"
                    ],
                    "description": "The checkout and payment intent completed successfully"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "FAILED"
                    ],
                    "description": "The checkout or payment authorization failed"
                  },
                  {
                    "type": "string",
                    "enum": [
                      "CANCELED"
                    ],
                    "description": "The checkout or payment intent was canceled"
                  }
                ],
                "description": "A derived status combining checkout + payment intent status"
              },
              "overallStatusReason": {
                "type": "string",
                "description": "A derived reason message for overall_status when failed/canceled"
              },
              "created": {
                "type": "string"
              },
              "updated": {
                "type": "string"
              },
              "locationId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "customerId": {
                "type": "string"
              },
              "paymentIntent": {
                "type": "object",
                "properties": {
                  "paymentIntentId": {
                    "type": "string"
                  },
                  "paymentIntentUuid": {
                    "type": "string"
                  },
                  "created": {
                    "type": "string"
                  },
                  "updated": {
                    "type": "string"
                  },
                  "amount": {
                    "type": "number"
                  },
                  "tipAmount": {
                    "type": "number"
                  },
                  "customerFee": {
                    "type": "number"
                  },
                  "tabId": {
                    "type": "string"
                  },
                  "locationId": {
                    "type": "string"
                  },
                  "userId": {
                    "type": "string"
                  },
                  "customerId": {
                    "type": "string"
                  },
                  "paymentId": {
                    "type": "string",
                    "description": "The payment_id created by the payment intent when authorized"
                  },
                  "clientReference": {
                    "type": "string",
                    "description": "An optional reference string provided by the client"
                  },
                  "replayKey": {
                    "type": "string",
                    "description": "A unique key that is tied to this payment."
                  },
                  "notes": {
                    "type": "string",
                    "description": "Optional notes to associate with the payment intent"
                  },
                  "itemGroupUuid": {
                    "type": "string",
                    "description": "The UUID of the item group associated with the payment intent"
                  },
                  "isPreauth": {
                    "type": "boolean",
                    "default": false,
                    "description": "Whether the payment intent is a pre-authorization"
                  },
                  "currency": {
                    "type": "string",
                    "enum": [
                      "USD",
                      "CAD",
                      "AUS"
                    ],
                    "default": "USD",
                    "description": "The currency of the payment intent"
                  },
                  "status": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "PENDING"
                        ],
                        "description": "The payment intent has been created but no checkout has started"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "COLLECTING"
                        ],
                        "description": "The payment intent is in the process of collecting payment"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "COLLECTED"
                        ],
                        "description": "The payment intent has successfully collected payment"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "AUTHORIZING"
                        ],
                        "description": "The payment intent is in the process of authorizing payment"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "AUTHORIZED"
                        ],
                        "description": "The payment intent has successfully authorized payment"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "FAILED"
                        ],
                        "description": "The payment intent has failed"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "AUTHORIZATION_FAILED"
                        ],
                        "description": "The payment intent failed to authorize payment"
                      },
                      {
                        "type": "string",
                        "enum": [
                          "CANCELED"
                        ],
                        "description": "The payment intent has been canceled"
                      }
                    ]
                  },
                  "latestMethod": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": [
                          "payment_terminal_checkout"
                        ],
                        "description": "The type of the latest payment method used"
                      },
                      "id": {
                        "type": "string",
                        "description": "The id associated with the latest payment method type"
                      },
                      "uuid": {
                        "type": "string",
                        "description": "The uuid associated with the latest payment method type"
                      },
                      "status": {
                        "anyOf": [
                          {
                            "type": "string",
                            "enum": [
                              "IN_PROGRESS"
                            ],
                            "description": "The checkout is in progress"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "SUCCESS"
                            ],
                            "description": "The checkout completed successfully"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "FAILED"
                            ],
                            "description": "The checkout failed"
                          },
                          {
                            "type": "string",
                            "enum": [
                              "CANCELED"
                            ],
                            "description": "The checkout was canceled or timed out"
                          }
                        ]
                      },
                      "created": {
                        "type": "string"
                      },
                      "updated": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "id",
                      "uuid",
                      "status",
                      "created"
                    ],
                    "additionalProperties": false
                  },
                  "latestPaymentError": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "description": "The error code associated with the latest payment error"
                      },
                      "message": {
                        "type": "string",
                        "description": "The error message associated with the latest payment error"
                      },
                      "detail": {
                        "type": "string",
                        "description": "Additional details about the latest payment error"
                      }
                    },
                    "required": [
                      "code",
                      "message"
                    ],
                    "additionalProperties": false
                  },
                  "paymentDetails": {
                    "type": "object",
                    "properties": {
                      "paymentId": {
                        "type": "string",
                        "description": "The ID of the payment associated with the payment intent"
                      },
                      "name": {
                        "type": "string",
                        "description": "The name on the payment method used"
                      },
                      "amount": {
                        "type": "number",
                        "description": "The amount charged in cents"
                      },
                      "tipAmount": {
                        "type": "number",
                        "description": "The tip amount charged in cents"
                      },
                      "customerFee": {
                        "type": "number",
                        "description": "The customer fee charged in cents"
                      },
                      "status": {
                        "type": "string",
                        "description": "The status of the payment"
                      },
                      "visualCue": {
                        "type": "string",
                        "description": "The last 4 digits representing the payment method used"
                      }
                    },
                    "required": [
                      "paymentId",
                      "name",
                      "amount",
                      "tipAmount",
                      "customerFee",
                      "status",
                      "visualCue"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "paymentIntentId",
                  "paymentIntentUuid",
                  "created",
                  "amount",
                  "tipAmount",
                  "customerFee",
                  "tabId",
                  "locationId",
                  "userId",
                  "customerId",
                  "clientReference",
                  "replayKey",
                  "status"
                ],
                "additionalProperties": false
              },
              "paymentTerminal": {
                "type": "object",
                "properties": {
                  "deviceName": {
                    "type": "string",
                    "description": "The name of the payment terminal device"
                  },
                  "paymentTerminalUuid": {
                    "type": "string",
                    "description": "The uuid of the payment terminal"
                  }
                },
                "required": [
                  "deviceName",
                  "paymentTerminalUuid"
                ],
                "additionalProperties": false
              },
              "nativeRequest": {
                "type": "string",
                "description": "JSON-encoded native dispatch request, returned only to the transaction ID that claimed the checkout during creation"
              }
            },
            "required": [
              "paymentTerminalCheckoutId",
              "paymentTerminalCheckoutUuid",
              "status",
              "overallStatus",
              "created",
              "updated",
              "locationId",
              "userId",
              "customerId",
              "paymentIntent",
              "paymentTerminal"
            ],
            "additionalProperties": false
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "message": {},
                "details": {}
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "data"
        ],
        "additionalProperties": false
      },
      "PaymentsModel": {
        "description": "An array of payments and payment methods to be added to the tab",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/PaymentModel"
        }
      },
      "ProductCreateInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the product."
          },
          "description": {
            "type": "string",
            "description": "The description for the product."
          },
          "categoryId": {
            "type": "string",
            "description": "The category id in which to add the product."
          },
          "taxRate": {
            "type": "string",
            "description": "The tax rate to apply to the product. Can either be a TaxRateUuid or a TaxRateName. Defaults to the tax rate of the category."
          },
          "id": {
            "type": "string",
            "description": "The external id of the product."
          },
          "basePrice": {
            "type": "number",
            "description": "The base price of the product in cents."
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModifierOrModifierReference"
            }
          },
          "orderEnabled": {
            "type": "boolean",
            "description": "Whether or not the product is enabled for ordering."
          },
          "productType": {
            "type": "string",
            "description": "Must be a product type from an enumerated list OPEN, DEFAULT."
          },
          "variantInventoryMap": {
            "$ref": "#/components/schemas/VariantExternalInventoryIdInput"
          },
          "accountingStreamId": {
            "type": "string",
            "description": "The accounting stream id to associate with the product. Optional and nullable."
          }
        }
      },
      "ProductUpdateInput": {
        "properties": {
          "productUuid": {
            "type": "string",
            "description": "The uuid of the product to update or archive."
          },
          "archive": {
            "type": "boolean",
            "description": "Whether or not the product is archived."
          },
          "name": {
            "type": "string",
            "description": "The name of the product."
          },
          "description": {
            "type": "string",
            "description": "The description for the product."
          },
          "categoryId": {
            "type": "string",
            "description": "The category id in which to add the product."
          },
          "taxRate": {
            "type": "string",
            "description": "The tax rate to apply to the product. Can either be a TaxRateUuid or a TaxRateName."
          },
          "id": {
            "type": "string",
            "description": "The external id of the product."
          },
          "basePrice": {
            "type": "number",
            "description": "The base price of the product in cents."
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModifierOrModifierReference"
            }
          },
          "orderEnabled": {
            "type": "boolean",
            "description": "Whether or not the product is enabled for ordering."
          },
          "variantInventoryMap": {
            "$ref": "#/components/schemas/VariantExternalInventoryIdInput"
          },
          "accountingStreamId": {
            "type": "string",
            "description": "The accounting stream id to associate with the product. Optional and nullable."
          }
        }
      },
      "ProductsToCreate": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ProductCreateInput"
        }
      },
      "ProductsToUpdate": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ProductUpdateInput"
        }
      },
      "Schedule": {
        "type": "object",
        "properties": {
          "laborScheduleId": {
            "type": "string"
          },
          "laborScheduleUuid": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ScheduleResponseModel": {
        "type": "object",
        "properties": {
          "laborScheduleUuid": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "startTime": {
            "type": "string"
          },
          "endTime": {
            "type": "string"
          },
          "userRoleId": {
            "type": "string"
          },
          "fulfilled": {
            "type": "string"
          },
          "created": {
            "type": "string"
          },
          "archived": {
            "type": "string"
          },
          "xLaborSource": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "TabAdjustmentModel": {
        "description": "An price adjustment to be added to the tab.",
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "value": {
            "description": "The value of the adjustment in cents or a percentage when type is set to `\"percent\"`. When negative the adjustment is subtracted from the tab, when positive the adjustment is added to the tab.",
            "type": "integer"
          },
          "type": {
            "description": "The type of the adjustment. Either 'percent' or 'amount'",
            "type": "string",
            "enum": [
              "percent",
              "amount"
            ]
          },
          "name": {
            "description": "A name for the adjustment, usually a short description of the intent. Will default to `\"Open Discount\"` or `\"Open Item\"` if not provided.",
            "type": "string"
          },
          "taxRate": {
            "description": "The tax rate to apply to the adjustment.",
            "type": "number",
            "minimum": 0
          }
        }
      },
      "TabAdjustmentsModel": {
        "description": "An array of price adjustments to be added to the tab.",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/TabAdjustmentModel"
        }
      },
      "TabBody": {
        "description": "A JSON object containing information about the Tab to be created.",
        "type": "object",
        "properties": {
          "externalId": {
            "type": "string",
            "description": "An external ID for the tab. This is used to identify the tab in the external system."
          },
          "openTab": {
            "type": "boolean",
            "description": "Whether or not the tab should be automatically submitted in this request and paid."
          },
          "scheduledDate": {
            "type": "string",
            "format": "date-time",
            "description": "The scheduled time of the tab. Omit to set as ASAP."
          },
          "spotUuid": {
            "type": "string",
            "description": "The uuid of the spot the order will be set to."
          },
          "coverCount": {
            "type": "number",
            "description": "The number of guests on a tab."
          },
          "phoneNumber": {
            "type": "string",
            "description": "phone number to associate with the tab. Must be provided if `openTab` is false and a `customerId` is not provided."
          },
          "items": {
            "$ref": "#/components/schemas/TabItems"
          },
          "tabAdjustments": {
            "$ref": "#/components/schemas/TabAdjustmentsModel"
          },
          "customerId": {
            "type": "string",
            "description": "Optional customer id to associate with the tab. Must be provided if `openTab` is false and a `phoneNumber` is not provided."
          },
          "evaluateOrderRules": {
            "type": "boolean",
            "default": false,
            "description": "When true, membership/loyalty order rules are evaluated for the associated customer so their discounts and rewards are applied to the tab (and reflected in the price check). Used by the kiosk loyalty/membership check-in flow."
          },
          "waitForProcessorAccounts": {
            "type": "boolean",
            "default": false,
            "description": "When true, the response waits for any gift cards purchased on the tab to be issued and returns them in a `processorAccounts` array. Only applies to a tab that is paid in this request (`payments` given, `openTab` false). Omit to return as soon as the tab is created and receive the cards through the `GIFT_CARD_CREATED` webhook instead; the `processorAccounts` field is then absent from the response."
          },
          "checkIn": {
            "type": "object",
            "description": "How the customer identified themselves at check-in, recorded against the tab for reporting. Used by the kiosk, where the check-in happens before the tab exists. Ignored unless the identifier resolves to `customerId`.",
            "properties": {
              "handle": {
                "type": "string",
                "description": "The identifier presented - a phone number, or the identifier value when `protocol` is given."
              },
              "protocol": {
                "type": "string",
                "description": "The location protocol used, for a custom identifier such as an RFID badge. Omit for a phone check-in."
              }
            }
          },
          "name": {
            "type": "string",
            "description": "The name of the tab (and the order). Required when `openTab` is `false`."
          },
          "employeeId": {
            "type": "string",
            "description": "The id of the employee creating the tab."
          },
          "payments": {
            "$ref": "#/components/schemas/PaymentsModel"
          },
          "orderDetails": {
            "$ref": "#/components/schemas/orderDetails"
          },
          "preauthSourceTab": {
            "$ref": "#/components/schemas/preauthSourceTab"
          },
          "fiscalDate": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Fiscal day in YYYY-MM-DD format representing the local business day to be assigned to the tab, only if a future date is required. Must be within 90 days of the current fiscal day."
          }
        }
      },
      "TabItems": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ItemInput"
        }
      },
      "TabPass": {
        "type": "object",
        "properties": {
          "tabUuid": {
            "type": "string"
          },
          "tabId": {
            "type": "string"
          },
          "tabPassUuid": {
            "type": "string"
          },
          "locationId": {
            "type": "string"
          },
          "xPassId": {
            "type": "string",
            "description": "ID associated with the physical pass."
          },
          "archived": {
            "type": "string",
            "description": "Time when the tab pass became unassociated with the tab either manually or automatically when the tab is closed."
          },
          "closed": {
            "type": "string",
            "description": "Populated when pass is archived automatically due to tab closing."
          },
          "customerName": {
            "type": "string"
          },
          "customerPhone": {
            "type": "string"
          },
          "sendReceipt": {
            "type": "boolean",
            "description": "A text will be sent to the associated customer_phone when the tab closes."
          },
          "privileges": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "tabUuid",
          "tabId",
          "tabPassUuid",
          "locationId",
          "xPassId",
          "sendReceipt"
        ],
        "additionalProperties": false
      },
      "TabPasses": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "tabUuid": {
              "type": "string"
            },
            "tabId": {
              "type": "string"
            },
            "tabPassUuid": {
              "type": "string"
            },
            "locationId": {
              "type": "string"
            },
            "xPassId": {
              "type": "string",
              "description": "ID associated with the physical pass."
            },
            "archived": {
              "type": "string",
              "description": "Time when the tab pass became unassociated with the tab either manually or automatically when the tab is closed."
            },
            "closed": {
              "type": "string",
              "description": "Populated when pass is archived automatically due to tab closing."
            },
            "customerName": {
              "type": "string"
            },
            "customerPhone": {
              "type": "string"
            },
            "sendReceipt": {
              "type": "boolean",
              "description": "A text will be sent to the associated customer_phone when the tab closes."
            },
            "privileges": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "required": [
            "tabUuid",
            "tabId",
            "tabPassUuid",
            "locationId",
            "xPassId",
            "sendReceipt"
          ],
          "additionalProperties": false
        },
        "description": "Array of tab passes"
      },
      "UpdateInventoryMappingsInput": {
        "type": "object",
        "properties": {
          "add": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "remove": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false,
        "description": "An object specifying the external barcodes to map or unmap from the product variant."
      },
      "UpdateInventoryProductInput": {
        "type": "object",
        "properties": {
          "stockLevel": {
            "type": "number",
            "description": "The current stock level of the inventory product."
          },
          "price": {
            "type": "number",
            "description": "The current price of the inventory product."
          },
          "externalSkuIds": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "add": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "remove": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": false,
                "description": "An object specifying the external barcodes to map or unmap from the product variant."
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Deprecated: use `barcodes` instead. A list of external SKU ids (eg barcodes) mapped to the inventory product variant."
              }
            ],
            "description": "An object specifying the external barcodes to map or unmap from the product variant."
          },
          "barcodes": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UpdateInventoryProductInput/properties/externalSkuIds/anyOf/0"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "A list of barcodes to apply to the product, replacing any existing barcodes."
              }
            ],
            "description": "An object specifying the external barcodes to map or unmap from the product variant."
          }
        },
        "additionalProperties": false
      },
      "UpdateScheduleInput": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string",
                "description": "GoTab user ID"
              },
              "externalUserId": {
                "type": "string",
                "description": "External ID of a user already mapped to their GoTab user"
              },
              "startTime": {
                "type": "string",
                "description": "Start time of the shift in UTC"
              },
              "endTime": {
                "type": "string",
                "description": "End time of the shift in UTC"
              },
              "userRoleId": {
                "type": "string",
                "description": "GoTab user role ID"
              },
              "externalUserRoleId": {
                "type": "string",
                "description": "External ID of a user role already mapped to a GoTab user role"
              },
              "fulfilled": {
                "type": "string",
                "description": "Time of shift fulfillment in UTC"
              },
              "type": {
                "type": "string",
                "enum": [
                  "create"
                ]
              }
            },
            "required": [
              "userId",
              "startTime",
              "endTime",
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string",
                "description": "GoTab user ID"
              },
              "externalUserId": {
                "type": "string",
                "description": "External ID of a user already mapped to their GoTab user"
              },
              "startTime": {
                "type": "string",
                "description": "Start time of the shift in UTC"
              },
              "endTime": {
                "type": "string",
                "description": "End time of the shift in UTC"
              },
              "userRoleId": {
                "type": "string",
                "description": "GoTab user role ID"
              },
              "externalUserRoleId": {
                "type": "string",
                "description": "External ID of a user role already mapped to a GoTab user role"
              },
              "fulfilled": {
                "$ref": "#/components/schemas/UpdateScheduleInput/anyOf/0/properties/fulfilled"
              },
              "type": {
                "type": "string",
                "enum": [
                  "update"
                ]
              }
            },
            "required": [
              "type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "schedule": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "laborScheduleUuid": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "laborScheduleUuid"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "archive"
                ]
              }
            },
            "required": [
              "schedule",
              "type"
            ],
            "additionalProperties": false
          }
        ]
      },
      "UpdateUsersInput": {
        "type": "array",
        "items": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "user": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "userId": {
                          "type": "string"
                        },
                        "userUuid": {
                          "type": "string"
                        }
                      },
                      "additionalProperties": false
                    }
                  ]
                },
                "firstName": {
                  "type": "string"
                },
                "lastName": {
                  "type": "string"
                },
                "acl": {
                  "type": "string"
                },
                "displayName": {
                  "type": "string"
                },
                "email": {
                  "type": "string"
                },
                "posPin": {
                  "type": "string"
                },
                "payRate": {
                  "type": "number"
                },
                "userRoles": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "role": {
                        "type": "string"
                      },
                      "payRate": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "role"
                    ],
                    "additionalProperties": false
                  }
                },
                "phoneNumber": {
                  "type": "string"
                },
                "sendSms": {
                  "type": "boolean"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "create"
                  ]
                }
              },
              "required": [
                "user",
                "phoneNumber",
                "type"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "user": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/user"
                },
                "firstName": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/firstName"
                },
                "lastName": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/lastName"
                },
                "acl": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/acl"
                },
                "displayName": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/displayName"
                },
                "email": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/email"
                },
                "posPin": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/posPin"
                },
                "payRate": {
                  "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/payRate"
                },
                "userRoles": {
                  "anyOf": [
                    {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/userRoles/items"
                      }
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "add": {
                            "type": "array",
                            "items": {
                              "$ref": "#/components/schemas/UpdateUsersInput/items/anyOf/0/properties/userRoles/items"
                            }
                          },
                          "remove": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  ]
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "update"
                  ]
                }
              },
              "required": [
                "user",
                "type"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "user": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "userUuid": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "userUuid"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "archive"
                  ]
                }
              },
              "required": [
                "user",
                "type"
              ],
              "additionalProperties": false
            }
          ]
        }
      },
      "UserRole": {
        "type": "object",
        "properties": {
          "userRoleId": {
            "type": "string"
          },
          "userRoleUuid": {
            "type": "string"
          },
          "roleName": {
            "type": "string"
          },
          "acl": {
            "type": "string"
          },
          "rate": {
            "type": "number"
          }
        },
        "required": [
          "userRoleId",
          "userRoleUuid",
          "roleName",
          "acl"
        ],
        "additionalProperties": false
      },
      "UserRoles": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "userRoleId": {
              "type": "string"
            },
            "userRoleUuid": {
              "type": "string"
            },
            "roleName": {
              "type": "string"
            },
            "acl": {
              "type": "string"
            },
            "rate": {
              "type": "number"
            }
          },
          "required": [
            "userRoleId",
            "userRoleUuid",
            "roleName",
            "acl"
          ],
          "additionalProperties": false
        }
      },
      "UserRolesOperationData": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "operationId": {
                "type": "string",
                "description": "Optional identifier for individual operation, will be returned if operation throws an error."
              },
              "roles": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "externalUserRoleId": {
                      "type": "string",
                      "description": "Unique ID from external system for the user role."
                    },
                    "roleName": {
                      "type": "string"
                    },
                    "rate": {
                      "type": "number",
                      "description": "Pay rate associated with the user role."
                    }
                  },
                  "required": [
                    "externalUserRoleId",
                    "roleName"
                  ],
                  "additionalProperties": false
                },
                "minItems": 1
              }
            },
            "required": [
              "roles"
            ],
            "additionalProperties": false,
            "description": "Update or insert one or more user roles",
            "title": "Upsert user roles"
          },
          {
            "type": "object",
            "properties": {
              "operationId": {
                "$ref": "#/components/schemas/UserRolesOperationData/anyOf/0/properties/operationId"
              },
              "roles": {
                "$ref": "#/components/schemas/UserRolesOperationData/anyOf/0/properties/roles"
              }
            },
            "required": [
              "roles"
            ],
            "additionalProperties": false,
            "description": "Archive one or more user roles",
            "title": "Delete user roles"
          },
          {
            "type": "object",
            "properties": {
              "operationId": {
                "$ref": "#/components/schemas/UserRolesOperationData/anyOf/0/properties/operationId"
              },
              "roles": {
                "$ref": "#/components/schemas/UserRolesOperationData/anyOf/0/properties/roles"
              }
            },
            "required": [
              "roles"
            ],
            "additionalProperties": false,
            "description": "Replace ALL user roles with the provided list. Use UPSERT if you do not want all outstanding roles to be archived",
            "title": "Sync user roles"
          }
        ]
      },
      "UsersOperationData": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "operationId": {
                "type": "string",
                "description": "Optional identifier for individual operation, will be returned if operation throws an error."
              },
              "users": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "firstName": {
                      "type": "string"
                    },
                    "lastName": {
                      "type": "string"
                    },
                    "acl": {
                      "type": "string"
                    },
                    "phoneNumber": {
                      "type": "string",
                      "description": "Used to match existing user in GoTab."
                    },
                    "posPin": {
                      "type": "string",
                      "description": "Length of pos pin must match the length configured for the location."
                    },
                    "email": {
                      "type": "string"
                    },
                    "externalUserId": {
                      "type": "string",
                      "description": "Unique ID from external system for the user."
                    },
                    "userRoles": {
                      "type": "array",
                      "items": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ],
                            "description": "Internal GoTab user role ID or UUID"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "userRoleUuid": {
                                "type": "string",
                                "description": "GoTab user role UUID."
                              },
                              "userRoleId": {
                                "type": "string",
                                "description": "GoTab user role ID."
                              },
                              "externalUserRoleId": {
                                "type": "string",
                                "description": "Unique ID from external system for the user role."
                              },
                              "roleName": {
                                "type": "string"
                              }
                            },
                            "additionalProperties": false
                          }
                        ],
                        "description": "Internal GoTab user role ID or UUID"
                      }
                    }
                  },
                  "required": [
                    "externalUserId"
                  ],
                  "additionalProperties": false
                },
                "minItems": 1
              }
            },
            "required": [
              "users"
            ],
            "additionalProperties": false,
            "description": "Update or insert one or more users",
            "title": "Upsert users"
          },
          {
            "type": "object",
            "properties": {
              "operationId": {
                "$ref": "#/components/schemas/UsersOperationData/anyOf/0/properties/operationId"
              },
              "users": {
                "$ref": "#/components/schemas/UsersOperationData/anyOf/0/properties/users"
              }
            },
            "required": [
              "users"
            ],
            "additionalProperties": false,
            "description": "Archive one or more users",
            "title": "Delete users"
          },
          {
            "type": "object",
            "properties": {
              "operationId": {
                "$ref": "#/components/schemas/UsersOperationData/anyOf/0/properties/operationId"
              },
              "users": {
                "$ref": "#/components/schemas/UsersOperationData/anyOf/0/properties/users"
              }
            },
            "required": [
              "users"
            ],
            "additionalProperties": false,
            "description": "Replace ALL users with the provided list. Use UPSERT if you do not want all outstanding users to be archived",
            "title": "Sync users"
          }
        ]
      },
      "Variant": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "locationId": {
            "type": "string"
          },
          "inventoryId": {
            "type": "string"
          },
          "externalInventoryId": {
            "type": "string",
            "description": "Deprecated: use `external_sku` instead. The external inventory id mapped to this variant inventory."
          },
          "externalSku": {
            "type": "string",
            "description": "The external sku mapped to this variant inventory."
          },
          "sku": {
            "type": "string",
            "description": "The GoTab assigned SKU of the variant. This property cannot be updated."
          },
          "name": {
            "type": "string"
          },
          "variant": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Variant Designations - A record of variant names mapped to the variant value. Eg: `{\"size\": \"large\", \"color\": \"red\"}`. This designation uniquely identifies an inventory product variant."
          },
          "isStocked": {
            "type": "boolean"
          },
          "isDetached": {
            "type": "boolean"
          },
          "isTracked": {
            "type": "boolean"
          },
          "stockLevel": {
            "type": "number"
          },
          "externalSkuIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Deprecated: use `barcodes` instead. A list of external SKU ids (eg barcodes) mapped to the product variant."
          },
          "barcodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of barcodes mapped to the product variant."
          }
        },
        "required": [
          "productId",
          "locationId",
          "inventoryId",
          "externalInventoryId",
          "externalSku",
          "sku",
          "name",
          "variant",
          "isStocked",
          "isDetached",
          "isTracked",
          "stockLevel",
          "externalSkuIds"
        ],
        "additionalProperties": false
      },
      "VariantExternalInventoryIdInput": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "variant": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Variant Designations - A record of variant names mapped to the variant value. Eg: `{\"size\": \"large\", \"color\": \"red\"}`. This designation uniquely identifies an inventory product variant."
            },
            "price": {
              "type": "number",
              "description": "The current price of the inventory product variant."
            },
            "stockLevel": {
              "type": "number",
              "description": "The current stock level of the inventory product variant."
            },
            "externalSkuIds": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Deprecated: use `barcodes` instead. A list of external SKU ids (eg barcodes) mapped to the inventory product variant."
            },
            "barcodes": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "A list of barcodes mapped to the inventory product variant."
            },
            "externalInventoryId": {
              "type": "string",
              "description": "Deprecated: use `external_sku` instead. The desired external inventory id for the inventory product variant. This id can be used as a resource identifier in other requests."
            },
            "externalSku": {
              "type": "string",
              "description": "The desired external sku for the inventory product variant. This SKU can be used as a resource identifier in other requests."
            }
          },
          "additionalProperties": false
        },
        "description": "A list of variants represented by variant designations along with the inventory variant data to map to it"
      },
      "VariantSkuMapInput": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "variant": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Record of variant name mapped to the variant value."
            },
            "sku": {
              "type": "string"
            }
          },
          "required": [
            "variant",
            "sku"
          ],
          "additionalProperties": false
        },
        "description": "Array of variant to sku mappings."
      },
      "addCustomerSegmentInputs": {
        "description": "A JSON object containing information about the customer to be added to the segment.",
        "type": "object",
        "properties": {
          "phoneNumber": {
            "type": "string",
            "description": "The phone number of the customer you are trying to add to the segment."
          }
        }
      },
      "orderDetails": {
        "description": "Custom metadata for the order.",
        "type": "object",
        "properties": {
          "callNumber": {
            "description": "The call number for the order",
            "type": "string"
          },
          "phoneNumber": {
            "description": "The phone number for customer",
            "type": "string"
          },
          "prompts": {
            "description": "The answer to any zone related prompts",
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        }
      },
      "preauthSourceTab": {
        "type": "object",
        "properties": {
          "tabUuid": {
            "description": "Uuid of source tab.",
            "type": "string"
          },
          "ccLastFour": {
            "description": "Last four digits of card used to pay for source tab.",
            "type": "string"
          },
          "customerId": {
            "description": "Customer ID assigned to source tab.",
            "type": "string"
          }
        }
      },
      "PaymentTerminalCheckoutResultRequestBody": {
        "type": "object",
        "properties": {
          "transactionResponse": {
            "type": "string",
            "minLength": 2
          }
        },
        "required": [
          "transactionResponse"
        ],
        "additionalProperties": false
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://gotab.io/api",
      "description": "Production"
    }
  ],
  "paths": {
    "/integrations/customers": {
      "get": {
        "summary": "List customers",
        "tags": [
          "Customers"
        ],
        "description": "Lists existing customers for an integration",
        "operationId": "listCustomers",
        "responses": {
          "200": {
            "description": "Array of customers sandboxed to the integration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationCustomerResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create customer",
        "tags": [
          "Customers"
        ],
        "description": "Creates a new customer",
        "operationId": "createCustomer",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationCustomerInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Newly created customer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationCustomerResponse"
                }
              }
            }
          }
        }
      }
    },
    "/integrations/customers/{customer_profile_uuid}": {
      "get": {
        "summary": "Get customer",
        "tags": [
          "Customers"
        ],
        "description": "Retrieves a customer",
        "operationId": "getCustomer",
        "parameters": [
          {
            "in": "path",
            "name": "customer_profile_uuid",
            "required": true,
            "description": "- The uuid of the customer",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "handle",
            "description": "- The phone number for the customer",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Retrieved customer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationCustomerResponse"
                }
              }
            }
          }
        }
      }
    },
    "/integrations/{integration}/locations/{location}": {
      "delete": {
        "summary": "Delete Location Integration",
        "tags": [
          "Integrations"
        ],
        "description": "Remove an location and associated permissions from an integration",
        "operationId": "deleteIntegrationLocation",
        "parameters": [
          {
            "in": "path",
            "name": "integration",
            "required": true,
            "description": "- The uuid or name of the integration",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc": {
      "get": {
        "summary": "List locations",
        "tags": [
          "Locations"
        ],
        "description": "List locations accessible to the current user",
        "operationId": "listLocations",
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/subscribe": {
      "post": {
        "summary": "Subscribe locations to an integration",
        "tags": [
          "Locations"
        ],
        "description": "Subscribes one or more locations to the integration associated with the bearer token. Intended for integrator-driven location mapping: after an end-user selects locations in the integrator's UI, the integrator posts the chosen location uuids here. The integration is resolved from the token, and the token's user must have access to every requested location — if any location fails the access check, no locations are subscribed.\n",
        "operationId": "subscribeLocations",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "location_uuids"
                ],
                "properties": {
                  "location_uuids": {
                    "type": "array",
                    "description": "The uuids of the locations to subscribe to the integration.",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The locations that were subscribed to the integration.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "subscribed": {
                          "type": "array",
                          "description": "The location uuids that were subscribed.",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "No valid location_uuids were provided."
          },
          "403": {
            "description": "The token is not an integration API token, or the token does not have access to one or more of the requested locations. No locations are subscribed.\n"
          }
        }
      }
    },
    "/loc/{location}/bulk/products": {
      "post": {
        "summary": "Bulk create products",
        "description": "Create one or more products simultaneously.",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "bulkCreateProducts",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to create the products",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "products": {
                    "$ref": "#/components/schemas/ProductsToCreate"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "patch": {
        "summary": "Bulk update products",
        "description": "Update and archive one or more products simultaneously.",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "bulkUpdateProducts",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to create the products",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "products": {
                    "$ref": "#/components/schemas/ProductsToUpdate"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/bulk/users": {
      "post": {
        "summary": "Bulk update users",
        "tags": [
          "Users"
        ],
        "description": "Create, update, and archive multiple users at once",
        "operationId": "bulkUpdateUsers",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to update users",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUsersInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/inventory/recipes": {
      "post": {
        "summary": "Apply inventory instructions",
        "description": "Applies a set of incremental instructions to create or update inventory items and their component relationships. Unlike a full-tree upsert, this endpoint is additive — existing relationships are never removed unless an explicit `unlink` instruction is included. Returns the current state of all inventory items referenced in the request.\n",
        "tags": [
          "Inventory Management"
        ],
        "operationId": "applyInventoryRecipeInstructions",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "upsert": {
                    "type": "array",
                    "description": "Create or update inventory items by SKU.",
                    "items": {
                      "type": "object",
                      "required": [
                        "sku"
                      ],
                      "properties": {
                        "sku": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "units": {
                          "type": "string"
                        },
                        "impacts_availability": {
                          "type": "boolean"
                        },
                        "kds_visible": {
                          "type": "boolean"
                        },
                        "router_ids": {
                          "type": "array",
                          "items": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  },
                  "link": {
                    "type": "array",
                    "description": "Create a component relationship between two SKUs. `conversion_factor` is the number of units of `component_sku` consumed per unit of `sku`.\n",
                    "items": {
                      "type": "object",
                      "required": [
                        "sku",
                        "component_sku"
                      ],
                      "properties": {
                        "sku": {
                          "type": "string"
                        },
                        "component_sku": {
                          "type": "string"
                        },
                        "conversion_factor": {
                          "type": "number",
                          "default": 1
                        }
                      }
                    }
                  },
                  "unlink": {
                    "type": "array",
                    "description": "Remove a component relationship between two SKUs.",
                    "items": {
                      "type": "object",
                      "required": [
                        "sku",
                        "component_sku"
                      ],
                      "properties": {
                        "sku": {
                          "type": "string"
                        },
                        "component_sku": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "level": {
                    "type": "array",
                    "description": "Adjust the stock or inventory level for a SKU by a delta amount.",
                    "items": {
                      "type": "object",
                      "required": [
                        "sku"
                      ],
                      "properties": {
                        "sku": {
                          "type": "string"
                        },
                        "stock_level_delta": {
                          "type": "number",
                          "description": "Amount to add to (or subtract from, if negative) the stock level."
                        },
                        "inventory_level_delta": {
                          "type": "number",
                          "description": "Amount to add to (or subtract from, if negative) the inventory level."
                        },
                        "adjustment_reason": {
                          "type": "string",
                          "enum": [
                            "RECOUNT",
                            "RECEIVED",
                            "LOST",
                            "THEFT"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The current inventory state for all SKUs referenced in the request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InventoryComponent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload."
          }
        }
      }
    },
    "/loc/{location}/inventory/skus/{sku}": {
      "patch": {
        "summary": "Update SKU stock level",
        "description": "Adjust the stock level for a specific SKU at a location. Only lowest-level components can be directly updated. Stock level can be optionally transferred from another SKU at a different location if `adjustment_reason` is `TRANSFER` and valid source information is included in the request body.",
        "tags": [
          "Inventory Management"
        ],
        "operationId": "updateSkuStockLevel",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "sku",
            "required": true,
            "description": "- The unique SKU for the inventory item to update",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "adjustment_reason"
                ],
                "properties": {
                  "stock_level": {
                    "type": "number",
                    "description": "The new stock level for the SKU. Required when adjustment_reason is RECOUNT."
                  },
                  "stock_level_delta": {
                    "type": "number",
                    "description": "Amount to add to (or subtract from, if negative) the stock level. Required when adjustment_reason is not RECOUNT."
                  },
                  "adjustment_reason": {
                    "type": "string",
                    "enum": [
                      "RECOUNT",
                      "RECEIVED",
                      "LOSS",
                      "THEFT",
                      "TRANSFER"
                    ],
                    "description": "The reason for the stock level adjustment."
                  },
                  "source": {
                    "type": "object",
                    "description": "Required when adjustment_reason is TRANSFER. Contains source location and SKU information for the transfer.",
                    "required": [
                      "location_uuid",
                      "sku"
                    ],
                    "properties": {
                      "location_uuid": {
                        "type": "string",
                        "description": "The UUID of the source location to transfer inventory from."
                      },
                      "sku": {
                        "type": "string",
                        "description": "The SKU of the inventory item at the source location. An inverse stock_level_delta adjustment will be applied to this SKU."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated SKU inventory data",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/InventoryComponent"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request."
          },
          "404": {
            "description": "SKU or location not found."
          },
          "405": {
            "description": "Location does not support this operation."
          }
        }
      }
    },
    "/loc/{location}/inventory/{sku}/transfer": {
      "post": {
        "summary": "Adjust or transfer inventory",
        "description": "Transfer or update inventory within GoTab locations or to/from GoTab locations and integrations",
        "tags": [
          "Inventory Management"
        ],
        "operationId": "transferProductInventory",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "sku",
            "required": true,
            "description": "- The unique sku for the inventory product",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryTransferInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The product inventory data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryTransferInput"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/inventory/{variant}": {
      "get": {
        "summary": "Get product variant inventory",
        "description": "Get the product variant inventory at a location",
        "tags": [
          "Inventory Management"
        ],
        "operationId": "getProductInventoryVariant",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "variant",
            "required": true,
            "description": "- The unique identifier of the variant at the location, such as the GoTab generated [SKU](https://en.wikipedia.org/wiki/Stock_keeping_unit) _or_ an attached `external_sku`",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The product inventory variant data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Variant"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update product variant inventory",
        "description": "Update product variant inventory at a location.",
        "tags": [
          "Inventory Management"
        ],
        "operationId": "updateProductInventoryVariant",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "variant",
            "required": true,
            "description": "- The unique identifier of the variant at the location, such as the GoTab generated [SKU](https://en.wikipedia.org/wiki/Stock_keeping_unit) _or_ an attached `external_sku`",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateInventoryProductInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The product inventory variant data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Variant"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/labor/entries": {
      "get": {
        "summary": "List time entries",
        "tags": [
          "Labor"
        ],
        "description": "Returns time entries (shifts and breaks) at a location",
        "operationId": "listTimeEntries",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type",
            "description": "- Filter by entry type (shifts, breaks, all)",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "is_open",
            "description": "- Filter by open or closed entries",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "fiscal_day_start",
            "description": "- Start of fiscal day range (ISO 8601 date)",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "fiscal_day_end",
            "description": "- End of fiscal day range (ISO 8601 date)",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "user_role",
            "description": "- User role uuid to filter by",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "user_id",
            "description": "- User id to filter by",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "description": "- Maximum number of entries to return",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sort",
            "description": "- Sort field (created, punch_in, punch_out)",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "order",
            "description": "- Sort direction (ASC or DESC)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of time entries",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create time entry",
        "tags": [
          "Labor"
        ],
        "description": "Creates a new shift or adds a break to an existing shift",
        "operationId": "createTimeEntry",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "time_punch_type",
                  "user_role",
                  "user_id"
                ],
                "properties": {
                  "time_punch_type": {
                    "type": "string",
                    "description": "The uuid of the time punch type"
                  },
                  "user_role": {
                    "type": "string",
                    "description": "The uuid of the user role"
                  },
                  "user_id": {
                    "type": "string",
                    "description": "The id of the user to clock in"
                  },
                  "punch_in": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Shift start time (ISO 8601). Defaults to now."
                  },
                  "punch_out": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Shift end time (ISO 8601). Omit to leave open."
                  },
                  "time_shift_id": {
                    "type": "string",
                    "description": "Existing shift id to add a break to"
                  },
                  "declared_tips": {
                    "type": "number",
                    "description": "Declared tips amount"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The created time entry",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/labor/entries/{time_entry_uuid}": {
      "get": {
        "summary": "Get time entry",
        "tags": [
          "Labor"
        ],
        "description": "Returns a single time entry by uuid",
        "operationId": "getTimeEntry",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "time_entry_uuid",
            "required": true,
            "description": "- The uuid of the time entry",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The requested time entry",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update time entry",
        "tags": [
          "Labor"
        ],
        "description": "Updates an existing time entry",
        "operationId": "updateTimeEntry",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "time_entry_uuid",
            "required": true,
            "description": "- The uuid of the time entry to update",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "punch_in": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Updated punch-in timestamp (ISO 8601)"
                  },
                  "punch_out": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Updated punch-out timestamp (ISO 8601)"
                  },
                  "user_role_uuid": {
                    "type": "string",
                    "description": "The uuid of the new user role"
                  },
                  "time_punch_type": {
                    "type": "string",
                    "description": "The uuid of the time punch type"
                  },
                  "declared_tips": {
                    "type": "number",
                    "description": "Declared tips amount"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated time entry",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/labor/roles": {
      "get": {
        "summary": "List User Roles",
        "tags": [
          "Users"
        ],
        "description": "Get all user roles defined at a location",
        "operationId": "listUserRoles",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of user roles",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRoles"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/labor/roles/{user_role}": {
      "get": {
        "summary": "Get User Role",
        "tags": [
          "Users"
        ],
        "description": "Returns information about a specific user role at a location",
        "operationId": "getUserRole",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "user_role",
            "required": true,
            "description": "- The uuid of the user role to get",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The requested user role",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRole"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/modifiers": {
      "get": {
        "summary": "List modifiers",
        "description": "list modifiers at a location",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "listModifiers",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Create a new modifier",
        "description": "Create a new modifier",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "createModifier",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Modifier"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/modifiers/{modifier}": {
      "get": {
        "summary": "Get a modifier",
        "description": "Get information about a modifier",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "getModifier",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "modifier",
            "required": true,
            "description": "- The unique identifier of the modifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "patch": {
        "summary": "Update a modifier",
        "description": "Updates a modifier along with any products that use it",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "updateModifier",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "modifier",
            "required": true,
            "description": "- The unique identifier of the modifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Modifier"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "delete": {
        "summary": "Delete a modifier",
        "description": "Archives a modifier and subsequently removes it from all products it is attached to",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "deleteModifier",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "modifier",
            "required": true,
            "description": "- The unique identifier of the modifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/modifiers/{modifier}/products": {
      "get": {
        "summary": "List modifier products",
        "description": "List all the products that use a modifier",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "listModifierProducts",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "modifier",
            "required": true,
            "description": "- The unique identifier of the modifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Add modifier to products",
        "description": "Add the modifier to one or more products. If the modifier is already on a product it will be ignored.",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "attachModifierToProducts",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "modifier",
            "required": true,
            "description": "- The unique identifier of the modifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AttachModifierProduct"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "delete": {
        "summary": "Remove modifier from products",
        "description": "Remove the modifier from one or more products. If the modifier is not on a product it will be ignored.",
        "tags": [
          "Catalog Management"
        ],
        "operationId": "detachModifierFromProducts",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "modifier",
            "required": true,
            "description": "- The unique identifier of the modifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/price-check": {
      "post": {
        "summary": "Price Check",
        "tags": [
          "Ordering"
        ],
        "description": "Performs a price check on one or more items.",
        "operationId": "priceCheck",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to simulate the tab.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TabBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/products/{product}/inventory": {
      "get": {
        "summary": "List product inventory",
        "description": "List the inventory details for a product and its variants",
        "tags": [
          "Inventory Management"
        ],
        "operationId": "listProductInventory",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "product",
            "required": true,
            "description": "- The unique identifier of the product",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The product inventory variant data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryProduct"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Update product inventory",
        "description": "Update the inventory for a product",
        "tags": [
          "Inventory Management"
        ],
        "operationId": "updateProductInventory",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "product",
            "required": true,
            "description": "- The unique identifier of the product",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VariantExternalInventoryIdInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The product inventory variant data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryProduct"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/schedules": {
      "post": {
        "summary": "Create labor schedule",
        "tags": [
          "Schedule"
        ],
        "description": "Creates a new labor schedule",
        "operationId": "createSchedule",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid of the location in which to create the schedule",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateScheduleInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The labor schedule data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScheduleResponseModel"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/schedules/{schedule}": {
      "patch": {
        "summary": "Update schedule",
        "tags": [
          "Schedule"
        ],
        "description": "Update an existing schedule",
        "operationId": "updateSchedule",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid of the the location in which to update the schedule",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "schedule",
            "required": true,
            "description": "- The uuid of the schedule",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchScheduleInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated labor schedule data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScheduleResponseModel"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Archive schedule",
        "tags": [
          "Schedule"
        ],
        "description": "Archive a schedule from a location",
        "operationId": "archiveSchedule",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid of the location in which to archive the schedule",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "schedule",
            "required": true,
            "description": "- The uuid of the schedule",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The archived labor schedule uuid",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Schedule"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tab-passes/{tab_pass_uuid}": {
      "get": {
        "summary": "Get Tab Pass",
        "tags": [
          "Tab Passes"
        ],
        "description": "Get a specific tab pass",
        "operationId": "getTabPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_pass_uuid",
            "required": true,
            "description": "- The UUID of the tab pass. This is the GoTab generated ID and is different from the external pass id associated with the pass.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Update Tab Pass",
        "tags": [
          "Tab Passes"
        ],
        "description": "Update a specific tab pass",
        "operationId": "updateTabPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_pass_uuid",
            "required": true,
            "description": "- The UUID of the tab pass. This is the GoTab generated ID and is different from the external pass id associated with the pass.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "customerName": {
                    "type": "string",
                    "description": "- The name of the customer associated with the pass."
                  },
                  "customerPhone": {
                    "type": "string",
                    "description": "- The phone number of the customer associated with the pass."
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Archive Tab Pass",
        "tags": [
          "Tab Passes"
        ],
        "description": "Archive a specific tab pass. A tab pass will automatically be archived when the tab is closed.",
        "operationId": "archiveTabPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_pass_uuid",
            "required": true,
            "description": "- The UUID of the tab pass. This is the GoTab generated ID and is different from the external pass id associated with the pass.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/tabs": {
      "post": {
        "summary": "Create a tab",
        "tags": [
          "Ordering"
        ],
        "description": "Creates a new tab.",
        "operationId": "createTab",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to create the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TabBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/tabs/passes/{x_pass_id}": {
      "get": {
        "summary": "Get a tab by pass",
        "tags": [
          "Ordering"
        ],
        "description": "Get a tab by its tab pass",
        "operationId": "getTabByPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "x_pass_id",
            "required": true,
            "description": "- ID of the external object associated with the Tab Pass. This is generally the ID that is recognized by your system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/tabs/passes/{x_pass_id}/cancel": {
      "post": {
        "summary": "Cancel tab by pass",
        "tags": [
          "Ordering"
        ],
        "description": "Fully refunds or voids all line items on an OPEN or CLOSED tab.",
        "operationId": "cancelTabByPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "x_pass_id",
            "required": true,
            "description": "- ID of the external object associated with the Tab Pass. This is generally the ID that is recognized by your system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string",
                    "description": "- The cancellation reason"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/passes/{x_pass_id}/items": {
      "get": {
        "summary": "List tab items by pass",
        "tags": [
          "Ordering"
        ],
        "description": "Get the items on a tab by its tab pass.",
        "operationId": "getTabItemsByPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "x_pass_id",
            "required": true,
            "description": "- ID of the external object associated with the Tab Pass. This is generally the ID that is recognized by your system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Add items to tab by pass",
        "tags": [
          "Ordering"
        ],
        "description": "Add items to a tab by its tab pass.",
        "operationId": "addTabItemsByPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "x_pass_id",
            "required": true,
            "description": "- ID of the external object associated with the Tab Pass. This is generally the ID that is recognized by your system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "items",
                  "spotUuid"
                ],
                "properties": {
                  "customerId": {
                    "type": "string",
                    "description": "- The id for customer. Required if phoneNumber is not provided."
                  },
                  "items": {
                    "$ref": "#/components/schemas/TabItems",
                    "description": "- The items to add to the tab."
                  },
                  "spotUuid": {
                    "type": "string",
                    "description": "- The uuid of the spot for the items"
                  },
                  "employeeId": {
                    "type": "string",
                    "description": "- The id of the employee creating the tab."
                  },
                  "name": {
                    "type": "string",
                    "description": "- The name on the order."
                  },
                  "orderDetails": {
                    "$ref": "#/components/schemas/orderDetails",
                    "description": "- metadata details for the order"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/passes/{x_pass_id}/passes": {
      "get": {
        "summary": "Get Tab Passes by pass",
        "tags": [
          "Ordering"
        ],
        "description": "Get Tab Passes for a given a tab",
        "operationId": "getTabPassesByPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "x_pass_id",
            "required": true,
            "description": "- ID of the external object associated with the Tab Pass. This is generally the ID that is recognized by your system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tab Passes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TabPasses"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Assign Tab Pass by pass",
        "tags": [
          "Ordering"
        ],
        "description": "Assign a Tab Pass to a tab",
        "operationId": "assignTabPassByPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "x_pass_id",
            "required": true,
            "description": "- ID of the external object associated with the Tab Pass. This is generally the ID that is recognized by your system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tab Pass",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TabPass"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "xPassId"
                ],
                "properties": {
                  "xPassId": {
                    "type": "string",
                    "description": "- The id associated with the pass. This value is recognized by the external system."
                  },
                  "customerName": {
                    "type": "string",
                    "description": "- The name of the customer associated with the pass."
                  },
                  "customerPhone": {
                    "type": "string",
                    "description": "- The phone number of the customer associated with the pass."
                  },
                  "isReceiptReceiver": {
                    "type": "boolean",
                    "description": "- Whether or not the customer associated with the pass will receive the receipt upon tab close."
                  },
                  "privileges": {
                    "type": "array",
                    "description": "- The privileges associated with the pass."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/validate-phone": {
      "post": {
        "summary": "Validate a kiosk phone number",
        "tags": [
          "Ordering"
        ],
        "description": "Strictly validates and normalizes a phone number before kiosk checkout. Always responds with HTTP 200 — either `{valid: true, phoneNumber}` carrying the normalized E.164 number, or `{valid: false, message}` when the number is rejected.\n",
        "operationId": "validateKioskPhone",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "phoneNumber"
                ],
                "properties": {
                  "phoneNumber": {
                    "type": "string",
                    "description": "- The phone number to validate"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab_uuid}": {
      "patch": {
        "summary": "Update a tab",
        "tags": [
          "Ordering"
        ],
        "description": "Update fiscal day of a tab",
        "operationId": "updateTab",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The UUID or url_name of the location.",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_uuid",
            "required": true,
            "description": "- The UUID of the tab.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fiscalDate": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                    "description": "Fiscal day in YYYY-MM-DD format representing the updated local business day to be assigned to the tab."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab_uuid}/cancel": {
      "post": {
        "summary": "Cancel tab",
        "tags": [
          "Ordering"
        ],
        "description": "Fully refunds or voids all line items on an OPEN or CLOSED tab.",
        "operationId": "cancelTab",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_uuid",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string",
                    "description": "- The cancellation reason"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab_uuid}/payments": {
      "post": {
        "summary": "Add payments to tab",
        "tags": [
          "Payments"
        ],
        "description": "Add one or more payments to a tab.",
        "operationId": "addTabPayments",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The UUID or url_name of the location.",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_uuid",
            "required": true,
            "description": "- The UUID of the tab.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentsModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab_uuid}/refund": {
      "post": {
        "summary": "Refund a tab payment",
        "tags": [
          "Payments"
        ],
        "description": "Issues a partial refund against a single payment on the tab. Provide either an amount (in cents) for an open refund, or a list of items for an itemized refund, but not both.",
        "operationId": "refundTab",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_uuid",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "paymentId": {
                    "type": "string",
                    "description": "- The payment to refund. Optional when the tab has exactly one refundable payment."
                  },
                  "amount": {
                    "type": "integer",
                    "description": "- The amount to refund in cents. Mutually exclusive with items."
                  },
                  "items": {
                    "type": "array",
                    "description": "- The items to refund. Each entry requires an itemId and a positive integer quantity, with an optional reason. Mutually exclusive with amount."
                  },
                  "reason": {
                    "type": "string",
                    "description": "- The reason for the refund. Defaults to \"Refund\"."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab}": {
      "get": {
        "summary": "Get a tab",
        "tags": [
          "Ordering"
        ],
        "description": "Get tab information by its uuid",
        "operationId": "getTab",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab}/items": {
      "get": {
        "summary": "List tab items",
        "tags": [
          "Ordering"
        ],
        "description": "Get the items on a tab.",
        "operationId": "getTabItems",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Add items to tab",
        "tags": [
          "Ordering"
        ],
        "description": "Add items to a tab.",
        "operationId": "addTabItems",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "items",
                  "spotUuid"
                ],
                "properties": {
                  "customerId": {
                    "type": "string",
                    "description": "- The id for customer. Required if phoneNumber is not provided."
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "- The phone number for customer. Required if customerId is not provided."
                  },
                  "items": {
                    "$ref": "#/components/schemas/TabItems",
                    "description": "- The items to add to the tab."
                  },
                  "spotUuid": {
                    "type": "string",
                    "description": "- The uuid of the spot for the items"
                  },
                  "employeeId": {
                    "type": "string",
                    "description": "- The id of the employee creating the tab."
                  },
                  "name": {
                    "type": "string",
                    "description": "- The name on the order."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab}/open-discount": {
      "post": {
        "summary": "Add Open Discount to a tab",
        "tags": [
          "Ordering"
        ],
        "description": "Add an open discount to a tab",
        "operationId": "addOpenDiscount",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Add Open Discount",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenDiscountInput"
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/tabs/{tab}/passes": {
      "get": {
        "summary": "Get Tab Passes",
        "tags": [
          "Ordering"
        ],
        "description": "Get Tab Passes for a given a tab",
        "operationId": "getTabPasses",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tab Passes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TabPasses"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Assign Tab Pass",
        "tags": [
          "Ordering"
        ],
        "description": "Assign a Tab Pass to a tab",
        "operationId": "assignTabPass",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The unique identifier of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The unique identifier of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tab Pass",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TabPass"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "xPassId"
                ],
                "properties": {
                  "xPassId": {
                    "type": "string",
                    "description": "- The id associated with the pass. This value is recognized by the external system."
                  },
                  "customerName": {
                    "type": "string",
                    "description": "- The name of the customer associated with the pass."
                  },
                  "customerPhone": {
                    "type": "string",
                    "description": "- The phone number of the customer associated with the pass."
                  },
                  "isReceiptReceiver": {
                    "type": "boolean",
                    "description": "- Whether or not the customer associated with the pass will receive the receipt upon tab close."
                  },
                  "privileges": {
                    "type": "array",
                    "description": "- The privileges associated with the pass."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/loc/{location}/users": {
      "get": {
        "summary": "List users",
        "tags": [
          "Users"
        ],
        "description": "Lists existing users at a location",
        "operationId": "listUsers",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to list users",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Create user",
        "tags": [
          "Users"
        ],
        "description": "Creates a new user",
        "operationId": "createUser",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to create the user",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/users/spot-users": {
      "get": {
        "summary": "List spot user assignments",
        "tags": [
          "Users"
        ],
        "description": "Returns all spot_user assignments for the location, including spots with no user currently assigned (user_id will be null).\n",
        "operationId": "listSpotUsers",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An array of spot_user assignment records for the location.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "spotId": {
                            "type": "string",
                            "description": "The internal ID of the spot"
                          },
                          "userId": {
                            "type": "string",
                            "nullable": true,
                            "description": "The internal ID of the assigned user, or null if unassigned"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication token."
          },
          "403": {
            "description": "The authenticated user does not have manage:users or location:users permission at this location."
          }
        }
      }
    },
    "/loc/{location}/users/spot-users/unassign": {
      "delete": {
        "summary": "Unassign a spot user",
        "tags": [
          "Users"
        ],
        "description": "Removes a user assignment from a spot by setting the assigned user to null. The spot_user record is preserved with a null user_id, matching the nightly auto-unassign behavior.\n",
        "operationId": "unassignSpotUser",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "spotUuid"
                ],
                "properties": {
                  "spotUuid": {
                    "type": "string",
                    "description": "The UUID of the spot to unassign."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The spot was successfully unassigned.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "spotId": {
                          "type": "string",
                          "description": "The internal ID of the spot"
                        },
                        "userId": {
                          "type": "string",
                          "nullable": true,
                          "description": "Null after unassignment"
                        },
                        "changeUserId": {
                          "type": "string",
                          "description": "The internal ID of the user who performed the unassignment"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation error — spotUuid is missing or not a string."
          },
          "401": {
            "description": "Missing or invalid authentication token."
          },
          "403": {
            "description": "The authenticated user does not have manage:users or location:users permission at this location."
          },
          "404": {
            "description": "The spot UUID was not found at this location or has no existing assignment."
          }
        }
      }
    },
    "/loc/{location}/users/{user}": {
      "get": {
        "summary": "Get user",
        "tags": [
          "Users"
        ],
        "description": "Get an existing user",
        "operationId": "getUser",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "user",
            "required": true,
            "description": "- The uuid of the user",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "patch": {
        "summary": "Update user",
        "tags": [
          "Users"
        ],
        "description": "Update an existing user",
        "operationId": "updateUser",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to update the user",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "user",
            "required": true,
            "description": "- The uuid of the user",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchUserInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "delete": {
        "summary": "Remove user",
        "tags": [
          "Users"
        ],
        "description": "Remove a user from a location",
        "operationId": "removeUser",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which to remove the user",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "user",
            "required": true,
            "description": "- The uuid of the user",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/loc/{location}/users/{user}/assign-spots": {
      "post": {
        "summary": "Assign user to spots",
        "tags": [
          "Users"
        ],
        "description": "Assign a user to one or more spots at a location. Each spot can only have one assigned user at a time; re-assigning a spot that already has a user will replace the previous assignment. The operation is atomic — if any spot UUID is invalid, no assignments are made.\n",
        "operationId": "assignUserToSpots",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "user",
            "required": true,
            "description": "- The uuid of the user to assign to the spots",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "spotUuids"
                ],
                "properties": {
                  "spotUuids": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                      "type": "string"
                    },
                    "description": "One or more spot UUIDs to assign the user to. Spot UUIDs must belong to the specified location."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The user was successfully assigned to all specified spots.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "spotId": {
                            "type": "string",
                            "description": "The internal ID of the spot"
                          },
                          "userId": {
                            "type": "string",
                            "description": "The internal ID of the assigned user"
                          },
                          "changeUserId": {
                            "type": "string",
                            "description": "The internal ID of the user who made the assignment"
                          },
                          "created": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When the assignment was created"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation error — spotUuids is missing, empty, not an array, or contains non-string values."
          },
          "401": {
            "description": "Missing or invalid authentication token."
          },
          "403": {
            "description": "The authenticated user does not have manage:users or location:users permission at this location."
          },
          "404": {
            "description": "One or more spot UUIDs were not found at the specified location. The error message lists the missing UUIDs."
          }
        }
      }
    },
    "/oauth/refresh": {
      "post": {
        "summary": "Refresh Access Token",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "description": "Generates a new access token given the long lived refresh token",
        "operationId": "refreshToken",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthTokenModel"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "token": {
                    "type": "string",
                    "description": "The refresh token that was returned from the /oauth/token endpoint"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/oauth/token": {
      "post": {
        "summary": "Generate Access Token",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "description": "Returns an API Access Token",
        "operationId": "authToken",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthTokenModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorAlertsModel"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "api_access_id",
                  "api_access_secret"
                ],
                "properties": {
                  "api_access_id": {
                    "type": "string",
                    "description": "The api access id"
                  },
                  "api_access_secret": {
                    "type": "string",
                    "description": "The api access secret"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/pay/{tab_uuid}": {
      "post": {
        "summary": "Pay for a tab",
        "tags": [
          "Ordering"
        ],
        "description": "Add a payment to a tab. Deprecated. Use `/loc/:location_uuid/tabs/:tab_uuid/payments` or `/tabs/:tab_uuid/payments` instead.",
        "deprecated": true,
        "operationId": "payTabLegacy",
        "parameters": [
          {
            "in": "path",
            "name": "tab_uuid",
            "required": true,
            "description": "The uuid of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "customer_id": {
                    "type": "string",
                    "description": "The api access secret"
                  },
                  "payment_methods": {
                    "type": "object",
                    "description": "Payment methods to be applied"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location_uuid}/payment-intents": {
      "post": {
        "summary": "Create Payment Intent",
        "tags": [
          "Payments"
        ],
        "description": "Creates a new payment intent for a tab",
        "operationId": "createPaymentIntent",
        "parameters": [
          {
            "in": "path",
            "name": "location_uuid",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentIntentRequestBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payment intent created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentIntentResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location_uuid}/payment-intents/{payment_intent_uuid}": {
      "get": {
        "summary": "Get Payment Intent",
        "tags": [
          "Payments"
        ],
        "description": "Retrieves a payment intent by its UUID. Returns 202 while the intent is still in progress.",
        "operationId": "getPaymentIntent",
        "parameters": [
          {
            "in": "path",
            "name": "location_uuid",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_intent_uuid",
            "required": true,
            "description": "- The uuid of the payment intent to retrieve",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "wait",
            "description": "- Optional number of seconds to wait for the payment intent to complete if still in progress (max 20 seconds)",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Payment intent retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentIntentResponse"
                }
              }
            }
          },
          "202": {
            "description": "Payment intent is still in progress",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentIntentResponse"
                }
              }
            }
          },
          "404": {
            "description": "Payment intent not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentIntentErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location_uuid}/payment-intents/{payment_intent_uuid}/process": {
      "post": {
        "summary": "Process Payment Intent",
        "tags": [
          "Payments"
        ],
        "description": "Processes and authorizes a payment intent.",
        "operationId": "processPaymentIntent",
        "parameters": [
          {
            "in": "path",
            "name": "location_uuid",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_intent_uuid",
            "required": true,
            "description": "- The uuid of the payment intent to process",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Payment intent processed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentIntentResponse"
                }
              }
            }
          },
          "404": {
            "description": "Payment intent not found"
          }
        }
      }
    },
    "/v2/loc/{location_uuid}/payment-sessions/{tab_uuid}": {
      "post": {
        "summary": "Create Payment Session",
        "tags": [
          "Payment Sessions"
        ],
        "description": "Creates a new payment session for a tab",
        "operationId": "createPaymentSession",
        "parameters": [
          {
            "in": "path",
            "name": "location_uuid",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab_uuid",
            "required": true,
            "description": "- The uuid of the tab",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Payment Session created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentSessionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location}/payment-terminals": {
      "get": {
        "summary": "List Payment Terminals",
        "tags": [
          "Payment Terminals"
        ],
        "description": "Retrieve a list of payment terminals associated with the location.",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "isStandalone",
            "description": "- If set to 1, only standalone payment terminals will be returned.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of payment terminals",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "paymentTerminalUuid": {
                            "type": "string",
                            "description": "The UUID of the payment terminal."
                          },
                          "deviceName": {
                            "type": "string",
                            "description": "The name of the payment terminal device."
                          },
                          "gateway": {
                            "type": "string",
                            "description": "The payment gateway associated with the terminal."
                          },
                          "currency": {
                            "type": "string",
                            "description": "The currency code used by the payment terminal."
                          },
                          "activated": {
                            "type": "string",
                            "format": "date-time",
                            "description": "The date and time when the terminal was activated."
                          },
                          "paymentTerminalDeviceType": {
                            "type": "string",
                            "description": "The type of device used for the payment terminal."
                          },
                          "isStandalone": {
                            "type": "boolean",
                            "description": "Indicates if the payment terminal is a standalone device and can be called directly to take payments."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location}/payment-terminals/{payment_terminal_uuid}/checkouts": {
      "post": {
        "summary": "Create Payment Terminal Checkout",
        "tags": [
          "Payment Terminals"
        ],
        "description": "Create a payment terminal checkout",
        "operationId": "createPaymentTerminalCheckout",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_terminal_uuid",
            "required": true,
            "description": "- The uuid of the payment terminal",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTerminalCheckoutRequestBody"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Payment terminal checkout created. Will also return this response if identical request is made while in progress",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Terminal is busy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location}/payment-terminals/{payment_terminal_uuid}/checkouts/{payment_terminal_checkout_uuid}": {
      "get": {
        "summary": "Get Payment Terminal Checkout",
        "tags": [
          "Payment Terminals"
        ],
        "description": "Get a payment terminal checkout. Optionally wait for completion if still in progress.",
        "operationId": "getPaymentTerminalCheckout",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_terminal_uuid",
            "required": true,
            "description": "- The uuid of the payment terminal",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_terminal_checkout_uuid",
            "required": true,
            "description": "- The uuid of the payment terminal checkout",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "wait",
            "description": "- Optional number of seconds to wait for the checkout to complete if still in progress (max 20 seconds)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "wait_for",
            "description": "- Optional wait target (checkout|overall; default checkout)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Payment terminal checkout retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutResponse"
                }
              }
            }
          },
          "202": {
            "description": "Payment terminal checkout is still in progress",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutResponse"
                }
              }
            }
          },
          "404": {
            "description": "Payment terminal checkout not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location}/payment-terminals/{payment_terminal_uuid}/checkouts/{payment_terminal_checkout_uuid}/cancel": {
      "post": {
        "summary": "Cancel Payment Terminal Checkout",
        "tags": [
          "Payment Terminals"
        ],
        "description": "Cancel a payment terminal checkout",
        "operationId": "cancelPaymentTerminalCheckout",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_terminal_uuid",
            "required": true,
            "description": "- The uuid of the payment terminal",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_terminal_checkout_uuid",
            "required": true,
            "description": "- The uuid of the payment terminal checkout",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cancel result (idempotent)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCancelResult"
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location}/payment-terminals/{payment_terminal_uuid}/checkouts/{payment_terminal_checkout_uuid}/result": {
      "post": {
        "summary": "Record Native Checkout Result",
        "tags": [
          "Payment Terminals"
        ],
        "description": "Record a JSON-encoded native terminal response for its checkout.",
        "operationId": "recordNativeCheckoutResult",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_terminal_uuid",
            "required": true,
            "description": "- The uuid of the payment terminal",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "payment_terminal_checkout_uuid",
            "required": true,
            "description": "- The uuid of the checkout",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTerminalCheckoutResultRequestBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Checkout completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutResponse"
                }
              }
            }
          },
          "202": {
            "description": "Payment intent is still processing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentTerminalCheckoutResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/loc/{location}/segments/{segment}/customer_handle/{customerHandle}": {
      "delete": {
        "summary": "Delete customer from segment",
        "tags": [
          "Segments"
        ],
        "operationId": "deleteCustomerFromSegmentByHandle",
        "description": "Takes in a segment uuid and a customer handle and removes that customer from the provided segment",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The url name or uuid of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "segment",
            "required": true,
            "description": "- The uuid of the segment",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "customerHandle",
            "required": true,
            "description": "- The phone number of the customer",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/v2/loc/{location}/segments/{segment}/customers": {
      "post": {
        "summary": "Add a customer to a segment",
        "tags": [
          "Segments"
        ],
        "operationId": "addCustomerToASegment",
        "description": "Takes in a segment uuid and a phone number to add a customer to a segment",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The url name or uuid of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "segment",
            "required": true,
            "description": "- The uuid of the segment",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/addCustomerSegmentInputs"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/v2/loc/{location}/segments/{segment}/customers/{customerId}": {
      "delete": {
        "summary": "Delete customer from segment",
        "tags": [
          "Segments"
        ],
        "operationId": "deleteCustomerFromSegment",
        "description": "Takes in a segment uuid and a customer id and removes that customer from the provided segment",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The url name or uuid of the location",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "segment",
            "required": true,
            "description": "- The uuid of the segment",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "customerId",
            "required": true,
            "description": "- The id of the customer",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/v2/loc/{location}/tabs/{tab}/item-groups": {
      "get": {
        "summary": "Get Item Groups",
        "tags": [
          "Payments"
        ],
        "description": "Gets tab item groups data",
        "operationId": "getItemGroups",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location of the item groups",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The uuid of the tab of the item groups",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Create Item Group",
        "tags": [
          "Payments"
        ],
        "description": "Creates an item group for the tab",
        "operationId": "createItemGroup",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location to create the item group in",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The uuid of the tab the item group will belong to",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "All fields are optional. Posting an empty body creates an empty, unnamed group. Only `item_id` and `quantity` are read from each item; all monetary values (subtotal, taxes, autograt, etc.) are computed server-side from the tab's item group templates.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Display name for the item group"
                  },
                  "items": {
                    "type": "array",
                    "description": "Items to seed the new item group with",
                    "items": {
                      "type": "object",
                      "required": [
                        "item_id",
                        "quantity"
                      ],
                      "properties": {
                        "item_id": {
                          "type": "string",
                          "description": "The id of the tab item to add"
                        },
                        "quantity": {
                          "type": "number",
                          "description": "Quantity of the item to add (supports fractional quantities)"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The created item group, including its computed totals and items"
          }
        }
      }
    },
    "/v2/loc/{location}/tabs/{tab}/item-groups/{item_group}": {
      "get": {
        "summary": "Get Item Group",
        "tags": [
          "Payments"
        ],
        "description": "Gets item group data",
        "operationId": "getItemGroup",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which the item group exists",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The uuid of the tab the item group belongs to",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "item_group",
            "required": true,
            "description": "- The uuid of the item group",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "post": {
        "summary": "Update Item Group Selection",
        "tags": [
          "Payments"
        ],
        "description": "Updates the customer item selection for an item group",
        "operationId": "updateItemGroupSelection",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which the item group exists",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The uuid of the tab the item group belongs to",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "item_group",
            "required": true,
            "description": "- The uuid of the item group",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "items": {
                    "type": "array",
                    "description": "The items to assign to the customer's selection"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      },
      "delete": {
        "summary": "Delete Item Group",
        "tags": [
          "Payments"
        ],
        "description": "Removes the item group from the tab",
        "operationId": "deleteItemGroup",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid or url_name the location in which the item group exists",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tab",
            "required": true,
            "description": "- The uuid of the tab the item group belongs to",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "item_group",
            "required": true,
            "description": "- The uuid of the item group",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    },
    "/v2/pl": {
      "post": {
        "tags": [
          "Pending Locations"
        ],
        "description": "Creates a new pending location",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "location_name": {
                    "type": "string",
                    "description": "The name of the location",
                    "example": "Bagel Byte Cafe"
                  },
                  "address": {
                    "type": "object",
                    "properties": {
                      "street_1": {
                        "type": "string",
                        "description": "The first line of the address",
                        "example": "123 Main St"
                      },
                      "street_2": {
                        "type": "string",
                        "description": "The second line of the address",
                        "example": "Unit 100"
                      },
                      "city": {
                        "type": "string",
                        "description": "The city of the address",
                        "example": "New York"
                      },
                      "state_or_province": {
                        "type": "string",
                        "description": "The state or province of the address",
                        "example": "NY"
                      },
                      "postal_code": {
                        "type": "string",
                        "description": "The postal code of the address",
                        "example": "10001"
                      },
                      "country": {
                        "type": "string",
                        "description": "The country of the address",
                        "example": "US"
                      }
                    }
                  }
                },
                "required": [
                  "location_name",
                  "address",
                  "address.street_1",
                  "address.city",
                  "address.state_or_province",
                  "address.postal_code",
                  "address.country"
                ],
                "example": {
                  "location_name": "Bagel Byte Cafe",
                  "address": {
                    "street_1": "123 Main St",
                    "street_2": "Unit 100",
                    "city": "New York",
                    "state_or_province": "NY",
                    "postal_code": "10001",
                    "country": "US"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The location was successfully created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/verification/challenge": {
      "post": {
        "summary": "Trigger OTP Challenge",
        "tags": [
          "Verification"
        ],
        "description": "Creates or resolves GoTab customer and triggers OTP challenge for verification",
        "operationId": "challengeCustomer",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerChallengeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Verification challenge created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerChallengeResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/verification/verify": {
      "post": {
        "summary": "Verify OTP Code",
        "tags": [
          "Verification"
        ],
        "description": "Verifies a previously issued OTP code and optionally returns a payment auth token",
        "operationId": "verifyCustomer",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerVerifyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Customer verified",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerVerifyResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v3/loc/{location}/operations/users": {
      "post": {
        "summary": "User and User Role Operations",
        "tags": [
          "Users V3"
        ],
        "operationId": "userOperations",
        "description": "Takes in array of user and user role operations and runs in the order that they are defined",
        "parameters": [
          {
            "in": "path",
            "name": "location",
            "required": true,
            "description": "- The uuid of the location",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Operations"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Data object returned with successful operation results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationsResponse"
                }
              }
            }
          },
          "409": {
            "description": "Data object returned containing errors as well as any successful operation results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/wallet/close": {
      "post": {
        "summary": "Close a zero-balance wallet tab",
        "tags": [
          "Wallet"
        ],
        "description": "Closes the tab associated with the wallet payment session token when it has no remaining balance due. The tab is resolved from the token (via `confirmWalletPermissions`), so no path parameter is needed. Mirrors the customer-flow `/.{tab_uuid}/close` behavior for the already-paid case (no order send, no display name update).",
        "operationId": "closeWalletTab",
        "responses": {
          "200": {
            "description": "Tab closed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "alerts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/wallet/pay": {
      "post": {
        "summary": "Create wallet payment",
        "tags": [
          "Wallet"
        ],
        "description": "Creates a payment on the tab associated with a valid wallet payment session token.",
        "operationId": "createWalletPayment",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "methods": {
                    "type": "array",
                    "description": "List of payment methods to apply to the tab.",
                    "items": {
                      "type": "object",
                      "description": "Payment method object compatible with the /.{tab_uuid}/pay route."
                    }
                  },
                  "pay_amount": {
                    "type": "integer",
                    "description": "Total amount to pay in minor units (e.g. cents)."
                  },
                  "tip_amount": {
                    "type": "integer",
                    "description": "Tip amount in minor units (e.g. cents)."
                  },
                  "customer_fee": {
                    "type": "integer",
                    "description": "Customer fee amount in minor units (e.g. cents)."
                  },
                  "insert_customer_tab": {
                    "type": "boolean",
                    "description": "Whether to insert a customer_tab row for this payment."
                  }
                },
                "required": [
                  "methods",
                  "pay_amount"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful wallet payment",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "alerts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "payments": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "redirect_url": {
                      "type": "string"
                    },
                    "processor_accounts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/wallet/payment-methods": {
      "get": {
        "summary": "List wallet payment methods",
        "tags": [
          "Wallet"
        ],
        "description": "Lists existing payment methods for the customer associated with a valid wallet payment session token. Each card includes its computed customer fee for the tab's current balance, and a separate digital_wallet_customer_fee is returned for Apple Pay (which may route through a different processor with a different fee). All fees are in minor currency units (e.g. cents) and are 0 when the tab has no balance due.",
        "operationId": "listWalletPaymentMethods",
        "responses": {
          "200": {
            "description": "Array of payment methods for the wallet customer with per-method customer fees",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "cards": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "payment_method_id": {
                            "type": "integer"
                          },
                          "payment_method_uuid": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "payment_method_first_name": {
                            "type": "string"
                          },
                          "payment_method_last_name": {
                            "type": "string"
                          },
                          "payment_type": {
                            "type": "string"
                          },
                          "visual_cue": {
                            "type": "string"
                          },
                          "expire_month": {
                            "type": "integer"
                          },
                          "expire_year": {
                            "type": "integer"
                          },
                          "zip": {
                            "type": "string"
                          },
                          "is_primary": {
                            "type": "boolean"
                          },
                          "customer_fee": {
                            "type": "integer",
                            "description": "Customer fee in minor units (e.g. cents) that would be charged if this card paid the current balance_due. 0 if balance_due is 0 or the fee could not be computed."
                          }
                        },
                        "required": [
                          "payment_method_id",
                          "payment_method_uuid",
                          "name",
                          "payment_method_first_name",
                          "payment_method_last_name",
                          "payment_type",
                          "visual_cue",
                          "expire_month",
                          "expire_year",
                          "zip",
                          "is_primary",
                          "customer_fee"
                        ]
                      },
                      "additionalProperties": false
                    },
                    "digital_wallet_customer_fee": {
                      "type": "integer",
                      "description": "Customer fee in minor units (e.g. cents) that would be charged if the current balance_due were paid via digital wallet (Apple Pay). 0 if balance_due is 0 or the fee could not be computed."
                    }
                  },
                  "required": [
                    "cards",
                    "digital_wallet_customer_fee"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete wallet payment method",
        "tags": [
          "Wallet"
        ],
        "description": "Deletes a payment method for the customer associated with a valid wallet payment session token.",
        "operationId": "deleteWalletPaymentMethod",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "payment_method_uuid": {
                    "type": "string"
                  }
                },
                "required": [
                  "payment_method_uuid"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful deletion of the wallet payment method",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "success"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/wallet/payment-methods/card": {
      "post": {
        "summary": "Add card to wallet",
        "tags": [
          "Wallet"
        ],
        "description": "Adds a new credit/debit card for the customer associated with a valid wallet payment session token.",
        "operationId": "addWalletCard",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "card_type": {
                    "type": "string"
                  },
                  "terms": {
                    "type": "boolean"
                  },
                  "first_name": {
                    "type": "string"
                  },
                  "last_name": {
                    "type": "string"
                  },
                  "card_number": {
                    "type": "string"
                  },
                  "cvc": {
                    "type": "string"
                  },
                  "month": {
                    "type": "string"
                  },
                  "year": {
                    "type": "string"
                  },
                  "zip": {
                    "type": "string"
                  }
                },
                "required": [
                  "card_type",
                  "terms"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful addition of the card",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "payment_method_uuid": {
                      "type": "string"
                    },
                    "alerts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  },
                  "required": [
                    "payment_method_uuid"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/wallet/payment-methods/{payment_method_id}/default": {
      "patch": {
        "summary": "Set primary payment method",
        "tags": [
          "Wallet"
        ],
        "description": "Sets a payment method as the primary payment method for the customer associated with a valid wallet payment session token.",
        "operationId": "setPrimaryWalletPaymentMethod",
        "parameters": [
          {
            "name": "payment_method_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully set primary payment method",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "success"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/wallet/payments/session": {
      "post": {
        "summary": "Create Digital Wallet Pay session",
        "tags": [
          "Wallet"
        ],
        "description": "Creates an Adyen payment session for Apple Pay (works with or without authentication)",
        "operationId": "createWalletApplePaySession",
        "responses": {
          "200": {
            "description": "Payment session created successfully"
          }
        }
      }
    }
  }
}
