CyberRXN Docs
APIAPI reference

Report a source-backed observation issue

POST /v1/reports

POST /v1/reports

API overview · OpenAPI

Non-billable; needs a verified workspace member with kb:query. The gateway captures an immutable original snapshot, stable source reference, dataset revision and record digest. Use the same idempotency key for the same finding. Reusing a key for different input is a 409. Include only the observation discrepancy and source evidence, never private user queries or secrets. A pending report does not modify any scientific data. Limited to 20 submissions per user/hour and 200 per workspace/hour; this is separate from billing and knowledge query limits.

Authorization

This operation requires a bearer credential. The description defines additional role, scope or first-party-session restrictions; an API key does not grant those permissions by itself.

Request body

PropertyTypeRequiredDetails
observation_idstringyes
category"field_conflict" ∣ "stage_misattribution" ∣ "missing_source" ∣ "structure_mismatch" ∣ "other"yes
summarystringyesOnly the observed record issue; no user query or private context.
evidence_quotestring ∣ nullno
proposed_patchCorrectionPatch ∣ nullno
idempotency_keystringyes
Full schema: ReportSubmission
{
  "properties": {
    "observation_id": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "title": "Observation Id"
    },
    "category": {
      "type": "string",
      "enum": [
        "field_conflict",
        "stage_misattribution",
        "missing_source",
        "structure_mismatch",
        "other"
      ],
      "title": "Category"
    },
    "summary": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 10,
      "title": "Summary",
      "description": "Only the observed record issue; no user query or private context."
    },
    "evidence_quote": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 4000,
          "minLength": 1
        },
        {
          "type": "null"
        }
      ],
      "title": "Evidence Quote"
    },
    "proposed_patch": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/CorrectionPatch"
        },
        {
          "type": "null"
        }
      ]
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 128,
      "minLength": 8,
      "pattern": "^[A-Za-z0-9_.:-]+$",
      "title": "Idempotency Key"
    }
  },
  "additionalProperties": false,
  "type": "object",
  "required": [
    "observation_id",
    "category",
    "summary",
    "idempotency_key"
  ],
  "title": "ReportSubmission"
}

Responses

HTTPDetailsType
201Successful Responseapplication/json: ObservationReport
401Unauthorizedapplication/problem+json: ProblemDetails
403Forbiddenapplication/problem+json: ProblemDetails
404Not Foundapplication/problem+json: ProblemDetails
409Conflictapplication/problem+json: ProblemDetails
413Request Entity Too Largeapplication/problem+json: ProblemDetails
422Unprocessable Entityapplication/problem+json: ProblemDetails
429Too Many Requestsapplication/problem+json: ProblemDetails
502Bad Gatewayapplication/problem+json: ProblemDetails
503Service Unavailableapplication/problem+json: ProblemDetails

Response: ObservationReport

PropertyTypeRequiredDetails
idstringyes
observation_idstringyes
category"field_conflict" ∣ "stage_misattribution" ∣ "missing_source" ∣ "structure_mismatch" ∣ "other"yes
summarystringyes
evidence_quotestring ∣ nullno
proposed_patchCorrectionPatch ∣ nullno
state"pending" ∣ "accepted" ∣ "rejected" ∣ "needs_information" ∣ "needs_revalidation"yes
created_atstringyes
updated_atstringyes
referenceReportReferenceyes
reviewReviewedDecision ∣ nullno
correctionCorrectionVersion ∣ nullno
Full schema
{
  "properties": {
    "id": {
      "type": "string",
      "title": "Id"
    },
    "observation_id": {
      "type": "string",
      "title": "Observation Id"
    },
    "category": {
      "type": "string",
      "enum": [
        "field_conflict",
        "stage_misattribution",
        "missing_source",
        "structure_mismatch",
        "other"
      ],
      "title": "Category"
    },
    "summary": {
      "type": "string",
      "title": "Summary"
    },
    "evidence_quote": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Evidence Quote"
    },
    "proposed_patch": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/CorrectionPatch"
        },
        {
          "type": "null"
        }
      ]
    },
    "state": {
      "type": "string",
      "enum": [
        "pending",
        "accepted",
        "rejected",
        "needs_information",
        "needs_revalidation"
      ],
      "title": "State"
    },
    "created_at": {
      "type": "string",
      "title": "Created At"
    },
    "updated_at": {
      "type": "string",
      "title": "Updated At"
    },
    "reference": {
      "$ref": "#/components/schemas/ReportReference"
    },
    "review": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/ReviewedDecision"
        },
        {
          "type": "null"
        }
      ]
    },
    "correction": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/CorrectionVersion"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true,
  "type": "object",
  "required": [
    "id",
    "observation_id",
    "category",
    "summary",
    "state",
    "created_at",
    "updated_at",
    "reference"
  ],
  "title": "ObservationReport"
}

This page is generated from OpenAPI; examples are schemas, not a fabricated successful response.

Usage and billing · Structured errors

On this page