Skip to main content

Author moderation API

The Author moderation API exposes privacy-limited player trust cases for human review. It separates derived evidence from raw gameplay and identity data, and records every decision against an authoritative case version.

See Moderation and trust for the policy, score bands, decision effects, and restriction rules. This page covers requests, pagination, conflicts, and recovery.

Access and privacy​

All routes begin with /api/v1/author/trust-cases and require bearer authentication, an active account, and the Author role. The queue excludes a case targeting the authenticated Author. Case views omit precise coordinates, provider identity, submitted answers, hidden cards, and raw private match state.

Missing, inaccessible, and non-reviewable cases use safe responses. Clients must not infer additional player activity from totals, missing records, or restriction messages.

Routes​

MethodRoutePurpose
GET/author/trust-casesFilter and page the review queue.
GET/author/trust-cases/:caseIdRead case detail and recent context.
GET/author/trust-cases/:caseId/evidencePage privacy-safe evidence summaries.
GET/author/trust-cases/:caseId/restrictionsPage current and historical restrictions.
GET/author/trust-cases/:caseId/historyPage the append-only decision history.
POST/author/trust-cases/:caseId/decisionsRecord one versioned Author decision.
GET/author/trust-cases/:caseId/exportDownload a bounded privacy-safe JSON export.

Successful JSON responses include requestId. The exact field schemas remain in the OpenAPI reference.

Queue and case reads​

The queue defaults to active cases—open and under_review—with page 1 and 20 items. pageSize may be 1–100. Available filters are:

FilterValues or behaviour
statusactive, all, open, under_review, or resolved.
searchLiteral, case-insensitive Player Name substring; a complete UUID also matches IDs.
bandnormal, observe, review_required, or urgent_review.
restrictionStateactive or none.
signalTypeOne supported trust signal type.
Date filterscreatedFrom, createdTo, updatedFrom, and updatedTo as date-time values.

Queue entries include the safe player identity, case status and version, score and band, signal types, restriction summary, canReview, and timestamps. Case detail adds score explanation, effective restrictions, evidence context, and recent audit history. Restriction records include their appeal status. Treat the returned version as the basis for the next decision; do not keep an older version after refreshing any case view.

Evidence, restrictions, and history use deterministic pages with page, pageSize, totalItems, and totalPages. Evidence describes the signal, policy version, observation and expiry, effective contribution, review state, and safe opponent-pattern aggregates where available. It does not identify the opponents behind those aggregates.

Record a decision​

Every decision body requires expectedVersion, action, and a trimmed reasonNote of 1–1,000 characters. Supported actions are:

ActionAdditional fields and effect
continue_monitoringKeeps or starts human review. Optional evidenceIds records reviewed context.
dismissResolves an eligible case with no active restriction.
mark_false_positiveRequires 1–100 unique evidenceIds and adjusts those active signals.
restrictRequires scopes and durationHours from 1 to 168.

Writable restriction scopes are online_verification_required, location_reward_challenge_hold, and new_competitive_match_hold. The API can display a historical card_trade_hold, but this decision route cannot create one.

The server locks the case, compares expectedVersion, validates the transition, records the reason and linked evidence, updates restrictions, and advances the case version atomically. A decision can be rejected when selected evidence is invalid, a dismissal is not currently permitted, or legacy opponent-pattern evidence lacks a safe summary and no fresh evaluation supersedes it.

Decision requests have no idempotency key. After an uncertain response, reload the case and its history before deciding whether any new command is required. Never repeat a decision blindly with a newer version: the earlier request may already have changed the score, state, or restrictions.

Export and recovery​

The export response uses format trust-case-review-v1 and downloads as JSON. It contains the safe case projection and up to 100 evidence, restriction, and history records in each collection. Totals and pagination metadata identify truncation; use the paginated endpoints when the complete review record is needed.

ResponseCaller action
400 VALIDATION_ERRORCorrect filters, pagination, UUIDs, action-specific fields, or note formatting.
404 TRUST_CASE_NOT_FOUNDRemove the inaccessible case from the current workspace.
409 TRUST_CASE_VERSION_CONFLICTReload case detail and review the newer version before another decision.
409 INVALID_TRUST_DECISIONShow the safe explanation and keep the case unchanged until the input is fixed.

Player appeal records can appear in the projection, but player submission and Author appeal-resolution routes are not currently part of this API. For storage, retention, and independent-review boundaries, see Trust storage.

AI declaration​

Prepared with assistance from Codex[GPT-6], using Author trust-review route schemas, privacy projections, decision validation, and export bounds.