{
  "openapi": "3.0.3",
  "info": {
    "title": "Operator Site FAQs API",
    "version": "1.0.0",
    "description": "API for operators to manage a venue's public-facing FAQ list, and for partners to read it.\n\nFAQs are a JSON array of `{question, answer}` items stored per venue. `question`/`answer` values are plain strings and may contain markdown syntax (e.g. `**bold**`, links, lists); the server does not parse or sanitize markdown — it is rendered client-side.\n\nThe venue is identified by its composite ID — `{venueGroupId}|{rmsSlug}|{venueId}` — and the caller's venue-group ownership of (or partner mapping to) that venue is enforced server-side.\n\n**Verbs:**\n- `GET`     returns the current FAQ array (empty array when none stored). Readable by operators and mapped partners.\n- `PUT`     replaces the whole array — this is also the bulk-import mechanism for a single venue's full FAQ list.\n- `PATCH`   applies an [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902) JSON Patch document against the array (item-index pointers, e.g. `/0/answer`, or `/-` to append).\n- `DELETE`  wipes the stored array. Idempotent.\n- `POST /venues/site-faqs/bulk` applies changes across many venues in one transaction (all-or-nothing).\n"
  },
  "servers": [
    {
      "url": "https://api.bookabletech.com",
      "description": "Live"
    }
  ],
  "tags": [
    {
      "name": "operator-site-faqs",
      "description": "Public-facing FAQ list attached to a venue, owned and managed by the operator, readable by mapped partners.\n"
    }
  ],
  "paths": {
    "/venues/{venueCompositeId}/site-faqs": {
      "get": {
        "tags": [
          "operator-site-faqs"
        ],
        "summary": "Get site FAQs for a venue",
        "description": "Returns the stored FAQ array for the venue. When no FAQs are stored, returns an empty array.\n",
        "operationId": "getVenueSiteFaqs",
        "parameters": [
          {
            "name": "venueCompositeId",
            "in": "path",
            "required": true,
            "description": "Composite venue identifier in `{venueGroupId}|{rmsSlug}|{venueId}` format.",
            "schema": {
              "type": "string",
              "example": "1|CO|123"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Site FAQs successfully retrieved.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SiteFaqsResponse"
                },
                "example": {
                  "venueCompositeId": "1|CO|123",
                  "faqs": [
                    {
                      "question": "What is your cancellation policy?",
                      "answer": "See our **cancellation policy** [here](https://example.com/policy)."
                    },
                    {
                      "question": "Do you offer private dining?",
                      "answer": "Yes, contact the venue directly to arrange."
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "security": [
          {
            "Live": [
              "venue-site-faqs:read"
            ]
          },
          {
            "Live": [
              "venue-group:read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "operator-site-faqs"
        ],
        "summary": "Replace site FAQs for a venue",
        "description": "Replaces the stored FAQ array with the provided body. This is the bulk-import mechanism for a single venue — send the complete FAQ list in one call to import/replace it.\nUpserts the row when no FAQs are currently stored for the venue.\n",
        "operationId": "replaceVenueSiteFaqs",
        "parameters": [
          {
            "name": "venueCompositeId",
            "in": "path",
            "required": true,
            "description": "Composite venue identifier in `{venueGroupId}|{rmsSlug}|{venueId}` format.",
            "schema": {
              "type": "string",
              "example": "1|CO|123"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SiteFaqsRequest"
              },
              "example": {
                "faqs": [
                  {
                    "question": "What is your cancellation policy?",
                    "answer": "See our **cancellation policy** [here](https://example.com/policy)."
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Site FAQs successfully replaced.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SiteFaqsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "security": [
          {
            "Live": [
              "venue-group:update"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "operator-site-faqs"
        ],
        "summary": "Patch site FAQs for a venue (RFC 6902)",
        "description": "Applies an [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902) JSON Patch document to the stored FAQ array. Supported operations are `add`, `remove`, and `replace`. Paths are JSON Pointers ([RFC 6901](https://datatracker.ietf.org/doc/html/rfc6901)) into the stored array — e.g. `/0/answer` references the `answer` key of the first FAQ item, `/-` appends a new item to the end. Upserts when no row exists; the patch is applied against an empty array in that case.\n\n**Examples:**\n\nAppend a new FAQ item:\n```json\n[\n  { \"op\": \"add\", \"path\": \"/-\", \"value\": { \"question\": \"Do you take walk-ins?\", \"answer\": \"Yes, subject to availability.\" } }\n]\n```\n\nReplace an existing item's answer:\n```json\n[\n  { \"op\": \"replace\", \"path\": \"/0/answer\", \"value\": \"Updated answer text.\" }\n]\n```\n\nRemove an item:\n```json\n[\n  { \"op\": \"remove\", \"path\": \"/2\" }\n]\n```\n",
        "operationId": "patchVenueSiteFaqs",
        "parameters": [
          {
            "name": "venueCompositeId",
            "in": "path",
            "required": true,
            "description": "Composite venue identifier in `{venueGroupId}|{rmsSlug}|{venueId}` format.",
            "schema": {
              "type": "string",
              "example": "1|CO|123"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Array of JSON Patch operations to apply to the stored FAQ array.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/components/schemas/JsonPatchOperation"
                }
              },
              "examples": {
                "appendItem": {
                  "summary": "Append a new FAQ item",
                  "value": [
                    {
                      "op": "add",
                      "path": "/-",
                      "value": {
                        "question": "Do you take walk-ins?",
                        "answer": "Yes, subject to availability."
                      }
                    }
                  ]
                },
                "replaceAnswer": {
                  "summary": "Replace an existing item's answer",
                  "value": [
                    {
                      "op": "replace",
                      "path": "/0/answer",
                      "value": "Updated answer text."
                    }
                  ]
                },
                "removeItem": {
                  "summary": "Remove an item by index",
                  "value": [
                    {
                      "op": "remove",
                      "path": "/2"
                    }
                  ]
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Site FAQs successfully patched.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SiteFaqsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "security": [
          {
            "Live": [
              "venue-group:update"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "operator-site-faqs"
        ],
        "summary": "Delete all site FAQs for a venue",
        "description": "Removes the entire stored FAQ row for the venue. Idempotent — returns 204 whether or not the row existed.\n",
        "operationId": "deleteVenueSiteFaqs",
        "parameters": [
          {
            "name": "venueCompositeId",
            "in": "path",
            "required": true,
            "description": "Composite venue identifier in `{venueGroupId}|{rmsSlug}|{venueId}` format.",
            "schema": {
              "type": "string",
              "example": "1|CO|123"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Site FAQs successfully deleted."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "security": [
          {
            "Live": [
              "venue-group:delete"
            ]
          }
        ]
      }
    },
    "/venues/site-faqs/bulk": {
      "post": {
        "tags": [
          "operator-site-faqs"
        ],
        "summary": "Bulk apply site FAQs across many venues",
        "description": "Applies FAQ changes to many venues in a single all-or-nothing transaction. Any per-item failure (unknown venue, foreign venue group, invalid composite ID, invalid patch) rolls back the whole request.\n\nEach item declares the target venue (`venueCompositeId`) and the `mode`:\n- `replace` — overwrite the stored array with `faqs`.\n- `patch`   — apply an [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902) JSON Patch document (`patch` field) to the stored array.\n\nPer mode, exactly one payload field is expected: `faqs` for `replace`, `patch` for `patch`.\n",
        "operationId": "bulkApplyVenueSiteFaqs",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SiteFaqsBulkRequest"
              },
              "example": {
                "items": [
                  {
                    "venueCompositeId": "1|CO|123",
                    "mode": "patch",
                    "patch": [
                      {
                        "op": "add",
                        "path": "/-",
                        "value": {
                          "question": "Do you take walk-ins?",
                          "answer": "Yes, subject to availability."
                        }
                      }
                    ]
                  },
                  {
                    "venueCompositeId": "1|CO|124",
                    "mode": "replace",
                    "faqs": [
                      {
                        "question": "What is your cancellation policy?",
                        "answer": "See our **cancellation policy** [here](https://example.com/policy)."
                      }
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Bulk apply completed successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SiteFaqsBulkResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "security": [
          {
            "Live": [
              "venue-group:update"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "SiteFaqsResponse": {
        "type": "object",
        "description": "Current FAQ array for the venue.",
        "properties": {
          "venueCompositeId": {
            "type": "string",
            "description": "Composite venue identifier.",
            "example": "1|CO|123"
          },
          "faqs": {
            "type": "array",
            "description": "FAQ items for the venue.",
            "items": {
              "$ref": "#/components/schemas/FaqItem"
            },
            "example": [
              {
                "question": "What is your cancellation policy?",
                "answer": "See our **cancellation policy** [here](https://example.com/policy)."
              }
            ]
          }
        },
        "required": [
          "venueCompositeId",
          "faqs"
        ]
      },
      "SiteFaqsRequest": {
        "type": "object",
        "description": "Request payload for the replace (PUT) operation.",
        "properties": {
          "faqs": {
            "type": "array",
            "description": "FAQ items for the venue.",
            "items": {
              "$ref": "#/components/schemas/FaqItem"
            },
            "example": [
              {
                "question": "What is your cancellation policy?",
                "answer": "See our **cancellation policy** [here](https://example.com/policy)."
              }
            ]
          }
        },
        "required": [
          "faqs"
        ]
      },
      "JsonPatchOperation": {
        "type": "object",
        "title": "JSON Patch Operation (RFC 6902)",
        "description": "A single JSON Patch operation following [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902). Each operation modifies the target document at the specified `path`.\n",
        "required": [
          "op",
          "path"
        ],
        "properties": {
          "op": {
            "type": "string",
            "enum": [
              "add",
              "remove",
              "replace"
            ],
            "description": "The operation to perform.",
            "example": "replace"
          },
          "path": {
            "type": "string",
            "pattern": "^\\/.*",
            "description": "JSON Pointer ([RFC 6901](https://datatracker.ietf.org/doc/html/rfc6901)) to the target location within the stored FAQ array. Must start with `/`. Use an integer segment to address an item by index (e.g. `/0`), and `-` to append (e.g. `/-`).\n",
            "example": "/0/answer"
          },
          "value": {
            "nullable": true,
            "description": "The value to use for the operation. Required for `add` and `replace`. Omit (or set to null) for `remove`. Can be any valid JSON value (string, number, boolean, object, array, null).\n",
            "example": "Updated answer text."
          }
        }
      },
      "SiteFaqsBulkItem": {
        "type": "object",
        "description": "A single bulk item describing a per-venue change.\n\n- When `mode` is `replace`, `faqs` is required and contains the full replacement array.\n- When `mode` is `patch`, `patch` is required and contains an RFC 6902 operation array.\n",
        "properties": {
          "venueCompositeId": {
            "type": "string",
            "description": "Composite venue identifier in `{venueGroupId}|{rmsSlug}|{venueId}` format.",
            "example": "1|CO|123"
          },
          "mode": {
            "type": "string",
            "description": "How to apply the payload to the stored array.",
            "enum": [
              "replace",
              "patch"
            ],
            "example": "patch"
          },
          "faqs": {
            "type": "array",
            "nullable": true,
            "description": "FAQ items. Required when `mode` is `replace`; ignored otherwise.\n",
            "items": {
              "$ref": "#/components/schemas/FaqItem"
            }
          },
          "patch": {
            "type": "array",
            "nullable": true,
            "minItems": 1,
            "description": "RFC 6902 JSON Patch operations. Required when `mode` is `patch`; ignored otherwise.\n",
            "items": {
              "$ref": "#/components/schemas/JsonPatchOperation"
            }
          }
        },
        "required": [
          "venueCompositeId",
          "mode"
        ]
      },
      "SiteFaqsBulkRequest": {
        "type": "object",
        "description": "Bulk request body. All items are applied in a single transaction.",
        "properties": {
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 500,
            "items": {
              "$ref": "#/components/schemas/SiteFaqsBulkItem"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "SiteFaqsBulkResponse": {
        "type": "object",
        "description": "Result of a bulk apply.",
        "properties": {
          "applied": {
            "type": "integer",
            "description": "Number of items applied successfully.",
            "example": 2
          }
        },
        "required": [
          "applied"
        ]
      },
      "FaqItem": {
        "type": "object",
        "description": "Single FAQ entry. `question`/`answer` are plain strings and may contain markdown syntax; the server does not parse or sanitize it — rendering happens client-side.\n",
        "properties": {
          "question": {
            "type": "string",
            "nullable": true,
            "example": "What is your cancellation policy?"
          },
          "answer": {
            "type": "string",
            "nullable": true,
            "example": "See our **cancellation policy** [here](https://example.com/policy)."
          }
        }
      },
      "ClientError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be \"about:blank\"."
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem."
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "code": {
            "type": "string",
            "description": "Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes.",
            "example": "VALID-N-001"
          },
          "isRetryable": {
            "type": "boolean",
            "description": "Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input."
          },
          "traceId": {
            "type": "string",
            "description": "Request trace identifier for debugging and correlation purposes.",
            "example": "0HNJ2BG2TU3BU:00000001"
          },
          "errors": {
            "type": "object",
            "nullable": true,
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Validation errors dictionary mapping field names to arrays of error messages. Only present for validation errors (VALID-N-001).",
            "example": {
              "Date": [
                "Availability date cannot be in the past."
              ],
              "EndTime": [
                "EndTime must be after StartTime."
              ]
            }
          }
        },
        "required": [
          "title",
          "status",
          "code",
          "isRetryable"
        ]
      },
      "ServerError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "A URI reference [rfc9457] that identifies the problem type. This specification encourages that, when dereferenced, it provides human-readable documentation for the problem type (e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be \"about:blank\"."
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "The HTTP status code [rfc9457, Section 3.1.12] generated by the origin server for this occurrence of the problem."
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "code": {
            "type": "string",
            "description": "Error code in the format RESOURCE-X-NNN where X is R (retryable) or N (non-retryable). See ErrorCatalog.md for all error codes.",
            "example": "BOOK-N-001"
          },
          "isRetryable": {
            "type": "boolean",
            "description": "Indicates whether the error is retryable. If true, the request may succeed if retried. If false, the request will fail again with the same input."
          },
          "traceId": {
            "type": "string",
            "description": "Request trace identifier for debugging and correlation purposes.",
            "example": "0HNJ2BG2TU3BU:00000001"
          }
        },
        "required": [
          "title",
          "status",
          "code",
          "isRetryable"
        ]
      }
    },
    "securitySchemes": {
      "Live": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://auth.bookabletech.com/oauth/token",
            "scopes": {
              "venue-site-faqs:read": "Grants read access to venue site FAQs (partner scope)",
              "venue-group:read": "Grants read access to operator-managed venue data",
              "venue-group:create": "Grants permission to create operator-managed venue data",
              "venue-group:update": "Grants permission to update operator-managed venue data",
              "venue-group:delete": "Grants permission to delete operator-managed venue data"
            }
          }
        },
        "description": "OAuth2 client credentials via Auth0.\n"
      },
      "Sandbox": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://auth-sandbox.bookabletech.com/oauth/token",
            "scopes": {
              "venue-site-faqs:read": "Grants read access to venue site FAQs (partner scope)",
              "venue-group:read": "Grants read access to operator-managed venue data",
              "venue-group:create": "Grants permission to create operator-managed venue data",
              "venue-group:update": "Grants permission to update operator-managed venue data",
              "venue-group:delete": "Grants permission to delete operator-managed venue data"
            }
          }
        },
        "description": "OAuth2 client credentials via Auth0 (Sandbox).\n"
      }
    },
    "headers": {
      "RateLimitLimit": {
        "description": "Maximum number of requests allowed per window.",
        "schema": {
          "type": "integer"
        },
        "example": 200
      },
      "RateLimitRemaining": {
        "description": "Number of requests remaining in the current window.",
        "schema": {
          "type": "integer"
        },
        "example": 150
      },
      "RateLimitReset": {
        "description": "Unix timestamp (seconds since epoch) when the current rate-limit window resets.",
        "schema": {
          "type": "integer",
          "format": "int64"
        },
        "example": 1741651200
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Unauthorized - Authentication is required",
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimitLimit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimitRemaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": {
              "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
              "title": "Invalid User Credentials",
              "status": 401,
              "detail": "The provided credentials are invalid",
              "code": "USER-N-003",
              "isRetryable": false,
              "traceId": "0HNJ2BG2TU3BU:00000002"
            }
          },
          "text/toon": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": "type: \"https://tools.ietf.org/html/rfc9110#section-15.5.5\"\ntitle: Invalid User Credentials\nstatus: 401\ndetail: The provided credentials are invalid\ncode: USER-N-003\nisRetryable: false\ntraceId: \"0HNJ2BG2TU3BU:00000002\"\n"
          }
        }
      },
      "Forbidden": {
        "description": "Forbidden - The request is understood but access is denied",
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimitLimit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimitRemaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": {
              "type": "https://tools.ietf.org/html/rfc9110#section-15.5.4",
              "title": "Venue Not Mapped to Partner",
              "status": 403,
              "detail": "The requested venue is not mapped to the current partner",
              "code": "PMAP-N-001",
              "isRetryable": false,
              "traceId": "0HNJ2BG2TU3BU:00000003"
            }
          },
          "text/toon": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": "type: \"https://tools.ietf.org/html/rfc9110#section-15.5.4\"\ntitle: Venue Not Mapped to Partner\nstatus: 403\ndetail: The requested venue is not mapped to the current partner\ncode: PMAP-N-001\nisRetryable: false\ntraceId: \"0HNJ2BG2TU3BU:00000003\"\n"
          }
        }
      },
      "NotFound": {
        "description": "Not Found - The requested resource was not found",
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimitLimit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimitRemaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": {
              "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
              "title": "Venue Not Found",
              "status": 404,
              "detail": "The requested venue could not be found",
              "code": "VENUE-N-001",
              "isRetryable": false,
              "traceId": "0HNJ2BG2TU3BU:00000004"
            }
          },
          "text/toon": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": "type: \"https://tools.ietf.org/html/rfc9110#section-15.5.5\"\ntitle: Venue Not Found\nstatus: 404\ndetail: The requested venue could not be found\ncode: VENUE-N-001\nisRetryable: false\ntraceId: \"0HNJ2BG2TU3BU:00000004\"\n"
          }
        }
      },
      "TooManyRequests": {
        "description": "Too Many Requests - Rate limit exceeded. Retry after the window specified in the Retry-After header.",
        "headers": {
          "Retry-After": {
            "description": "Number of seconds to wait before retrying the request.",
            "schema": {
              "type": "integer"
            },
            "example": 60
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimitLimit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimitRemaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": {
              "type": "https://tools.ietf.org/html/rfc6585#section-4",
              "title": "Rate Limit Exceeded",
              "status": 429,
              "detail": "Too many requests have been made in a short period. Please wait and retry.",
              "code": "RATE-R-001",
              "isRetryable": true,
              "traceId": "0HNJ2BG2TU3BU:00000006"
            }
          },
          "text/toon": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": "type: \"https://tools.ietf.org/html/rfc6585#section-4\"\ntitle: Rate Limit Exceeded\nstatus: 429\ndetail: Too many requests have been made in a short period. Please wait and retry.\ncode: RATE-R-001\nisRetryable: true\ntraceId: \"0HNJ2BG2TU3BU:00000006\"\n"
          }
        }
      },
      "InternalServerError": {
        "description": "Internal Server Error - An unexpected error occurred",
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimitLimit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimitRemaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ServerError"
            },
            "example": {
              "type": "https://tools.ietf.org/html/rfc9110#section-15.6.1",
              "title": "Internal Server Error",
              "status": 500,
              "detail": "An unexpected error occurred while processing the request",
              "code": "SYS-N-001",
              "isRetryable": false,
              "traceId": "0HNJ2BG2TU3BU:00000007"
            }
          },
          "text/toon": {
            "schema": {
              "$ref": "#/components/schemas/ServerError"
            },
            "example": "type: \"https://tools.ietf.org/html/rfc9110#section-15.6.1\"\ntitle: Internal Server Error\nstatus: 500\ndetail: An unexpected error occurred while processing the request\ncode: SYS-N-001\nisRetryable: false\ntraceId: \"0HNJ2BG2TU3BU:00000007\"\n"
          }
        }
      },
      "BadRequest": {
        "description": "Bad Request - The request was invalid or cannot be served",
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimitLimit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimitRemaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimitReset"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": {
              "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
              "title": "Validation Failed",
              "status": 400,
              "detail": "One or more validation errors occurred.",
              "code": "VALID-N-001",
              "isRetryable": false,
              "traceId": "0HNJ2BG2TU3BU:00000001",
              "errors": {
                "Date": [
                  "Availability date cannot be in the past."
                ]
              }
            }
          },
          "text/toon": {
            "schema": {
              "$ref": "#/components/schemas/ClientError"
            },
            "example": "type: \"https://tools.ietf.org/html/rfc9110#section-15.5.1\"\ntitle: Validation Failed\nstatus: 400\ndetail: One or more validation errors occurred.\ncode: VALID-N-001\nisRetryable: false\ntraceId: \"0HNJ2BG2TU3BU:00000001\"\nerrors.Date[1]: \"Availability date cannot be in the past.\"\n"
          }
        }
      }
    }
  }
}