Skip to content

Operator Site FAQs API (1.0.0)

API for operators to manage a venue's public-facing FAQ list, and for partners to read it.

FAQs 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.

The 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.

Verbs:

  • GET returns the current FAQ array (empty array when none stored). Readable by operators and mapped partners.
  • PUT replaces the whole array — this is also the bulk-import mechanism for a single venue's full FAQ list.
  • PATCH applies an RFC 6902 JSON Patch document against the array (item-index pointers, e.g. /0/answer, or /- to append).
  • DELETE wipes the stored array. Idempotent.
  • POST /venues/site-faqs/bulk applies changes across many venues in one transaction (all-or-nothing).
Languages
Servers
Live
https://api.bookabletech.com

operator-site-faqs

Public-facing FAQ list attached to a venue, owned and managed by the operator, readable by mapped partners.

Operations

Get site FAQs for a venue

Request

Returns the stored FAQ array for the venue. When no FAQs are stored, returns an empty array.

Security
Live(Required scopes:
venue-site-faqs:read
)
or Live(Required scopes:
venue-group:read
)
Path
venueCompositeIdstringrequired

Composite venue identifier in {venueGroupId}|{rmsSlug}|{venueId} format.

Example: 1|CO|123
curl -i -X GET \
  'https://api.bookabletech.com/venues/1|CO|123/site-faqs' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Site FAQs successfully retrieved.

Headers
X-RateLimit-Limitinteger

Maximum number of requests allowed per window.

Example: 200
X-RateLimit-Remaininginteger

Number of requests remaining in the current window.

Example: 150
X-RateLimit-Resetinteger(int64)

Unix timestamp (seconds since epoch) when the current rate-limit window resets.

Example: 1741651200
Bodyapplication/json
venueCompositeIdstringrequired

Composite venue identifier.

Example: "1|CO|123"
faqsArray of objects(FaqItem)required

FAQ items for the venue.

Example: [{"question":"What is your cancellation policy?","answer":"See our **cancellation policy** [here](https://example.com/policy)."}]
faqs[].​questionstring or null
Example: "What is your cancellation policy?"
faqs[].​answerstring or null
Example: "See our **cancellation policy** [here](https://example.com/policy)."
Response
application/json
{ "venueCompositeId": "1|CO|123", "faqs": [ { … }, { … } ] }

Replace site FAQs for a venue

Request

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. Upserts the row when no FAQs are currently stored for the venue.

Security
Live(Required scopes:
venue-group:update
)
Path
venueCompositeIdstringrequired

Composite venue identifier in {venueGroupId}|{rmsSlug}|{venueId} format.

Example: 1|CO|123
Bodyapplication/jsonrequired
faqsArray of objects(FaqItem)required

FAQ items for the venue.

Example: [{"question":"What is your cancellation policy?","answer":"See our **cancellation policy** [here](https://example.com/policy)."}]
faqs[].​questionstring or null
Example: "What is your cancellation policy?"
faqs[].​answerstring or null
Example: "See our **cancellation policy** [here](https://example.com/policy)."
curl -i -X PUT \
  'https://api.bookabletech.com/venues/1|CO|123/site-faqs' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "faqs": [
      {
        "question": "What is your cancellation policy?",
        "answer": "See our **cancellation policy** [here](https://example.com/policy)."
      }
    ]
  }'

Responses

Site FAQs successfully replaced.

Bodyapplication/json
venueCompositeIdstringrequired

Composite venue identifier.

Example: "1|CO|123"
faqsArray of objects(FaqItem)required

FAQ items for the venue.

Example: [{"question":"What is your cancellation policy?","answer":"See our **cancellation policy** [here](https://example.com/policy)."}]
faqs[].​questionstring or null
Example: "What is your cancellation policy?"
faqs[].​answerstring or null
Example: "See our **cancellation policy** [here](https://example.com/policy)."
Response
application/json
{ "venueCompositeId": "1|CO|123", "faqs": [ { … } ] }

Patch site FAQs for a venue (RFC 6902)

