RR Developer DocumentationReview Reply API · v1
Production API

Review Reply API

Generate professional hotel review responses using the RR trained Qwen model. The API accepts reviews from any OTA or review platform.

POSThttps://rr-api.reputationsystems.ai/api/v1/rr/replies
Keep the API key on your server. Browser clients should use the RR extension or call their own backend so the key is not exposed to page scripts.

Authentication

Create a live key in the API Keys dashboard at https://rr.reputationsystems.ai. Choose Server or API client for backend integrations, or Chrome extension for the RR extension. The complete secret is displayed once. Send it in the X-Api-Key header.

Each RR account may have up to five active API keys. Revoke an unused key before creating another.
X-Api-Key: rr_live_your_secret_key

Bearer authentication is also accepted:

Authorization: Bearer rr_live_your_secret_key

Generate a reply

cURL

curl -X POST "https://rr-api.reputationsystems.ai/api/v1/rr/replies" \
  -H "X-Api-Key: $RR1_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "review": "The room was spotless and the staff was wonderful, but the hallway was noisy.",
    "rating": 4,
    "reviewerName": "Alex",
    "tone": "professional",
    "managerName": "Jordan Lee",
    "managerTitle": "General Manager",
    "hotelName": "Example Hotel",
    "platform": "Google",
    "language": "en",
    "allowEmoji": false
  }'

JavaScript

const response = await fetch(
  "https://rr-api.reputationsystems.ai/api/v1/rr/replies",
  {
    method: "POST",
    headers: {
      "X-Api-Key": process.env.RR1_API_KEY,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      review: "Wonderful stay and helpful staff.",
      rating: 5,
      tone: "professional"
    })
  }
);

if (!response.ok) throw new Error(`RR API error: ${response.status}`);
const { reply } = await response.json();

Python

import os
import requests

response = requests.post(
    "https://rr-api.reputationsystems.ai/api/v1/rr/replies",
    headers={"X-Api-Key": os.environ["RR1_API_KEY"]},
    json={
        "review": "Wonderful stay and helpful staff.",
        "rating": 5,
        "tone": "professional"
    },
    timeout=60
)
response.raise_for_status()
print(response.json()["reply"])

Java

var request = java.net.http.HttpRequest.newBuilder()
    .uri(java.net.URI.create(
        "https://rr-api.reputationsystems.ai/api/v1/rr/replies"))
    .header("X-Api-Key", System.getenv("RR1_API_KEY"))
    .header("Content-Type", "application/json")
    .POST(java.net.http.HttpRequest.BodyPublishers.ofString(
        "{\"review\":\"Wonderful stay and helpful staff.\",\"rating\":5," +
        "\"tone\":\"professional\"}"))
    .build();

var response = java.net.http.HttpClient.newHttpClient().send(
    request, java.net.http.HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
    throw new IllegalStateException("RR API error: " + response.statusCode());
}
System.out.println(response.body());

Request fields

FieldTypeDescription
review REQUIREDstringGuest review text, 1–10,000 characters.
ratingnumber or stringRating such as 4, 4/5, or 8/10.
reviewerNamestringGuest name used for a personalized greeting.
tonestringDesired style, for example professional, warm, or concise.
managerNamestringName included in the reply signature.
managerTitlestringTitle included in the reply signature.
hotelNamestringProperty name used for context.
platformstringSource platform, such as Google, Booking.com, Expedia, Tripadvisor, or any OTA.
languagestringReply language code, for example en, es, or fr.
allowEmojibooleanWhether the generated reply may include emoji. Defaults to false.

Successful response

HTTP 200 OK

{
  "reply": "Thank you for sharing your experience...",
  "model": "qwen3-8b-review-v5",
  "provider": "local-trained-qwen",
  "createdAt": "2026-08-25T16:30:00Z"
}

Pricing and usage

RR costs $5.00 per 1,000 successfully generated replies, equivalent to $0.005 per reply. Failed requests are not charged. Usage and estimated cost are available in the Usage tab.

PlanMonthly priceIncluded repliesRPM / RPD
Free$010010 / 100
Starter$255,00060 / 1,000
Growth$10020,000300 / 10,000
Scale$25050,0001,000 / 50,000
Pricing is configurable and may change later. Each usage event keeps the rate that applied when its reply was generated.

Every successful response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. A rejected request returns HTTP 429 with Retry-After.

Errors

StatusMeaningAction
400The review is missing or invalid.Send a review containing 1–10,000 characters.
401The API key is missing, invalid, or revoked.Check the header or create a new key.
503The trained model is temporarily unavailable.Retry with exponential backoff.

API-key security

  • Keep keys on your server. Never expose them in browser or extension source code.
  • Store keys in a secret manager or environment variable, not in source control.
  • Use separate live keys for each application or environment so each can be revoked independently.
  • Server/API keys enforce your account IP allowlist. Chrome-extension keys skip IP allowlisting because browser addresses change, but remain subject to authentication, expiration, revocation, rate limits, and usage tracking.
  • Create a Chrome-extension key while signed in to RR; the website connects it to the installed extension without copying or pasting. Never embed a key in the extension package or page source.
  • Revoke a key immediately if it may have been exposed.
  • The dashboard shows each complete key only once.