openapi: 3.2.0 info: title: SmartCustomer (Sitejabber) Business Product Questions 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. security: - client_token: [] user_token: [] tags: - name: Product Questions paths: /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 components: schemas: ProductAttribute: type: object title: ProductAttribute Object description: Custom product attribute. The reference names this object on Product.attributes / ProductReview.attributes but does not publish a field table for it. additionalProperties: true User: type: object title: User Object required: - username - firstName - lastName - thumbnail - profilePage - numReviews - numHelpfulVotes properties: username: type: string description: Username of the user firstName: type: string description: First name of the user lastName: type: string description: First letter of last name of the user thumbnail: type: string description: Relative path of the user's thumbnail image profilePage: type: string description: Url of the user's profile page numReviews: type: integer description: Number of reviews written by the user numHelpfulVotes: type: integer description: Number of helpful votes received email: type: string description: Only available for solicited reviews and when the email of the user was provided by the business ProductQuestion: type: object title: ProductQuestion Object properties: id: type: integer description: Internal question ID content: type: string description: Content of the question created: type: string description: Creation date of the question createdRFC: type: string description: Same as created but in format RFC 3339 published: type: string description: Publication date of the question publishedRFC: type: string description: Same as published but in format RFC 3339 removed: type: boolean description: Indicates if the question is removed num_answers: type: integer description: Number of answers sum_votes: type: integer description: Number of votes answers: type: array description: Array of product answer objects items: $ref: '#/components/schemas/ProductAnswer' product: allOf: - $ref: '#/components/schemas/Product' description: Product of the question author: allOf: - $ref: '#/components/schemas/User' description: Author of the question ProductAnswer: type: object title: ProductAnswer Object properties: id: type: integer description: Internal answer ID content: type: string description: Content of the answer created: type: string description: Creation date of the answer createdRFC: type: string description: Same as created but in format RFC 3339 published: type: string description: Publication date of the question publishedRFC: type: string description: Same as published but in format RFC 3339 num_votes: type: integer description: Number of votes num_positive_votes: type: integer description: Number of positive votes num_negative_votes: type: integer description: Number of negative votes author: allOf: - $ref: '#/components/schemas/User' description: Author of the answer ProductQuestionListWrapper: type: object properties: questions: type: array items: $ref: '#/components/schemas/ProductQuestion' ProductImage: type: object title: ProductImage Object properties: caption: type: string description: Caption of the image original: type: string description: Url of the image original size normal: type: string description: Url of the image normal size, max width 600px large: type: string description: Url of the image thumbnail large size 160x160 small: type: string description: Url of the image thumbnail small size 96x96 created: type: string description: Creation date of the image createdRFC: type: string description: Same as created but in format RFC 3339 ResponseEnvelope: type: object description: Every response carries a success flag and a status key. When success is false and status is ERROR, errorCode and errorReason are present. properties: status: type: string description: OK if everything went good, ERROR if there was an error processing the request success: type: boolean description: true or false errorCode: type: integer description: Error code, only present when status is ERROR errorReason: type: string description: Error message, only present when status is ERROR Product: type: object title: Product Object properties: id: type: integer description: Internal product ID sku: type: string description: SKU of the product item_group: type: string description: Used to group similar products together gtin: type: string description: GTIN of the product mpn: type: string description: MPN of the product brand: type: string description: Brand of the product title: type: string description: Title of the product description: type: string description: Description of the product categories: type: array description: Product categories items: $ref: '#/components/schemas/ProductCategory' price: type: number description: Price of the product retail_price: type: number description: Retail price of the product currency: type: string description: Currency of the product product_link: type: string description: Url link to the product's page images: type: array description: Product images items: $ref: '#/components/schemas/ProductImage' attributes: type: array description: Customer attributes items: $ref: '#/components/schemas/ProductAttribute' num_reviews: type: integer description: Number of product reviews average_rating: type: number description: Average rating of the product reviews created: type: string description: Creation date of the product createdRFC: type: string description: Same as created but in format RFC 3339 ProductCategory: type: object title: ProductCategory Object description: Product category. The reference names this object on Product.categories but does not publish a field table for it. additionalProperties: true parameters: business: name: business in: path required: true description: The business's display address (domain without scheme), e.g. yourdomain.com schema: type: string example: yourdomain.com responses: TooManyRequests: description: Too many requests. 1000 calls per hour per unique user token; no more than 10 calls in a 10 second window. content: application/json: schema: $ref: '#/components/schemas/ResponseEnvelope' securitySchemes: client_token: type: apiKey in: query name: client_token description: API key issued to the business, passed as a query parameter on every request. user_token: type: apiKey in: header name: user_token description: User session token returned by POST /login. Typically expires after 6 months; calling login invalidates any previous token. externalDocs: description: SmartCustomer API reference url: https://api.sitejabber.com/