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.
| Parameter | Meaning |
|---|---|
| cursor | JSON list only. Start at 0; then use pagination.next_cursor exactly as returned. Treat it as an opaque decimal string. |
| limit | 1–100. JSON default 50; RSS default 20. |
| type | all, review or reply. JSON default all; RSS default review. |
| company_id | Stable service ID; recommended for long-lived synchronization. A valid ID with no matching records returns an empty list. |
| service | Current 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
- Start with
cursor=0. Upsert published records byglobal_id; remove local copies whenstatus=deleted. - Follow
pagination.next_urluntilhas_more=false. Do not guess or increment cursor values. - Persist
next_cursoronly after successfully applying that page. Poll again with the saved cursor, normally every 1–5 minutes. - 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=100RSS 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.pypython3 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 --fullRun 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.
