Developers

KYCLESS Reviews API & RSS

Original public reviews, replies and service metadata. A complete archive and reliable updates, without scraping. No account or API key required.

Quick start

Use the JSON API for a complete mirror. Use RSS to display recent publications. Both are generated from the same public dataset. All requests are read-only.

curl 'https://kycless.cc/api/v1/reviews?limit=100'
curl 'https://kycless.cc/api/v1/reviews?service=mixtum&type=review'
curl 'https://kycless.cc/feeds/reviews.xml?service=mixtum'

Attribute records to KYCLESS, preserve the author and link back to url. Keep imported reviews distinguishable from reviews posted directly on your platform.

Endpoints & filters

  • GET /api/v1/reviews — archive and changes, in ascending export revision order. Default includes both reviews and replies.
  • GET /api/v1/reviews/123 — one record. Known removed records return HTTP 410 with a minimal tombstone; unknown IDs return 404.
  • GET /feeds/reviews.xml — latest visible publications by original creation date, newest first. Default includes top-level reviews.
  • GET /api/v1/openapi.json — machine-readable OpenAPI 3.1 contract. HEAD and OPTIONS are supported.
ParameterMeaning
cursorJSON list only. Start at 0; then use pagination.next_cursor exactly as returned. Treat it as an opaque decimal string.
limit1–100. JSON default 50; RSS default 20.
typeall, review or reply. JSON default all; RSS default review.
company_idStable service ID; recommended for long-lived synchronization. A valid ID with no matching records returns an empty list.
serviceCurrent service slug, e.g. mixtum. Use either service or company_id. Unknown slugs return 404. Slugs may change; IDs are stable.

Unknown, duplicate or invalid parameters return HTTP 400. Filtering uses the record's service and type; deletion markers retain those internal filter keys but expose no old content.

Complete archive, updates & deletions

  1. Start with cursor=0. Upsert published records by global_id; remove local copies when status=deleted.
  2. Follow pagination.next_url until has_more=false. Do not guess or increment cursor values.
  3. Persist next_cursor only after successfully applying that page. Poll again with the saved cursor, normally every 1–5 minutes.
  4. Keep separate cursors per filter. Changing filters requires starting from 0 and reconciling the corresponding local dataset.
{
  "version": "1",
  "data": [],
  "pagination": {
    "has_more": false,
    "next_cursor": "250",
    "next_url": "https://kycless.cc/api/v1/reviews?cursor=250&limit=50&type=all"
  },
  "sync": {"watermark": "250", "refresh_interval_seconds": 5, "mode": "current_state"}
}
// Illustration of pagination fields, not a complete response.
// The full response also includes the source object.

The projection checks committed public data at most once every five seconds. It tracks edited text, scores, tags, authors, service links, official status and comment votes. Multiple edits between checks may coalesce into one latest state: this is synchronization, not an edit-history archive.

Deletion, hard deletion, service unpublication or exclusion of an imported thread replaces a formerly exported record with a minimal tombstone. Old text and author/service payloads are removed from the projection. deleted_at records when the export observed removal. Republishing the record produces a later published revision.

{
  "id": "123", "global_id": "kycless:comment:123",
  "origin": "kycless", "status": "deleted", "type": "review",
  "deleted_at": "2026-11-04T12:00:00.000Z",
  "revision": "251", "exported_at": "2026-11-04T12:00:00.000Z"
}

Repeated records are normal: apply a state only when its revision is newer than your local revision. The feed can advance past unrelated revisions when a filter is set. A cursor ahead of the server returns 409, for example after a restore: restart at 0 and reconcile, removing local entries absent from the rebuilt dataset. Periodic full reconciliation is also recommended.

Only original KYCLESS threads are exported. Future imports are marked separately and excluded to avoid circular re-imports. A record removed before it was ever exported has no export tombstone. Tombstones for previously exported records are retained without personal content.

Public data fields

id / global_id

Stable strings. id is local; global_id (kycless:comment:123) is globally namespaced. Never deduplicate by author or review text.

origin / status / type

origin is kycless. status is published or deleted; type is review (top-level, including unrated legacy reviews) or reply.

revision / exported_at

Monotonic export revision (decimal string) and UTC time when this exported state changed. Metadata and comment-vote changes also produce a new revision.

url / parent_id / root_review_id

Original permalink ending #comment-ID; direct parent (null for a root) and root thread ID. Replies can remain visible after their root is deleted.

title / display_title / title_is_generated

KYCLESS currently has no separate review title: title is null. display_title is a generated feed heading, explicitly marked by title_is_generated=true.

