API-documentatie

Met de Rexiew API kunt u dingen zoeken, reviews lezen, AI-reviews genereren, menselijke reviews indienen en reviewwidgets op elke site insluiten. Alle reacties zijn in JSON-indeling.

Basis-URL

https://rexiew.com/api

Alle eindpunten zijn relatief ten opzichte van deze basis-URL.

Verificatie

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.

Foutafhandeling

Errors return a JSON object with an error field and an appropriate HTTP status code.

{
  "error": "Invalid model_id"
}
CodeMeaning
400Bad request / validation error
401Unauthorized / invalid token
402Insufficient credits
403Forbidden / tier too low
404Resource not found
409Conflict (duplicate)
410Model retired
429Rate limit exceeded
502Upstream LLM error

Openbare endpoints

Geen authenticatie vereist.

GET /health

Controleer of de API actief is.

Response

{
  "status": "ok",
  "service": "Rexiew API",
  "version": "1.0.0"
}
GET /models

Geef een overzicht van alle LLM-modellen met tier-vereisten en actieve status. Bij authenticatie toont het welke modellen toegankelijk zijn voor je abonnementsniveau.

Response

{
  "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"
}
GET /things/{id}

Haal de details en alle reviews van iets op.

Response

{
  "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"
    }
  ]
}
GET /review/{id}

Haal volledige reviewdetails op, inclusief voor- en nadelen, alternatieven, dimensionale scores en on-chain verificatiestatus.

Response

{
  "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"
}
GET /review/{id}/verify

Verifieer het on-chain bewijs van een ondertekende menselijke review via Provifier.

Response

{
  "verified": true,
  "tx_digest": "ABC123...",
  "chain": "sui",
  "data_hash": "sha256...",
  "explorer_url": "https://suiscan.xyz/mainnet/tx/ABC123..."
}

Geverifieerde eindpunten

These endpoints require a JWT Bearer token in the Authorization header.

POST /auth/login

Verifieer met e-mailadres en wachtwoord. Retourneert JWT access en refresh tokens.

Request Body

{
  "email": "user@example.com",
  "password": "yourpassword"
}

Response

{
  "access_token": "eyJ...",
  "refresh_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "user": {
    "id": 1,
    "email": "user@example.com",
    "role": "user",
    "credit_balance": 500
  }
}
POST /auth/register

Maak een nieuw account aan. Wachtwoord moet minimaal 10 tekens lang zijn.

Request Body

{
  "email": "newuser@example.com",
  "password": "securepassword"
}

Response 201 Created

{
  "access_token": "eyJ...",
  "refresh_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "user": {
    "id": 2,
    "email": "newuser@example.com",
    "role": "user",
    "credit_balance": 0
  }
}
POST /auth/refresh

Wissel een geldige vernieuwingstoken in voor nieuwe toegangs- en vernieuwingstokens.

Request Body

{
  "refresh_token": "eyJ..."
}

Response

{
  "access_token": "eyJ...",
  "refresh_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 3600
}
POST /review/resolve Auth

Voorbereidingsstap voordat een review wordt gegenereerd. Zet de invoer van de gebruiker om naar een bestaand item in de database of stelt voor om een nieuw item aan te maken. Gebruikt intern een AI-model voor matching.

Request Body

{
  "thing_name": "iPhone 16 Pro",
  "thing_type": "product"
}

Response

{
  "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
}
POST /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).

Request Body

{
  "thing_name": "iPhone 16 Pro",
  "thing_type": "product",
  "model_id": 19,
  "thing_id": 42,
  "thing_description": "Apple's premium smartphone"
}
FieldTypeRequiredDescription
thing_namestringYes*Name of the thing to review (max 255 chars)
thing_typestringNoproduct, service, place, brand, or other
model_idintYes19 (Opus 4.6) or 25 (GPT 5.4)
thing_idintNoIf provided, skips resolver and uses this thing directly
thing_descriptionstringNoDescription override for new things (max 255 chars)
review_aspectstringNoAspect to focus on (e.g. "affiliate-program", "pricing"). Defaults to "general"

