SmartCustomer (Sitejabber) Business API

The SmartCustomer Business API (published under the pre-rebrand Sitejabber name at api.sitejabber.com) is the review-management API behind SmartCustomer's business product. It covers business profile and ratings lookup (single and bulk), business Q&A, consumer reviews (read, search by keyword/label/date, publish an unpublished review, flag a review), review comments, resolution attempts and direct messaging with reviewers, review requests by email or SMS, partner write/edit review links, a full product-reviews surface (catalog CRUD, product Q&A, product reviews with photos, votes, top-rated, aggregate stats, product review requests), and two CCPA-shaped privacy operations that let a business access or remove a customer's information. Authentication is two-part: a client_token API key on every request plus a user_token session header obtained from POST /login.

OpenAPI Specification

sitejabber-business-api-openapi.yml Raw ↑
# generated: '2026-08-13'
# method: generated
# source: https://api.sitejabber.com/ (SmartCustomer published API reference; Slate source at https://github.com/smartcustomer-reviews/business-api-docs)
openapi: 3.1.0
info:
  title: SmartCustomer (Sitejabber) Business API
  version: v1
  summary: Business review, product review, review request, messaging and privacy API for SmartCustomer (formerly Sitejabber).
  description: 'Transcribed by API Evangelist from SmartCustomer''s own published API reference at https://api.sitejabber.com/
    (Slate source: https://github.com/smartcustomer-reviews/business-api-docs). SmartCustomer does not publish an OpenAPI
    definition; every path, parameter, default, enum and schema field below is copied from the provider''s published reference
    tables. Where the reference names an object but publishes no field table (ProductCategory, ProductAttribute) the schema
    is left open rather than invented. Response wrappers are modelled from the published example payloads and the documented
    status/success envelope.


    Authentication is two-part: a client_token (API key) passed as a query parameter on every call, plus a user_token request
    header obtained from POST /login.'
  contact:
    name: SmartCustomer API Support
    email: support@smartcustomer.com
    url: https://api.sitejabber.com/
  termsOfService: https://www.smartcustomer.com/terms
  x-transcribed-by: API Evangelist enrichment pipeline
  x-transcription-source: https://api.sitejabber.com/
servers:
- url: https://api.smartcustomer.com/v1
  description: Production. The same reference is also served from https://api.sitejabber.com/ under the pre-rebrand Sitejabber
    name.
externalDocs:
  description: SmartCustomer API reference
  url: https://api.sitejabber.com/
security:
- client_token: []
  user_token: []
tags:
- name: Authentication
- name: Business Info
- name: Business Questions
- name: Reviews
- name: Review Comments
- name: Resolution Attempts
- name: Messages
- name: Review Requests
- name: Partners
- name: Products
- name: Product Questions
- name: Product Reviews
- name: Product Review Requests
- name: Privacy
paths:
  /login:
    post:
      operationId: login
      summary: Log in and obtain a user token
      tags:
      - Authentication
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/LoginObject'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      description: Exchanges account credentials for a user token used in subsequent calls in the user_token header. The token
        typically expires after 6 months. Calling login invalidates any previously generated user token.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: Account email
                password:
                  type: string
                  description: Account password
              required:
              - email
              - password
      security:
      - client_token: []
  /businesses/{business}:
    get:
      operationId: getBusiness
      summary: Get info for a given business
      tags:
      - Business Info
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/UrlObjectWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: datasources
        in: query
        description: include ratings from specified comma separated data sources (check the data sources section)
        required: false
        schema:
          type: string
          default: 'false'
  /businesses/bulk:
    get:
      operationId: getBusinessesBulk
      summary: Get info for several businesses
      tags:
      - Business Info
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/UrlListWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - name: businesses
        in: query
        description: all businesses to be queried encoded and json format
        required: true
        schema:
          type: string
  /businesses/{business}/questions:
    get:
      operationId: getBusinessQuestions
      summary: Get questions
      tags:
      - Business Questions
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/QuestionListWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: start
        in: query
        description: starting offset
        required: false
        schema:
          type: integer
          default: 0
      - name: count
        in: query
        description: number of questions to be included (max 100)
        required: false
        schema:
          type: integer
          default: 10
      - name: order
        in: query
        description: ASC/DESC order of the questions, ascending or descending on the creation date
        required: false
        schema:
          type: string
          default: DESC
  /businesses/{business}/review:
    get:
      operationId: getBusinessReview
      summary: Get a review of a business
      tags:
      - Reviews
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/ReviewWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: review_no
        in: query
        description: number of review to be retrieved
        required: true
        schema:
          type: integer
  /businesses/{business}/reviews:
    get:
      operationId: getBusinessReviews
      summary: Get reviews of a business
      tags:
      - Reviews
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/ReviewListWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: start
        in: query
        description: starting offset
        required: false
        schema:
          type: integer
          default: 0
      - name: count
        in: query
        description: number of reviews to be included (max 100)
        required: false
        schema:
          type: integer
          default: 10
      - name: q
        in: query
        description: search reviews by keyword (title, content)
        required: false
        schema:
          type: string
      - name: labels
        in: query
        description: search reviews with the specified comma separated labels
        required: false
        schema:
          type: string
      - name: date_from
        in: query
        description: start date in format (yyyy-mm-dd hh:mm:ss) [hh:mm:ss] is optional
        required: false
        schema:
          type: string
      - name: date_to
        in: query
        description: end date in format (yyyy-mm-dd hh:mm:ss) [hh:mm:ss] is optional
        required: false
        schema:
          type: string
      - name: unpublished
        in: query
        description: include unpublished reviews (0 or 1)
        required: false
        schema:
          type: string
          default: 'false'
      - name: updated
        in: query
        description: search updated reviews (0 or 1)
        required: false
        schema:
          type: string
          default: 'false'
      - name: deleted
        in: query
        description: returns only deleted reviews (0 or 1)
        required: false
        schema:
          type: string
          default: 'false'
      - name: solicited
        in: query
        description: returns organic or solicited reviews (0 or 1), defaults to all reviews
        required: false
        schema:
          type: string
      - name: datasources
        in: query
        description: include reviews from specified comma separated data sources (check the data sources section)
        required: false
        schema:
          type: string
          default: 'false'
      - name: order
        in: query
        description: ASC/DESC order of the reviews, ascending or descending on the creation date
        required: false
        schema:
          type: string
          default: DESC
  /businesses/{business}/reviews/publish:
    post:
      operationId: publishReview
      summary: Publish an unpublished review
      tags:
      - Reviews
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                review_no:
                  type: integer
                  description: number of review to be published
              required:
              - review_no
  /businesses/{business}/reviews/flag:
    post:
      operationId: flagReview
      summary: Flag a review
      tags:
      - Reviews
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - review_no
              - reason
              - message
              properties:
                review_no:
                  type: integer
                  description: number of review to be flagged
                reason:
                  type: string
                  description: 'reason can be one of the following: language, personal_info, personal_attack, second_hand,
                    another_biz, other. language: Review contains profanity, lewdness, or bigotry; personal_info: Review contains
                    personal information; personal_attack: Review contains personal attacks; second_hand: Review describes
                    second-hand experience; another_biz: Review was intended for another business; other: Other'
                  enum:
                  - language
                  - personal_info
                  - personal_attack
                  - second_hand
                  - another_biz
                  - other
                message:
                  type: string
                  description: feedback message explaining the reason
  /businesses/{business}/review/comments:
    get:
      operationId: getReviewComments
      summary: Get review comments
      tags:
      - Review Comments
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/CommentListWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: review_no
        in: query
        description: number of review to fetch comments from
        required: false
        schema:
          type: integer
      - name: start
        in: query
        description: starting offset
        required: false
        schema:
          type: integer
          default: 0
      - name: count
        in: query
        description: number of comments to be included (max 100)
        required: false
        schema:
          type: integer
          default: 10
      - name: date_from
        in: query
        description: start date in format (yyyy-mm-dd hh:mm:ss) [hh:mm:ss] is optional
        required: false
        schema:
          type: string
      - name: date_to
        in: query
        description: end date in format (yyyy-mm-dd hh:mm:ss) [hh:mm:ss] is optional
        required: false
        schema:
          type: string
      - name: updated
        in: query
        description: returns only updated comments (0 or 1)
        required: false
        schema:
          type: string
          default: 'false'
      - name: deleted
        in: query
        description: returns only deleted comments (0 or 1)
        required: false
        schema:
          type: string
          default: 'false'
      - name: datasources
        in: query
        description: include comments from specified comma separated data sources (check the data sources section)
        required: false
        schema:
          type: string
          default: 'false'
  /businesses/{business}/review/comments/add:
    post:
      operationId: addReviewComment
      summary: Add comment to review
      tags:
      - Review Comments
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                review_no:
                  type: integer
                  description: number of review to which comment will be added
                text:
                  type: string
                  description: text of the comment
              required:
              - review_no
              - text
  /businesses/{business}/resolution/send:
    post:
      operationId: sendResolutionMessage
      summary: Send resolution message to user
      tags:
      - Resolution Attempts
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                review_no:
                  type: integer
                  description: number of review whose author will receive a message
                username:
                  type: string
                  description: author that will receive a message
                body:
                  type: string
                  description: content of the message
              required:
              - review_no
              - username
              - body
  /businesses/{business}/messages:
    get:
      operationId: getMessages
      summary: Get messages
      tags:
      - Messages
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/MessageListWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: start
        in: query
        description: starting offset
        required: false
        schema:
          type: integer
          default: 0
      - name: count
        in: query
        description: number of messages to be included (max 100)
        required: false
        schema:
          type: integer
          default: 10
      - name: username
        in: query
        description: get messages for specific user if given
        required: false
        schema:
          type: string
      - name: folder
        in: query
        description: inbox/sent for received or sent messages
        required: false
        schema:
          type: string
          default: inbox
      - name: order
        in: query
        description: ASC/DESC order of the messages, ascending or descending
        required: false
        schema:
          type: string
          default: DESC
  /businesses/{business}/message/send:
    post:
      operationId: sendMessage
      summary: Send message to user
      tags:
      - Messages
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                review_no:
                  type: integer
                  description: number of review whose author will receive a message
                username:
                  type: string
                  description: author that will receive a message
                subject:
                  type: string
                  description: subject of the message
                body:
                  type: string
                  description: content of the message
              required:
              - review_no
              - username
              - subject
              - body
  /businesses/{business}/review/request/add:
    post:
      operationId: createReviewRequest
      summary: Create review request
      tags:
      - Review Requests
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      description: 'One of email or phone is required: the reference marks both required, noting each is required only if
        the other is not provided.'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: email of the customer, required if phone is not provided
                phone:
                  type: string
                  description: phone of the customer, required if email is not provided
                order_id:
                  type: string
                  description: order id of the purchase
                order_date:
                  type: string
                  description: order date of the purchase in yyyy-mm-dd format
                first_name:
                  type: string
                  description: first name of the customer
                last_name:
                  type: string
                  description: last name of the customer
                labels:
                  type: string
                  description: comma separated labels to attach to the review after it's completed by the customer
                location:
                  type: string
                  description: business location identifier
                language:
                  type: string
                  description: language for the request
                product_skus:
                  type: string
                  description: product SKUs of the purchase (comma separated)
                return_link:
                  type: integer
                  description: (1 => true, 0 => false), if true, returns the link to complete the review, and does not send
                    the review request email
              required:
              - order_id
              - order_date
  /businesses/{business}/review/request/remove:
    post:
      operationId: removeReviewRequest
      summary: Remove review request
      tags:
      - Review Requests
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: email of the customer
                order_id:
                  type: string
                  description: order id of the purchase, if not specified all requests for the given email will be removed
              required:
              - email
  /partners/{business}/write-link/get:
    get:
      operationId: getWriteReviewLink
      summary: Get write review link
      tags:
      - Partners
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/PartnerWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      description: Get the link to write a review for the given business.
      parameters:
      - $ref: '#/components/parameters/business'
  /partners/{business}/edit-link/get:
    get:
      operationId: getEditReviewLink
      summary: Get edit review link
      tags:
      - Partners
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/PartnerWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      description: User must still login to edit the review.
      parameters:
      - $ref: '#/components/parameters/business'
      - name: email
        in: query
        description: email of the reviewer whose review link is requested (shown in the reference's request example)
        required: false
        schema:
          type: string
  /businesses/{business}/products:
    get:
      operationId: getProducts
      summary: Get products
      tags:
      - Products
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/ProductListWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: start
        in: query
        description: starting offset
        required: false
        schema:
          type: integer
          default: 0
      - name: count
        in: query
        description: number of products to be included (max 100)
        required: false
        schema:
          type: integer
          default: 10
      - name: q
        in: query
        description: retrieve products matching given keyword
        required: false
        schema:
          type: string
      - name: sku
        in: query
        description: retrieve the given product by sku
        required: false
        schema:
          type: string
      - name: gtin
        in: query
        description: retrieve the given product by gtin
        required: false
        schema:
          type: string
      - name: mpn
        in: query
        description: retrieve the given product by mpn
        required: false
        schema:
          type: string
      - name: brand
        in: query
        description: retrieve products matching brand
        required: false
        schema:
          type: string
      - name: categories
        in: query
        description: retrieve products in the given categories
        required: false
        schema:
          type: string
      - name: price_range
        in: query
        description: retrieve products in the given prices [min],[max]
        required: false
        schema:
          type: string
      - name: reviews_range
        in: query
        description: retrieve products with the given number of reviews [min],[max]
        required: false
        schema:
          type: string
      - name: product_id
        in: query
        description: retrieve the given product ID
        required: false
        schema:
          type: integer
  /businesses/{business}/products/add:
    post:
      operationId: addProduct
      summary: Add product
      tags:
      - Products
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                sku:
                  type: string
                  description: product sku
                item_group:
                  type: string
                  description: product item group
                gtin:
                  type: string
                  description: product gtin
                mpn:
                  type: string
                  description: product mpn
                title:
                  type: string
                  description: product title
                description:
                  type: string
                  description: product description
                brand:
                  type: string
                  description: product brand
                categories:
                  type: string
                  description: categories this product belongs to, comma separated
                currency:
                  type: string
                  description: product currency
                price:
                  type: number
                  description: product price
                retail_price:
                  type: number
                  description: product retail price
                product_link:
                  type: string
                  description: product link
                image_url:
                  type: string
                  description: product image url
                attributes:
                  type: string
                  description: custom attributes for the product
              required:
              - sku
              - title
  /businesses/{business}/products/remove:
    post:
      operationId: removeProduct
      summary: Remove product
      tags:
      - Products
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                product_id:
                  type: integer
                  description: product ID
              required:
              - product_id
  /businesses/{business}/product/images/add:
    post:
      operationId: addProductImage
      summary: Add product image
      tags:
      - Products
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseEnvelope'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                sku:
                  type: string
                  description: product sku
                image:
                  type: string
                  description: image url
              required:
              - sku
              - image
  /businesses/{business}/product/questions:
    get:
      operationId: getProductQuestions
      summary: Get product questions
      tags:
      - Product Questions
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/ProductQuestionListWrapper'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      parameters:
      - $ref: '#/components/parameters/business'
      - name: start
        in: query
        description: starting offset
        required: false
        schema:
          type: integer
          default: 0
      - name: count
        in: query
        description: number of questions to be included (max 100)
        required: false
        schema:
          type: integer
          default: 10
      - name: sku
        in: query
        description: search questions by the given product sku
        required: false
        schema:
          type: string
      - name: filter
        in: query
        description: PENDING/PUBLISHED/REMOVED, defaults to non removed questions
        required: false
        schema:
          type: string
      - name: order
        in: query
        description: ASC/DESC order of the questions, ascending or descending on the creation date
        required: false
        schema:
          type: string
          default: DESC
  /businesses/{business}/product/reviews:
    get:
      operationId: getProductReviews
      summary: Get product reviews
      tags:
      - Product Reviews
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ResponseEnvelope'
                - $ref: '#/components/schemas/ProductReviewListWrapper'
        '429'

# --- truncated at 32 KB (68 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/sitejabber/refs/heads/main/openapi/sitejabber-business-api-openapi.yml