Request

Applies an RFC 6902 JSON Patch document to the stored FAQ array. Supported operations are add, remove, and replace. Paths are JSON Pointers (RFC 6901) 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.

Examples:

Append a new FAQ item:

[
  { "op": "add", "path": "/-", "value": { "question": "Do you take walk-ins?", "answer": "Yes, subject to availability." } }
]

Replace an existing item's answer:

[
  { "op": "replace", "path": "/0/answer", "value": "Updated answer text." }
]

Remove an item:

[
  { "op": "remove", "path": "/2" }
]
Security
Live(Required scopes:
venue-group:update
)
Path
venueCompositeIdstringrequired

Composite venue identifier in {venueGroupId}|{rmsSlug}|{venueId} format.

Example: 1|CO|123
Bodyapplication/json-patch+jsonrequired

Array of JSON Patch operations to apply to the stored FAQ array.

Array [
opstringrequired

The operation to perform.

Enum"add""remove""replace"
Example: "replace"
pathstring^\/.*required

JSON Pointer (RFC 6901) 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. /-).

Example: "/0/answer"
valueany or null

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).

Example: "Updated answer text."
]
curl -i -X PATCH \
  'https://api.bookabletech.com/venues/1|CO|123/site-faqs' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json-patch+json' \
  -d '[
    {
      "op": "add",
      "path": "/-",
      "value": {
        "question": "Do you take walk-ins?",
        "answer": "Yes, subject to availability."
      }
    }
  ]'

Responses

Site FAQs successfully patched.

Bodyapplication/json
venueCompositeIdstringrequired

Composite venue identifier.

Example: "1|CO|123"
faqsArray of objects(FaqItem)required

FAQ items for the venue.

Example: [{"question":"What is your cancellation policy?","answer":"See our **cancellation policy** [here](https://example.com/policy)."}]
faqs[].​questionstring or null
Example: "What is your cancellation policy?"
faqs[].​answerstring or null
Example: "See our **cancellation policy** [here](https://example.com/policy)."
Response
application/json
{ "venueCompositeId": "1|CO|123", "faqs": [ { … } ] }

Delete all site FAQs for a venue

Request

Removes the entire stored FAQ row for the venue. Idempotent — returns 204 whether or not the row existed.

Security
Live(Required scopes:
venue-group:delete
)
Path
venueCompositeIdstringrequired

Composite venue identifier in {venueGroupId}|{rmsSlug}|{venueId} format.

Example: 1|CO|123
curl -i -X DELETE \
  'https://api.bookabletech.com/venues/1|CO|123/site-faqs' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Site FAQs successfully deleted.

Response
No content

Bulk apply site FAQs across many venues

Request

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.

Each item declares the target venue (venueCompositeId) and the mode:

  • replace — overwrite the stored array with faqs.
  • patch — apply an RFC 6902 JSON Patch document (patch field) to the stored array.

Per mode, exactly one payload field is expected: faqs for replace, patch for patch.

Security
Live(Required scopes:
venue-group:update
)
Bodyapplication/jsonrequired
itemsArray of objects(SiteFaqsBulkItem)[ 1 .. 500 ] itemsrequired
items[].​venueCompositeIdstringrequired

Composite venue identifier in {venueGroupId}|{rmsSlug}|{venueId} format.

Example: "1|CO|123"
items[].​modestringrequired

How to apply the payload to the stored array.

Enum"replace""patch"
Example: "patch"
items[].​faqsArray of objects or null(FaqItem)

FAQ items. Required when mode is replace; ignored otherwise.

items[].​patchArray of objects or null(JSON Patch Operation (RFC 6902))non-empty

RFC 6902 JSON Patch operations. Required when mode is patch; ignored otherwise.

curl -i -X POST \
  https://api.bookabletech.com/venues/site-faqs/bulk \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "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

Bulk apply completed successfully.

Bodyapplication/json
appliedintegerrequired

Number of items applied successfully.

Example: 2
Response
application/json
{ "applied": 2 }