body.source / source_format

Original public text with KYCLESS inline markup; source_format is kycless-inline-v1. Supports **bold**, *italic*, __underline__, ~~strike~~ and [label](https://example.org).

body.text / body.html

Plain text and escaped, safely rendered HTML. Use body.text for text rendering and body.html for formatted rendering. Allowed HTML elements: strong, em, u, s, a and br. Links use HTTP(S) and rel=nofollow ugc noopener noreferrer.

rating

Object {value,min:1,max:5}, or null when no star rating exists. Do not interpret null as zero stars or mix reply counts with review ratings.

tags / votes

Public tag codes, labels and tone; up/down votes on this specific review/comment. These are not the service's overall votes.

author

Stable public ID, nickname, public profile URL and avatar_url. display_name/display_avatar_url reflect the service name/logo for an official reply. Account role, credentials, IPs and private activity are excluded.

is_official

True only for an on-behalf-of-service reply by a current service owner. It is not a paid promotion flag.

company

Stable ID, current slug/name, KYCLESS service card URL, logo, primary clearnet website and all public network links. No administrative or feed credentials.

created_at / updated_at

Original publication and review edit times as ISO 8601 UTC strings. Metadata changes are tracked by revision/exported_at, not necessarily updated_at.

order_proof_masked / attachments

Only the same masked order reference shown publicly. Full order references are never exported. Reviews currently have no attachments; attachments is an empty array.

Field definitions, nullability and response schemas are available in OpenAPI. Empty values stay null or empty arrays. IDs and revisions are strings; timestamps use UTC. Separate review headings and file attachments are not currently part of the product.

RSS feed

RSS 2.0 provides the latest 20 visible reviews by default (up to 100). Each item contains a stable GUID, original permalink, generated heading, publication date, safe HTML description, formatted content and author display name via dc:creator.

content:encoded includes the full formatted text and links to the author, service and original review. The kycless: namespace supplies IDs, revision, type, origin, parent/root IDs, rating, service and author links, official status, update time and the JSON detail URL. Public tag codes are included as RSS categories.

https://kycless.cc/feeds/reviews.xml
https://kycless.cc/feeds/reviews.xml?service=mixtum
https://kycless.cc/feeds/reviews.xml?type=all&limit=100

RSS is a recent-publications feed, not the complete archive or deletion channel. GUIDs stay stable across edits, and publication dates retain their original meaning. Use the API cursor to reliably update old records and remove deleted ones.

Caching, errors & usage limits

API and feed share a limit of 120 requests/minute per IP, including HEAD and conditional requests. Existing site-wide burst limits also apply: send requests sequentially, avoid bursts and poll every 1–5 minutes. On 429 or 503 obey Retry-After. OPTIONS and the OpenAPI document do not consume the export-specific quota.

Responses support ETag. Send If-None-Match with the last response ETag to receive a body-free HTTP 304 when unchanged. RSS also supports Last-Modified / If-Modified-Since; prefer ETag for precise change detection. CORS allows public browser reads without credentials. Unsupported write methods return 405.

curl -i 'https://kycless.cc/api/v1/reviews?cursor=0'
# Repeat with the ETag value returned above:
curl -i -H 'If-None-Match: "PASTE_ETAG_HERE"' \
  'https://kycless.cc/api/v1/reviews?cursor=0'

Version 1 keeps existing field meanings stable. Additional optional fields may be added; ignore fields you do not recognize. Breaking changes require a new API version. Keep the endpoint URL and cursor state in your integration configuration.

Ready-to-run Python client

The standard-library client maintains a dedicated SQLite mirror, handles cursor pagination, upserts, deletions, retry delays and a 409 reset. It commits local data and the cursor atomically; failed runs roll back. No external Python packages or API key are needed.

Download kycless_reviews_sync.py
python3 kycless_reviews_sync.py --database kycless-reviews.sqlite
# Optional: synchronize only one service
python3 kycless_reviews_sync.py --database service.sqlite --company-id 123
# Periodic full reconciliation
python3 kycless_reviews_sync.py --database kycless-reviews.sqlite --full

Run it every 1–5 minutes. Each SQLite file belongs to one filter scope; changing the filter or using --full rebuilds that dedicated mirror. Adapt the same upsert/delete logic when storing data in your own application.

OpenAPI, references & contact

OpenAPI 3.1 JSON specification documents all endpoints and response variants for generated clients and validation.

Format references: RSS 2.0 specification, HTTP semantics.

For integration questions or a higher request quota, use the KYCLESS contact channels.