API Reference

Public API

Fetch verified reviews, ratings, and business profile data into your own site. Read-only REST API with publishable-key auth — safe for browser use.

The Signed Reviews Public API lets you fetch verified reviews, ratings, and business profile data directly into your own site or app. Every review is processor-attested — backed by a real, non-refunded Stripe payment.


Quickstart

curl -H "Authorization: Bearer YOUR_PUBLISHABLE_KEY" \
  https://api.signedreviews.com/v1/public/profile

That's it. One endpoint for profile data, one for reviews. Both are read-only and safe for client-side use with a publishable key.

Authentication

Two key types, both read-only:

Key type Prefix Safe for
Publishable key rvwpk_live_… Browser, mobile apps, client-side code
Secret key rvw_live_… Server-to-server only

Get your keys from the API Keys section of your dashboard. Publishable keys are available on Starter plans and above.

Pass your key as a Bearer token in the Authorization header, or as a ?key= query parameter.

Endpoints

Base URL: https://api.signedreviews.com/v1/public

GET /profile

Returns your business identity, aggregate rating, star distribution, and verified trust metrics.

{
  "success": true,
  "data": {
    "business": {
      "name": "Acme Widgets",
      "slug": "acme-widgets",
      "profileUrl": "https://signedreviews.com/acme-widgets",
      "logoUrl": "https://…",
      "brandColor": "#1a56db"
    },
    "summary": {
      "average": 4.7,
      "total": 142,
      "distribution": { "1": 2, "2": 3, "3": 8, "4": 31, "5": 98 }
    },
    "metrics": [
      { "key": "refund_rate", "label": "Refund rate", "value": { "rate": 0.012 } }
    ]
  },
  "error": null,
  "meta": { "generatedAt": "2026-08-10T12:00:00.000Z" }
}

Metrics are computed from your Stripe data. Each metric respects a k-anonymity cohort floor — if there aren't enough transactions to compute a metric without identifying individual customers, it's suppressed.

GET /reviews

Returns paginated, privacy-masked reviews.

Parameters: page (default 1), limit (default 10, max 100), sort (date_desc, date_asc, rating_desc, rating_asc), minRating (1-5), from, to (ISO 8601 dates).

{
  "success": true,
  "data": [
    {
      "id": "rev_abc123",
      "rating": 5,
      "title": "Exactly what we needed",
      "body": "Switched from Trustpilot. The Stripe verification alone…",
      "createdAt": "2026-07-15T09:30:00.000Z",
      "reviewer": {
        "displayName": "James K.",
        "photoUrl": "https://…"
      },
      "social": { "provider": "linkedin", "handle": "jamesk" },
      "purchase": { "amount": 49.00, "currency": "usd" },
      "photos": ["https://…"],
      "businessReply": {
        "body": "Thanks James!",
        "repliedAt": "2026-07-16T10:00:00.000Z"
      },
      "verification": {
        "method": "stripe_payment",
        "signature": "sha256:abc123…",
        "url": "https://signedreviews.com/verify/rev_abc123"
      }
    }
  ],
  "error": null,
  "meta": { "page": 1, "limit": 10, "total": 142, "totalPages": 15 }
}

Privacy masking is applied server-side: purchase amounts and social handles are only included when the reviewer explicitly opted to show them.

Response format

Every response uses a consistent envelope:

{
  "success": true,
  "data": { … },
  "error": null,
  "meta": { "page": 1, "limit": 10 }
}

On error:

{
  "success": false,
  "data": null,
  "error": "Invalid API key"
}

Rate limits

Plan Requests per minute
Starter 60
Pro 300
Scale 1,000

Responses include Cache-Control: public, max-age=60, stale-while-revalidate=300 headers. Cache responses on your side where possible to stay well within limits.

CORS

The Public API v1 is accessible from any origin. You can call it directly from browser JavaScript without a proxy.

Full OpenAPI spec

Download the complete machine-readable spec at signedreviews.com/openapi.json.


Questions? Email api@signedreviews.com.