* Required if thing_id is not provided.

Response 201 Created

{
  "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
}
POST /review/human Auth

Dien een door mens geschreven beoordeling in. Beperkt tot 1 per thing per gebruiker per dag. Voeg optioneel een portefeuille-adres toe voor Blockinity-verificatie.

Request Body

{
  "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..."
}

Response 201 Created

{
  "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": "{...}"
}
PATCH /review/{id}/sign Auth

Voeg Provifier on-chain handtekeningsgegevens toe aan een menselijke review die je bezit. Maakt de review cryptografisch verifieerbaar.

Request Body

{
  "tx_digest": "ABC123...",
  "data_hash": "sha256...",
  "chain": "sui"
}

Response

{
  "review_id": 109,
  "signed": true,
  "tx_digest": "ABC123...",
  "chain": "sui",
  "data_hash": "sha256..."
}
GET /review/history?page=1&limit=20 Auth

Haal de reviewgeschiedenis van de geverifieerde gebruiker op, gepagineerd.

Parameters

ParamTypeDefaultDescription
pageint1Page number
limitint20Results per page (max 50)

Response

{
  "reviews": [...],
  "total": 45,
  "page": 1,
  "limit": 20,
  "pages": 3
}
GET /user/profile Auth

Haal het profiel van de geverifieerde gebruiker, tegoedsaldo en abonnementsgegevens op.

Response

{
  "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
  }
}

Widget-eindpunten

Openbaar, geen authenticatie vereist. Reacties worden 5 minuten lang in cache opgeslagen. Gebruik deze om Rexiew-reviewgegevens op externe websites in te sluiten.

GET /widget/thing/{id}/badge

Lichte badgegegevens: gemiddelde beoordeling en aantal reviews. Ideaal voor inline weergave.

Response

{
  "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"
  }
}
GET /widget/thing/{id}/summary

Samenvatting met top 3 reviewfragmenten en gemiddelde dimensionale scores. Geschikt voor zijbalkwidgets.

Response

{
  "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": {...}
}
GET /widget/thing/{id}

Volledige widgetpayload: alle reviews met voor- en nadelen, alternatieven, dimensies, badges en eigenaar reacties.

Response

{
  "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": {...}
}
GET /widget/lookup?source={source}&external_id={id}

Zoek een item via externe referentie. Handig voor integraties die hun eigen IDs toewijzen aan Rexiew thing IDs.

Parameters

ParamTypeDescription
sourcestringIntegration source (e.g. "d1rectory")
external_idstringExternal ID in the source system

Response

{
  "thing_id": 42
}

Smartlink Embed-gids

Voeg zwevende reviewkaarten toe aan elke website met één scripttag en data-attributen. Geen API-sleutel nodig.

1. Script toevoegen

Include the smartlink widget script on your page (ideally before </body>):

<script src="https://rexiew.com/widget/smartlink.js" defer></script>

2. Koppelingen markeren

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>

3. Klaar

Het script vindt automatisch alle gemarkeerde elementen, haalt reviewgegevens op uit de Rexiew API en vervangt elke link door een inline badge. Bij aanwijzen (bureaublad) of klikken (mobiel) verschijnt een kaart met:

  • Naam en type van ding
  • Sterrenbeoordeling en score
  • Aantal beoordelingen
  • Beschrijving
  • Nieuwste AI-reviewfragment
  • Link naar volledige reviews op Rexiew

Volledig voorbeeld

<!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>

SPA-ondersteuning

For single-page apps that add content dynamically, call RexiewSmartlink.init() after inserting new elements:

// After dynamically adding data-rexiew elements
RexiewSmartlink.init();

Quickstart-voorbeeld

Genereer je eerste AI-review in 3 API-aanroepen:

# 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}'