{
  "openapi": "3.0.0",
  "info": {
    "title": "Private Tabs API",
    "description": "This is a PrivateTabs Accounts REST API based on the Swagger 2.0 specification.\n\n**HOW TO ACCESS THE API**  \nYou'll need to use an \"Authorization\" Bearer API token inserted into the header, which you can find when you log in to Private Tabs Desktop.  Please remember that you'll need to Base64-encode the token; this is one of the most common mistakes folks make when trying to authenticate against it.\n\n**HOW TO GET YOUR API TOKEN**  \nLog in to Private Tabs, then go into your settings and click on API Keys, or you can just [click here](https://app.privatetabs.com/settings/api-keys) after you have logged in.\n\n![PrivateTabs API Keys settings page](https://irp.cdn-website.com/140a2981/dms3rep/multi/APIExample-c0e07f10.png)\n\n**HOW TO TEST YOUR TOKEN**  \nYou can use the authorize option below to test your token. If that works then you know your token is good.\n\n**NEED HELP?**  \nNo problem, we're happy to help. You can book a meeting with your account manager anytime by visiting [http://privatetabs.com/meet](http://privatetabs.com/meet) or reach out to the support department via [http://privatetabs.com/support](http://privatetabs.com/support)\n\n**REMEMBER YOU ARE BOUND TO OUR TERMS**  \nBy using our API or giving out your API key, anyone who accesses our system using your keys is still bound to our terms and conditions, which means no bots or shady behavior, your account will be suspended. You can see our full terms and conditions by [clicking here](http://privatetabs.com/terms).\n",
    "version": "1.0.0"
  },
  "paths": {
    "/accounts": {
      "get": {
        "summary": "get-accounts",
        "description": "Gets my accounts",
        "tags": [
          "Accounts"
        ],
        "operationId": "get-accounts.get.accounts",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "perPage",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns accounts paginated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountsResp"
                }
              }
            }
          },
          "400": {
            "description": "Bad request error"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "403": {
            "description": "Forbidden error"
          },
          "500": {
            "description": "Internal server error"
          },
          "502": {
            "description": "Server error"
          },
          "default": {
            "description": "default response"
          }
        }
      },
      "post": {
        "summary": "add-account",
        "description": "Adds an account",
        "tags": [
          "Accounts"
        ],
        "operationId": "add-account.post.accounts",
        "security": [
          {
            "Authorization": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddAccountReq"
              }
            }
          },
          "description": "Body required in the request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResp"
                }
              }
            }
          },
          "400": {
            "description": "Bad request error"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "403": {
            "description": "Forbidden error"
          },
          "500": {
            "description": "Internal server error"
          },
          "502": {
            "description": "Server error"
          },
          "default": {
            "description": "default response"
          }
        }
      }
    },
    "/accounts/{accountprofileid}": {
      "get": {
        "summary": "get-account",
        "description": "Gets my account",
        "tags": [
          "Accounts"
        ],
        "operationId": "get-account.get.accounts/{accountprofileid}",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "accountprofileid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The account profile ID (accountprofileid) of the account."
          }
        ],
        "responses": {
          "200": {
            "description": "Returns account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResp"
                }
              }
            }
          },
          "400": {
            "description": "Bad request error"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "403": {
            "description": "Forbidden error"
          },
          "500": {
            "description": "Internal server error"
          },
          "502": {
            "description": "Server error"
          },
          "default": {
            "description": "default response"
          }
        }
      },
      "put": {
        "summary": "update-account",
        "description": "Updates account",
        "tags": [
          "Accounts"
        ],
        "operationId": "update-account.put.accounts/{accountprofileid}",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "accountprofileid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The account profile ID (accountprofileid) of the account."
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAccountReq"
              }
            }
          },
          "description": "Body required in the request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResp"
                }
              }
            }
          },
          "400": {
            "description": "Bad request error"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "403": {
            "description": "Forbidden error"
          },
          "500": {
            "description": "Internal server error"
          },
          "502": {
            "description": "Server error"
          },
          "default": {
            "description": "default response"
          }
        }
      },
      "delete": {
        "summary": "delete-account",
        "description": "Deletes account",
        "tags": [
          "Accounts"
        ],
        "operationId": "delete-account.delete.accounts/{accountprofileid}",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "accountprofileid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The account profile ID (accountprofileid) of the account."
          }
        ],
        "responses": {
          "200": {
            "description": "Returns status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResp"
                }
              }
            }
          },
          "400": {
            "description": "Bad request error"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "403": {
            "description": "Forbidden error"
          },
          "500": {
            "description": "Internal server error"
          },
          "502": {
            "description": "Server error"
          },
          "default": {
            "description": "default response"
          }
        }
      }
    },
    "/sms": {
      "get": {
        "tags": [
          "SMS Inbox"
        ],
        "summary": "List your SMS inbox",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Sms"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "404": {
            "description": "Not found or not owned by your account"
          }
        }
      }
    },
    "/sms/{id}": {
      "get": {
        "tags": [
          "SMS Inbox"
        ],
        "summary": "Get one text message by ID",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sms"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "404": {
            "description": "Not found or not owned by your account"
          }
        },
        "operationId": "get-sms-by-id.get.sms.id",
        "description": "Returns one text message from your SMS inbox by its ID. Only texts belonging to the account of the API key are returned; any other ID gives 404."
      }
    },
    "/emails": {
      "get": {
        "tags": [
          "Email Inbox"
        ],
        "summary": "List your email inbox (no body)",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Email"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "404": {
            "description": "Not found or not owned by your account"
          }
        }
      }
    },
    "/qstats": {
      "get": {
        "tags": [
          "Q Stats"
        ],
        "summary": "list-qstats",
        "description": "Retrieve Q Stats in a date range (max 90 days). Read-only. Cards show the last 4 digits only, and proxies show the IP only.",
        "security": [
          {
            "Authorization": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "dateTime": {
                            "type": "string",
                            "description": "Date / Time",
                            "format": "date-time"
                          },
                          "qLogId": {
                            "type": "string",
                            "description": "QLogID"
                          },
                          "qPos": {
                            "type": "integer",
                            "description": "Q Pos"
                          },
                          "marketplace": {
                            "type": "string",
                            "description": "Marketplace"
                          },
                          "eventId": {
                            "type": "string",
                            "description": "Event Id"
                          },
                          "eventName": {
                            "type": "string",
                            "description": "Event Name"
                          },
                          "venueId": {
                            "type": "string",
                            "description": "Venue ID"
                          },
                          "venue": {
                            "type": "string",
                            "description": "Venue"
                          },
                          "venueCity": {
                            "type": "string",
                            "description": "Venue City"
                          },
                          "venueState": {
                            "type": "string",
                            "description": "Venue State"
                          },
                          "browserType": {
                            "type": "string",
                            "description": "Browser Type"
                          },
                          "userType": {
                            "type": "string",
                            "description": "User Type"
                          },
                          "user": {
                            "type": "string",
                            "description": "User"
                          },
                          "accountEmail": {
                            "type": "string",
                            "description": "Account Email"
                          },
                          "accountPhone": {
                            "type": "string",
                            "description": "Account Phone"
                          },
                          "accountLast4": {
                            "type": "string",
                            "description": "Account Last 4"
                          },
                          "accountCity": {
                            "type": "string",
                            "description": "Account City"
                          },
                          "accountState": {
                            "type": "string",
                            "description": "Account State"
                          },
                          "proxyIp": {
                            "type": "string",
                            "description": "Proxy IP"
                          },
                          "ipCity": {
                            "type": "string",
                            "description": "IP City"
                          },
                          "ipState": {
                            "type": "string",
                            "description": "IP State"
                          },
                          "networkPool": {
                            "type": "string",
                            "description": "Network Pool"
                          },
                          "proxyType": {
                            "type": "string",
                            "description": "Proxy Type"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized error"
          },
          "403": {
            "description": "Endpoint not enabled",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "error": "Endpoint not enabled. Please contact Private Tabs customer service at 414-326-4100 to enable this endpoint."
                }
              }
            }
          },
          "500": {
            "description": "Internal server error"
          }
        },
        "parameters": [
          {
            "name": "QDateFrom",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$",
              "default": "10-13-2026",
              "example": "10-13-2026"
            },
            "description": "Start date (MM-DD-YYYY), for example 10-27-2026. Defaults to 30 days ago."
          },
          {
            "name": "QDateTo",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$",
              "default": "11-12-2026",
              "example": "11-12-2026"
            },
            "description": "End date (MM-DD-YYYY), for example 10-27-2026. Defaults to today. Range may be at most 90 days."
          }
        ]
      }
    },
    "/emails/{id}": {
      "get": {
        "tags": [
          "Email Inbox"
        ],
        "summary": "Get one email with text and HTML body",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailFull"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "404": {
            "description": "Not found or not owned by your account"
          }
        }
      }
    },
    "/purchases": {
      "get": {
        "tags": [
          "Purchased Inventory"
        ],
        "summary": "List purchase history",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 500
            }
          },
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "until",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Purchase"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "404": {
            "description": "Not found or not owned by your account"
          }
        }
      },
      "post": {
        "tags": [
          "Purchased Inventory"
        ],
        "summary": "Add a purchase",
        "security": [
          {
            "Authorization": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseCreate"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Purchase"
                }
              }
            }
          },
          "400": {
            "description": "eventName and eventVenue are required"
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "404": {
            "description": "Not found or not owned by your account"
          }
        }
      }
    },
    "/purchases/{id}": {
      "get": {
        "tags": [
          "Purchased Inventory"
        ],
        "summary": "Get one purchase",
        "security": [
          {
            "Authorization": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Purchase"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "404": {
            "description": "Not found or not owned by your account"
          }
        }
      }
    },
    "/marketplaces": {
      "get": {
        "tags": [
          "Marketplaces"
        ],
        "summary": "List marketplaces",
        "description": "Read-only list of all Private Tabs marketplaces (shared list, the same for every account). Any valid API key can read it. VictoryLiveID, Priority and LastUpdated may be null for now; the list is returned highest priority first.",
        "operationId": "list-marketplaces",
        "responses": {
          "200": {
            "description": "Marketplaces",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MarketPlace"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid AutoprocessorID (must be 1, 2, 3 or blank)"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "405": {
            "description": "Only GET is allowed"
          }
        },
        "parameters": [
          {
            "name": "AutoprocessorID",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ]
            },
            "description": "Filter by autoprocessor: Automatiq = 1, 1 Ticket = 2, Victory Live = 3, leave blank for all. Note: VictoryLiveID is not populated yet, so 3 may return no marketplaces for now."
          }
        ],
        "security": [
          {
            "Authorization": []
          }
        ]
      }
    },
    "/tags": {
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "List your account's tags",
        "operationId": "list-tags",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagList"
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      },
      "post": {
        "tags": [
          "Tags"
        ],
        "summary": "Add a tag",
        "operationId": "add-tag",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagReq"
              },
              "example": {
                "name": "VIP",
                "color": "blue"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tag"
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      }
    },
    "/tags/{id}": {
      "put": {
        "tags": [
          "Tags"
        ],
        "summary": "Update a tag",
        "operationId": "update-tag",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "TagID"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagReq"
              },
              "example": {
                "name": "VIP",
                "color": "blue"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tag"
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      },
      "delete": {
        "tags": [
          "Tags"
        ],
        "summary": "Delete a tag",
        "operationId": "delete-tag",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "TagID"
          }
        ],
        "responses": {
          "200": {
            "description": "Deleted"
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      }
    },
    "/AccountPasswordsByMarketPlace": {
      "get": {
        "tags": [
          "Marketplace Passwords"
        ],
        "summary": "List saved marketplace passwords",
        "description": "Only account profiles in your own account can be used. Any other AccountProfileID returns 404. GET returns each saved Password. Saving one marketplace never changes the passwords for other marketplaces. The old path /MarketPlacePasswords still works as an alias.",
        "operationId": "list-marketplace-passwords",
        "parameters": [
          {
            "name": "AccountProfileID",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "One of your own account profiles (accountprofileid)."
          },
          {
            "name": "MarketPlaceID",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketPlacePasswordList"
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      },
      "post": {
        "tags": [
          "Marketplace Passwords"
        ],
        "summary": "Save (add or replace) one marketplace password",
        "description": "Only account profiles in your own account can be used. Any other AccountProfileID returns 404. GET returns each saved Password. Saving one marketplace never changes the passwords for other marketplaces. The old path /MarketPlacePasswords still works as an alias.",
        "operationId": "add-marketplace-password",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarketPlacePasswordReq"
              },
              "example": {
                "AccountProfileID": 123,
                "MarketPlaceID": 1,
                "Password": "your-password"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketPlacePassword"
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      }
    },
    "/AccountPasswordsByMarketPlace/{MarketPlaceID}": {
      "put": {
        "tags": [
          "Marketplace Passwords"
        ],
        "summary": "Save (add or replace) one marketplace password",
        "description": "Only account profiles in your own account can be used. Any other AccountProfileID returns 404. GET returns each saved Password. Saving one marketplace never changes the passwords for other marketplaces. The old path /MarketPlacePasswords still works as an alias.",
        "operationId": "update-marketplace-password",
        "parameters": [
          {
            "name": "MarketPlaceID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "Marketplace ID (see GET /marketplaces)"
          },
          {
            "name": "AccountProfileID",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "One of your own account profiles (accountprofileid)."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarketPlacePasswordReq"
              },
              "example": {
                "AccountProfileID": 123,
                "MarketPlaceID": 1,
                "Password": "your-password"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketPlacePassword"
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      },
      "delete": {
        "tags": [
          "Marketplace Passwords"
        ],
        "summary": "Delete one marketplace password",
        "description": "Only account profiles in your own account can be used. Any other AccountProfileID returns 404. GET returns each saved Password. Saving one marketplace never changes the passwords for other marketplaces. The old path /MarketPlacePasswords still works as an alias.",
        "operationId": "delete-marketplace-password",
        "parameters": [
          {
            "name": "MarketPlaceID",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "Marketplace ID (see GET /marketplaces)"
          },
          {
            "name": "AccountProfileID",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "One of your own account profiles (accountprofileid)."
          }
        ],
        "responses": {
          "200": {
            "description": "Deleted"
          },
          "400": {
            "description": "Bad request"
          },
          "401": {
            "description": "Unauthorized error"
          },
          "404": {
            "description": "Not found, or not in your account"
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api.privatetabs.com",
      "description": "Private Tabs API"
    },
    {
      "url": "http://api.privatetabs.com",
      "description": "This host"
    }
  ],
  "components": {
    "securitySchemes": {
      "Authorization": {
        "type": "apiKey",
        "name": "Authorization",
        "in": "header",
        "description": "**Please Test Your Private Tabs API Key Below**\n\nTo test your key, simply copy and paste your API Key below. You can find your API key located in the Private Tabs application by clicking the profile icon in the upper right to go into settings. Once in Settings, click “API Keys” on the left-hand side.\n\n#### COPY AND PASTE YOUR TOKEN\n\nTo see an example of this, please copy and paste your API key below."
      }
    },
    "schemas": {
      "AddAccountReq": {
        "properties": {
          "phone": {
            "title": "AddAccountReq.phone",
            "type": "string"
          },
          "email": {
            "title": "AddAccountReq.email",
            "type": "string"
          },
          "firstName": {
            "title": "AddAccountReq.firstName",
            "type": "string"
          },
          "lastName": {
            "title": "AddAccountReq.lastName",
            "type": "string"
          },
          "password": {
            "title": "AddAccountReq.password",
            "type": "string"
          },
          "birthday": {
            "title": "AddAccountReq.birthday",
            "type": "string",
            "example": "13/11/1998"
          },
          "address": {
            "title": "AddAccountReq.address",
            "type": "string"
          },
          "city": {
            "title": "AddAccountReq.city",
            "type": "string"
          },
          "state": {
            "title": "AddAccountReq.state",
            "type": "string"
          },
          "zip": {
            "title": "AddAccountReq.zip",
            "type": "string"
          },
          "ccNumber": {
            "title": "AddAccountReq.ccNumber",
            "type": "string",
            "description": "Last 4 digits of the card only. If a longer number is sent, only the last 4 digits are kept.",
            "example": "4242"
          },
          "ccName": {
            "title": "AddAccountReq.ccName",
            "type": "string",
            "example": "Jane Doe"
          },
          "ccCvs": {
            "title": "AddAccountReq.ccCvs",
            "type": "string",
            "description": "Ignored. CVV codes are never accepted or stored; this field is removed before saving.",
            "deprecated": true
          },
          "ccExpire": {
            "title": "AddAccountReq.ccExpire",
            "type": "string",
            "example": "12/34"
          }
        },
        "required": [
          "email",
          "firstName",
          "lastName",
          "password"
        ],
        "additionalProperties": false,
        "title": "AddAccountReq",
        "type": "object"
      },
      "UpdateAccountReq": {
        "properties": {
          "phone": {
            "title": "UpdateAccountReq.phone",
            "type": "string"
          },
          "email": {
            "title": "UpdateAccountReq.email",
            "type": "string"
          },
          "firstName": {
            "title": "UpdateAccountReq.firstName",
            "type": "string"
          },
          "lastName": {
            "title": "UpdateAccountReq.lastName",
            "type": "string"
          },
          "password": {
            "title": "UpdateAccountReq.password",
            "type": "string"
          },
          "birthday": {
            "title": "UpdateAccountReq.birthday",
            "type": "string",
            "example": "13/11/1998"
          },
          "address": {
            "title": "UpdateAccountReq.address",
            "type": "string"
          },
          "city": {
            "title": "UpdateAccountReq.city",
            "type": "string"
          },
          "state": {
            "title": "UpdateAccountReq.state",
            "type": "string"
          },
          "zip": {
            "title": "UpdateAccountReq.zip",
            "type": "string"
          },
          "ccNumber": {
            "title": "UpdateAccountReq.ccNumber",
            "type": "string",
            "description": "Last 4 digits of the card only. If a longer number is sent, only the last 4 digits are kept.",
            "example": "4242"
          },
          "ccName": {
            "title": "UpdateAccountReq.ccName",
            "type": "string",
            "example": "Jane Doe"
          },
          "ccCvs": {
            "title": "UpdateAccountReq.ccCvs",
            "type": "string",
            "description": "Ignored. CVV codes are never accepted or stored; this field is removed before saving.",
            "deprecated": true
          },
          "ccExpire": {
            "title": "UpdateAccountReq.ccExpire",
            "type": "string",
            "example": "12/34"
          }
        },
        "additionalProperties": false,
        "title": "UpdateAccountReq",
        "type": "object"
      },
      "SuccessResp": {
        "properties": {
          "success": {
            "title": "SuccessResp.success",
            "type": "boolean"
          }
        },
        "required": [
          "success"
        ],
        "additionalProperties": false,
        "title": "SuccessResp",
        "type": "object"
      },
      "AccountResp": {
        "properties": {
          "accountprofileid": {
            "title": "AccountResp.accountprofileid",
            "type": "integer",
            "description": "Account profile ID, the unique key for this account. Use it in /accounts/{accountprofileid}."
          },
          "phone": {
            "title": "AccountResp.phone",
            "type": "string"
          },
          "email": {
            "title": "AccountResp.email",
            "type": "string"
          },
          "firstName": {
            "title": "AccountResp.firstName",
            "type": "string"
          },
          "lastName": {
            "title": "AccountResp.lastName",
            "type": "string"
          },
          "password": {
            "title": "AccountResp.password",
            "type": "string"
          },
          "birthday": {
            "title": "AccountResp.birthday",
            "type": "string",
            "example": "13/11/1998"
          },
          "address": {
            "title": "AccountResp.address",
            "type": "string"
          },
          "city": {
            "title": "AccountResp.city",
            "type": "string"
          },
          "state": {
            "title": "AccountResp.state",
            "type": "string"
          },
          "zip": {
            "title": "AccountResp.zip",
            "type": "string"
          },
          "ccNumber": {
            "title": "AccountResp.ccNumber",
            "type": "string",
            "description": "Last 4 digits of the card only. If a longer number is sent, only the last 4 digits are kept.",
            "example": "4242"
          },
          "ccName": {
            "title": "AccountResp.ccName",
            "type": "string",
            "example": "Jane Doe"
          },
          "ccExpire": {
            "title": "AccountResp.ccExpire",
            "type": "string",
            "example": "12/34"
          },
          "createdAt": {
            "title": "AccountResp.createdAt",
            "type": "string"
          },
          "updatedAt": {
            "title": "AccountResp.updatedAt",
            "type": "string"
          }
        },
        "required": [
          "accountprofileid",
          "firstName",
          "lastName",
          "email",
          "password",
          "createdAt",
          "updatedAt"
        ],
        "additionalProperties": false,
        "title": "AccountResp",
        "type": "object"
      },
      "AccountsResp": {
        "properties": {
          "page": {
            "title": "AccountsResp.page",
            "type": "integer"
          },
          "perPage": {
            "title": "AccountsResp.perPage",
            "type": "integer"
          },
          "total": {
            "title": "AccountsResp.total",
            "type": "integer"
          },
          "data": {
            "title": "AccountsResp.data",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountResp"
            }
          }
        }
      },
      "AccountFieldsResp": {
        "title": "AccountFieldsResp",
        "type": "object",
        "properties": {
          "activeColumns": {
            "title": "AccountFieldsResp.activeColumns",
            "type": "string",
            "description": "Active columns",
            "example": "string"
          },
          "name": {
            "title": "AccountFieldsResp.name",
            "type": "string",
            "description": "Name",
            "example": "string"
          },
          "phone": {
            "title": "AccountFieldsResp.phone",
            "type": "string",
            "description": "Phone",
            "example": "string"
          },
          "health": {
            "title": "AccountFieldsResp.health",
            "type": "string",
            "description": "Health",
            "example": "string"
          },
          "proxy": {
            "title": "AccountFieldsResp.proxy",
            "type": "string",
            "description": "Proxy (IP address only; proxy usernames and passwords are never returned)",
            "example": "string"
          },
          "proxyNetwork": {
            "title": "AccountFieldsResp.proxyNetwork",
            "type": "string",
            "description": "Proxy Network",
            "example": "string"
          },
          "tags": {
            "title": "AccountFieldsResp.tags",
            "type": "string",
            "description": "Tags",
            "example": "string"
          },
          "city": {
            "title": "AccountFieldsResp.city",
            "type": "string",
            "description": "City",
            "example": "string"
          },
          "state": {
            "title": "AccountFieldsResp.state",
            "type": "string",
            "description": "State",
            "example": "string"
          },
          "lastUsed": {
            "title": "AccountFieldsResp.lastUsed",
            "type": "string",
            "description": "Last Used",
            "example": "string"
          },
          "createdAt": {
            "title": "AccountFieldsResp.createdAt",
            "type": "string",
            "description": "Created At",
            "example": "string"
          },
          "cc": {
            "title": "AccountFieldsResp.cc",
            "type": "string",
            "description": "Card (last 4 digits only)",
            "example": "string"
          },
          "assigned": {
            "title": "AccountFieldsResp.assigned",
            "type": "string",
            "description": "Assigned",
            "example": "string"
          },
          "qPos": {
            "title": "AccountFieldsResp.qPos",
            "type": "string",
            "description": "Q.Pos.",
            "example": "string"
          },
          "availableColumns": {
            "title": "AccountFieldsResp.availableColumns",
            "type": "string",
            "description": "Available columns",
            "example": "string"
          },
          "password": {
            "title": "AccountFieldsResp.password",
            "type": "string",
            "description": "Password",
            "example": "string"
          },
          "source": {
            "title": "AccountFieldsResp.source",
            "type": "string",
            "description": "Source",
            "example": "string"
          },
          "zip": {
            "title": "AccountFieldsResp.zip",
            "type": "string",
            "description": "Zip",
            "example": "string"
          },
          "birthday": {
            "title": "AccountFieldsResp.birthday",
            "type": "string",
            "description": "Birthday",
            "example": "string"
          },
          "ccName": {
            "title": "AccountFieldsResp.ccName",
            "type": "string",
            "description": "CC Name",
            "example": "string"
          },
          "ccExpire": {
            "title": "AccountFieldsResp.ccExpire",
            "type": "string",
            "description": "CC Expire",
            "example": "12/34"
          }
        },
        "additionalProperties": false
      },
      "EventResp": {
        "title": "EventResp",
        "type": "object",
        "properties": {
          "eventName": {
            "type": "string",
            "example": "string"
          },
          "price": {
            "type": "number",
            "example": 0
          },
          "lowPrice": {
            "type": "number",
            "example": 0
          },
          "highPrice": {
            "type": "number",
            "example": 0
          },
          "venue": {
            "type": "string",
            "example": "string"
          },
          "city": {
            "type": "string",
            "example": "string"
          },
          "state": {
            "type": "string",
            "example": "string"
          },
          "country": {
            "type": "string",
            "example": "string"
          },
          "eventDate": {
            "type": "string",
            "example": "string"
          },
          "presaleBeginDateTime": {
            "type": "string",
            "example": "string"
          },
          "publicSaleDateTime": {
            "type": "string",
            "example": "string"
          },
          "category": {
            "type": "string",
            "example": "string"
          },
          "saleType": {
            "type": "string",
            "example": "string"
          },
          "presaleName": {
            "type": "string",
            "example": "string"
          },
          "ticketAgent": {
            "type": "string",
            "example": "string"
          },
          "status": {
            "type": "string",
            "example": "string"
          },
          "preSaleCodes": {
            "type": "array",
            "example": [
              "string"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EventsResp": {
        "title": "EventsResp",
        "type": "object",
        "properties": {
          "page": {
            "type": "integer"
          },
          "perPage": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventResp"
            }
          }
        }
      },
      "Purchase": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "orderNumber": {
            "type": "string",
            "nullable": true
          },
          "eventName": {
            "type": "string"
          },
          "eventDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "eventVenue": {
            "type": "string"
          },
          "eventId": {
            "type": "string",
            "nullable": true
          },
          "eventUrl": {
            "type": "string",
            "nullable": true
          },
          "eventImage": {
            "type": "string",
            "nullable": true
          },
          "website": {
            "type": "string",
            "nullable": true
          },
          "seatsInfo": {
            "type": "string",
            "nullable": true
          },
          "quantity": {
            "type": "integer",
            "nullable": true
          },
          "totalPrice": {
            "type": "string",
            "nullable": true
          },
          "orderFees": {
            "type": "number",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "ticketItems": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "nullable": true
          },
          "buyerInfo": {
            "type": "object",
            "nullable": true,
            "description": "Passwords, tokens and logins are always removed."
          },
          "cardLast4": {
            "type": "string",
            "description": "Last 4 digits only. Full card numbers and CVV are never stored or returned."
          },
          "saleType": {
            "type": "string",
            "nullable": true
          },
          "presaleType": {
            "type": "string",
            "nullable": true
          },
          "profileId": {
            "type": "integer",
            "nullable": true
          },
          "profileEmail": {
            "type": "string",
            "nullable": true
          },
          "proxyIp": {
            "type": "string",
            "nullable": true,
            "description": "Proxy IP address only. Proxy usernames and passwords are never returned."
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PurchaseCreate": {
        "type": "object",
        "required": [
          "eventName",
          "eventVenue"
        ],
        "properties": {
          "orderNumber": {
            "type": "string",
            "nullable": true
          },
          "eventName": {
            "type": "string"
          },
          "eventDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "eventVenue": {
            "type": "string"
          },
          "eventId": {
            "type": "string",
            "nullable": true
          },
          "eventUrl": {
            "type": "string",
            "nullable": true
          },
          "eventImage": {
            "type": "string",
            "nullable": true
          },
          "website": {
            "type": "string",
            "nullable": true
          },
          "seatsInfo": {
            "type": "string",
            "nullable": true
          },
          "quantity": {
            "type": "integer",
            "nullable": true
          },
          "totalPrice": {
            "type": "string",
            "nullable": true
          },
          "orderFees": {
            "type": "number",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "ticketItems": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "nullable": true
          },
          "buyerInfo": {
            "type": "object",
            "nullable": true,
            "description": "Passwords, tokens and logins are always removed."
          },
          "cardLast4": {
            "type": "string",
            "description": "Last 4 digits only. Full card numbers and CVV are never stored or returned."
          },
          "saleType": {
            "type": "string",
            "nullable": true
          },
          "presaleType": {
            "type": "string",
            "nullable": true
          },
          "profileId": {
            "type": "integer",
            "nullable": true
          },
          "profileEmail": {
            "type": "string",
            "nullable": true
          },
          "proxyIp": {
            "type": "string",
            "nullable": true,
            "description": "Proxy IP address only. Proxy usernames and passwords are never returned."
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Sms": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "toNumber": {
            "type": "string",
            "nullable": true
          },
          "from": {
            "type": "string",
            "nullable": true
          },
          "text": {
            "type": "string",
            "nullable": true
          },
          "profiles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "email": {
                  "type": "string",
                  "nullable": true
                },
                "firstName": {
                  "type": "string",
                  "nullable": true
                },
                "lastName": {
                  "type": "string",
                  "nullable": true
                }
              }
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Email": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "recipient": {
            "type": "string",
            "nullable": true
          },
          "from": {
            "type": "string",
            "nullable": true
          },
          "sender": {
            "type": "string",
            "nullable": true
          },
          "subject": {
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "EmailFull": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Email"
          },
          {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "nullable": true
              },
              "html": {
                "type": "string",
                "nullable": true
              }
            }
          }
        ]
      },
      "ActivateResp": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "example": "Contact Private Tabs to activate"
          }
        },
        "required": [
          "error"
        ]
      },
      "TagReq": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "VIP"
          },
          "color": {
            "type": "string",
            "example": "#2563eb"
          }
        },
        "required": [
          "name"
        ]
      },
      "MarketPlacePasswordReq": {
        "type": "object",
        "properties": {
          "AccountProfileID": {
            "type": "integer"
          },
          "MarketPlaceID": {
            "type": "integer"
          },
          "Password": {
            "type": "string",
            "format": "password",
            "writeOnly": true
          }
        },
        "required": [
          "AccountProfileID",
          "MarketPlaceID",
          "Password"
        ]
      },
      "MarketPlacePassword": {
        "type": "object",
        "description": "A saved marketplace password for one of your account profiles.",
        "properties": {
          "AccountProfileID": {
            "type": "integer"
          },
          "MarketPlaceID": {
            "type": "integer"
          },
          "LastUpdated": {
            "type": "string",
            "format": "date-time"
          },
          "Password": {
            "type": "string"
          }
        }
      },
      "MarketPlace": {
        "type": "object",
        "properties": {
          "MarketPlaceID": {
            "type": "integer"
          },
          "Name": {
            "type": "string"
          },
          "URL": {
            "type": "string"
          },
          "AutomatiqID": {
            "type": "string"
          },
          "1TicketID": {
            "type": "string"
          },
          "VictoryLiveID": {
            "type": "string"
          },
          "Priority": {
            "type": "integer"
          },
          "MarketPlaceName": {
            "type": "string"
          },
          "MarketPlaceURL": {
            "type": "string"
          },
          "LastUpdated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Tag": {
        "type": "object",
        "properties": {
          "TagID": {
            "type": "integer"
          },
          "Name": {
            "type": "string"
          },
          "Color": {
            "type": "string"
          },
          "ProfileCount": {
            "type": "integer"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "LastUpdated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TagList": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer"
          },
          "perPage": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          }
        }
      },
      "MarketPlacePasswordList": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer"
          },
          "perPage": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketPlacePassword"
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Accounts",
      "description": "You can use this endpoint to insert new accounts, get existing accounts, update accounts, or delete accounts from within your Private Tabs software suite."
    },
    {
      "name": "SMS Inbox",
      "description": "The following will control inserting and retrieving messages from the SMS inbox; the POST will NOT send an actual text, but will instead insert a record in your inbox. We currently do not allow you to delete messages due to compliance reasons."
    },
    {
      "name": "Email Inbox",
      "description": "The following will control inserting and retrieving messages from the email inbox; the POST will NOT send an actual email, but will instead insert a record in your inbox."
    },
    {
      "name": "Purchased Inventory",
      "description": "Insert and retrieve purchase records. GET requires a date range of up to 90 days."
    },
    {
      "name": "Q Stats",
      "description": "Retrieve queue statistics (Q Stats). GET requires a date range of up to 90 days."
    },
    {
      "name": "Tags",
      "description": "Add, update, delete and list the tags in your Private Tabs tagging system."
    },
    {
      "name": "Marketplace Passwords",
      "description": "Link a marketplace password to one of your own account profiles (AccountProfileID + MarketPlaceID). A key can only see or write rows for its own account's profiles; any other AccountProfileID is rejected. Passwords are never returned."
    },
    {
      "name": "Marketplaces",
      "description": "Read-only list of the marketplaces Private Tabs supports."
    }
  ],
  "security": [
    {
      "Authorization": []
    }
  ]
}