The Rexiew API lets you search things, read reviews, generate AI reviews, submit human reviews, and embed review widgets on any site. All responses are JSON.
https://rexiew.com/api
All endpoints are relative to this base URL.
Public endpoints (reading reviews, searching, widgets) require no authentication. Endpoints that create or modify data require a JWT Bearer token.
To get a token, call POST /auth/login with your email and password. Include the token in subsequent requests:
Authorization: Bearer <access_token>
Access tokens expire after 1 hour. Use POST /auth/refresh with your refresh token to get a new one.
Errors return a JSON object with an error field and an appropriate HTTP status code.
{
"error": "Invalid model_id"
}
| Code | Meaning |
|---|---|
| 400 | Bad request / validation error |
| 401 | Unauthorized / invalid token |
| 402 | Insufficient credits |
| 403 | Forbidden / tier too low |
| 404 | Resource not found |
| 409 | Conflict (duplicate) |
| 410 | Model retired |
| 429 | Rate limit exceeded |
| 502 | Upstream LLM error |
No authentication required.
/health
Check if the API is running.
{
"status": "ok",
"service": "Rexiew API",
"version": "1.0.0"
}
/models
List all LLM models with tier requirements and active status. If authenticated, includes whether each model is accessible for your subscription tier.
{
"models": [
{
"id": 19,
"slug": "claude-opus-4-6",
"name": "Claude Opus 4.6",
"description": "The most powerful Claude LLM model.",
"provider": "anthropic",
"cost": 1,
"active": true
}
],
"user_tier": "free"
}
/things/search?q={query}
Search for things by name. Returns up to 20 results sorted by review count.
| Param | Type | Description |
|---|---|---|
q | string | Search query (min 2 chars) |
{
"things": [
{
"id": 42,
"name": "iPhone 16 Pro",
"type": "product",
"review_count": 7,
"avg_rating": 4.3
}
]
}
/things/{id}
Get a thing's details and all its reviews.
{
"thing": {
"id": 42,
"name": "iPhone 16 Pro",
"type": "product",
"review_count": 7,
"avg_rating": 4.3,
"created_at": "2025-06-01 12:00:00"
},
"reviews": [
{
"review_id": 101,
"model_id": 19,
"llm_name": "Claude Opus 4.6",
"rating": 4.5,
"review": "The iPhone 16 Pro represents...",
"created_at": "2025-06-02 09:30:00"
}
]
}
/review/{id}
Get full review details including pros, cons, alternatives, dimensional scores, and on-chain verification status.
{
"review_id": 101,
"thing_id": 42,
"thing_name": "iPhone 16 Pro",
"thing_type": "product",
"model_id": 19,
"llm_name": "Claude Opus 4.6",
"reviewer_type": "ai",
"review_aspect": "general",
"rating": 4.5,
"review": "The iPhone 16 Pro represents...",
"pros": ["Excellent camera system", "Fast A18 chip"],
"cons": ["High price", "Heavy"],
"alternatives": [
{"name": "Samsung Galaxy S25 Ultra", "difference": "More customizable with S Pen"}
],
"dimensions": [
{"slug": "build-quality", "label": "Build Quality", "score": 4.8}
],
"blockinity_verified": false,
"provifier_tx_digest": null,
"created_at": "2025-06-02 09:30:00"
}
/review/{id}/verify
Verify the on-chain proof of a signed human review via Provifier.
{
"verified": true,
"tx_digest": "ABC123...",
"chain": "sui",
"data_hash": "sha256...",
"explorer_url": "https://suiscan.xyz/mainnet/tx/ABC123..."
}
These endpoints require a JWT Bearer token in the Authorization header.
/auth/login
Authenticate with email and password. Returns JWT access and refresh tokens.
{
"email": "user@example.com",
"password": "yourpassword"
}
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 3600,
"user": {
"id": 1,
"email": "user@example.com",
"role": "user",
"credit_balance": 500
}
}
/auth/register
Create a new account. Password must be at least 10 characters.
{
"email": "newuser@example.com",
"password": "securepassword"
}
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 3600,
"user": {
"id": 2,
"email": "newuser@example.com",
"role": "user",
"credit_balance": 0
}
}
/auth/refresh
Exchange a valid refresh token for new access and refresh tokens.
{
"refresh_token": "eyJ..."
}
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 3600
}
/review/resolve
Auth
Pre-step before generating a review. Resolves the user's input to an existing thing in the database or suggests creating a new one. Uses an AI model internally for matching.
{
"thing_name": "iPhone 16 Pro",
"thing_type": "product"
}
{
"resolved": {
"match": true,
"thing_id": 42,
"thing_name": "iPhone 16 Pro",
"thing_type": "product",
"thing_slug": "iphone-16-pro",
"review_count": 7,
"avg_rating": 4.3
},
"candidates": [...],
"suggestion": {
"canonical_name": "iPhone 16 Pro",
"thing_type": "product",
"description": "Apple's premium smartphone...",
"tags": ["smartphone", "apple", "premium"],
"category": "smartphones"
},
"dimensions": [
{"dimension_slug": "build-quality", "dimension_label": "Build Quality"}
],
"aspects": [
{"slug": "general", "label": "General", "review_count": 5},
{"slug": "affiliate-program", "label": "Affiliate Program", "review_count": 2},
{"slug": "pricing", "label": "Pricing", "review_count": 0}
],
"cost_usd": 0.002,
"elapsed_ms": 1200
}
/review/generate
Auth
Generate an AI review for a thing. Costs 1 credit per review. Active models: Claude Opus 4.6 (ID 19) and GPT 5.4 (ID 25).
{
"thing_name": "iPhone 16 Pro",
"thing_type": "product",
"model_id": 19,
"thing_id": 42,
"thing_description": "Apple's premium smartphone"
}
| Field | Type | Required | Description |
|---|---|---|---|
thing_name | string | Yes* | Name of the thing to review (max 255 chars) |
thing_type | string | No | product, service, place, brand, or other |
model_id | int | Yes | 19 (Opus 4.6) or 25 (GPT 5.4) |
thing_id | int | No | If provided, skips resolver and uses this thing directly |
thing_description | string | No | Description override for new things (max 255 chars) |
review_aspect | string | No | Aspect to focus on (e.g. "affiliate-program", "pricing"). Defaults to "general" |
* Required if thing_id is not provided.
{
"review_id": 108,
"thing_id": 42,
"thing_name": "iPhone 16 Pro",
"review_aspect": "general",
"rating": 4.5,
"review": "The iPhone 16 Pro represents...",
"pros": ["Excellent camera", "Fast chip"],
"cons": ["Expensive", "Heavy"],
"alternatives": [
{"name": "Samsung Galaxy S25 Ultra", "difference": "More customizable"}
],
"llm_name": "Claude Opus 4.6",
"llm_provider": "anthropic",
"dimensions": [
{"slug": "build-quality", "label": "Build Quality", "score": 4.8}
],
"credits_spent": 1,
"tokens": {"input_tokens": 850, "output_tokens": 620},
"cost_usd": 0.059,
"elapsed_ms": 8500
}
/review/human
Auth
Submit a human-written review. Rate-limited to 1 per thing per user per day. Optionally include a wallet address for Blockinity verification.
{
"thing_id": 42,
"rating_score": 4.5,
"review_text": "I've used the iPhone 16 Pro for 3 months now...",
"review_aspect": "general",
"dimension_scores": {
"build-quality": 4.8,
"value-for-money": 3.5
},
"wallet_address": "0x..."
}
{
"review_id": 109,
"thing_id": 42,
"thing_name": "iPhone 16 Pro",
"reviewer_type": "human",
"review_aspect": "general",
"rating": 4.5,
"review": "I've used the iPhone 16 Pro for 3 months now...",
"dimensions": [
{"slug": "build-quality", "label": "Build Quality", "score": 4.8}
],
"blockinity_verified": true,
"canonical_data": "{...}"
}
/review/{id}/sign
Auth
Attach Provifier on-chain signing data to a human review you own. Makes the review cryptographically verifiable.
{
"tx_digest": "ABC123...",
"data_hash": "sha256...",
"chain": "sui"
}
{
"review_id": 109,
"signed": true,
"tx_digest": "ABC123...",
"chain": "sui",
"data_hash": "sha256..."
}
/review/history?page=1&limit=20
Auth
Get the authenticated user's review history, paginated.
| Param | Type | Default | Description |
|---|---|---|---|
page | int | 1 | Page number |
limit | int | 20 | Results per page (max 50) |
{
"reviews": [...],
"total": 45,
"page": 1,
"limit": 20,
"pages": 3
}
/user/profile
Auth
Get the authenticated user's profile, credit balance, and subscription info.
{
"user": {
"id": 1,
"email": "user@example.com",
"role": "user",
"credit_balance": 500,
"member_since": "2025-01-15 10:00:00",
"total_reviews": 23,
"wallet_address": null
}
}
/auth/wallet-link
Auth
Link a blockchain wallet address to your account for Blockinity verification.
{
"wallet_address": "0x..."
}
{
"wallet_address": "0x...",
"linked": true
}
Public, no auth required. Responses are cached for 5 minutes. Use these to embed Rexiew review data on external sites.
/widget/thing/{id}/badge
Lightweight badge data: average rating and review count. Ideal for inline display.
{
"thing_id": 42,
"name": "iPhone 16 Pro",
"avg_rating": 4.3,
"review_count": 7,
"branding": {
"text": "Powered by Rexiew",
"url": "https://rexiew.com/thing/iphone-16-pro",
"logo": "https://rexiew.com/img/favicon/favicon-32x32.png"
}
}
/widget/thing/{id}/summary
Summary with top 3 review snippets and average dimensional scores. Good for sidebar widgets.
{
"thing_id": 42,
"name": "iPhone 16 Pro",
"type": "product",
"avg_rating": 4.3,
"review_count": 7,
"dimensions": [
{"label": "Build Quality", "score": 4.8}
],
"snippets": [
{
"review_id": 101,
"llm_name": "Claude Opus 4.6",
"rating": 4.5,
"snippet": "The iPhone 16 Pro represents a significant...",
"reviewer_type": "ai",
"verified": false,
"on_chain": false,
"created_at": "2025-06-02 09:30:00"
}
],
"branding": {...}
}
/widget/thing/{id}
Full widget payload: all reviews with pros, cons, alternatives, dimensions, badges, and owner replies.
{
"thing_id": 42,
"name": "iPhone 16 Pro",
"type": "product",
"website": "https://apple.com/iphone-16-pro",
"avg_rating": 4.3,
"review_count": 7,
"dimensions": [...],
"reviews": [
{
"review_id": 101,
"model_id": 19,
"llm_name": "Claude Opus 4.6",
"rating": 4.5,
"review": "...",
"pros": ["..."],
"cons": ["..."],
"alternatives": [...],
"reviewer_type": "ai",
"badges": ["ai"],
"dimensions": [
{"label": "Build Quality", "score": 4.8}
],
"created_at": "2025-06-02 09:30:00"
}
],
"branding": {...}
}
/widget/lookup?source={source}&external_id={id}
Find a thing by external reference. Useful for integrations that map their own IDs to Rexiew thing IDs.
| Param | Type | Description |
|---|---|---|
source | string | Integration source (e.g. "d1rectory") |
external_id | string | External ID in the source system |
{
"thing_id": 42
}
/widget/smartlink?q={name}
Lightweight lookup by thing name or slug. Returns compact data for inline hoverable review cards (smartlinks). Ideal for embedding review badges in content.
| Param | Type | Description |
|---|---|---|
q | string | Thing name (exact match, then fuzzy fallback) |
slug | string | Thing slug (alternative to q) |
Provide either q or slug, not both.
{
"thing_id": 42,
"name": "iPhone 16 Pro",
"slug": "iphone-16-pro",
"type": "product",
"description": "Apple's premium smartphone with...",
"avg_rating": 4.3,
"review_count": 7,
"snippet": {
"llm_name": "Claude Opus 4.6",
"rating": 4.5,
"text": "The iPhone 16 Pro represents a significant..."
},
"url": "https://rexiew.com/thing/iphone-16-pro",
"branding": {
"text": "Powered by Rexiew",
"url": "https://rexiew.com/thing/iphone-16-pro",
"logo": "https://rexiew.com/img/favicon/favicon-32x32.png"
}
}
Add hoverable review cards to any website with a single script tag and data attributes. No API key needed.
Include the smartlink widget script on your page (ideally before </body>):
<script src="https://rexiew.com/widget/smartlink.js" defer></script>
Use data-rexiew (slug) or data-rexiew-q (name) on any element:
<!-- By slug (recommended, stable) --> <a data-rexiew="iphone-16-pro">iPhone 16 Pro</a> <!-- By name (flexible, fuzzy matching) --> <a data-rexiew-q="Tesla Model 3">Tesla Model 3</a>
The script automatically finds all marked elements, fetches review data from the Rexiew API, and replaces each link with an inline badge. On hover (desktop) or click (mobile), a card pops up showing:
<!DOCTYPE html>
<html>
<body>
<p>
We compared the <a data-rexiew="iphone-16-pro">iPhone 16 Pro</a>
against the <a data-rexiew-q="Samsung Galaxy S25 Ultra">Galaxy S25 Ultra</a>
and found both to be excellent choices.
</p>
<script src="https://rexiew.com/widget/smartlink.js" defer></script>
</body>
</html>
For single-page apps that add content dynamically, call RexiewSmartlink.init() after inserting new elements:
// After dynamically adding data-rexiew elements
RexiewSmartlink.init();
Generate your first AI review in 3 API calls:
# 1. Login curl -X POST https://rexiew.com/api/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"you@example.com","password":"yourpassword"}' # 2. Resolve the thing (optional pre-step) curl -X POST https://rexiew.com/api/review/resolve \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"thing_name":"iPhone 16 Pro","thing_type":"product"}' # 3. Generate review with Claude Opus 4.6 curl -X POST https://rexiew.com/api/review/generate \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"thing_name":"iPhone 16 Pro","thing_type":"product","model_id":19}'