Data Quality

List data remediation tasks

The work generated from what the quality checks find, and where each item has got to.

Keyless, on the same reasoning as the gap report: a measurement nobody can see being acted on is a measurement. A task reveals nothing about the catalog that /v1/data/gaps does not.

What this deliberately does not carry is anything identifying the worker: which agent or person holds a task (assignedTo says only whether it is the platform's agent or a person), what value they proposed, and the note they closed it with. An unreviewed answer published beside a record reads as a fact about that record. A proposal becomes public by being accepted into the catalog, which is the surface that already carries values.

States: open (queued), claimed (allocated to a worker), in_progress (being worked), resolved (finished, or the finding disappeared), unverifiable (searched and not findable), not_a_fault (the check was wrong about this record).

No API key required.

get/v1/data/tasks

Request

  • Base URL: https://api.gunspec.io
  • URL: https://api.gunspec.io/v1/data/tasks
  • Auth: one of:
    • none
    • API key in header X-API-Key
    • HTTP bearer

Query parameters

status'open' | 'claimed' | 'in_progress' | 'resolved' | 'unverifiable' | 'not_a_fault'

Only tasks in this state.

entity'manufacturers' | 'firearms' | 'calibers' | 'attachments' | 'ammunition'

Only tasks for one catalog.

checkstring

Only one check's tasks, by the id the data quality pages print (firearm-weight-fits-its-size); the quality: prefix is optional.

fieldstring

Only tasks about one record field.

subjectstring

Only tasks about one record.

qstring

A search: a task number (12879 or #12879), or text found in the record id or the check id.

kind'gap' | 'contradiction' | 'vocabulary' | 'asset' | 'verify' | 'report'

Only one kind of task.

stage'queued' | 'working' | 'proposed' | 'accepted'

Where the work stands: queued, working, proposed (answered and waiting on a person) or accepted.

checksstring

Several checks' tasks at once, comma-separated (at most 40), for a page listing every check that rests on one method. Each id matches with or without its quality: prefix.

state'open' | 'closed'

open is every task not yet closed (queued or being worked); closed is every closed task, newest closure first.

closer'redback' | 'redback_accepted' | 'team'

Closed tasks by who closed them, newest closure first: redback (the platform's agent filed a conclusion nobody has judged yet), redback_accepted (a person accepted what the agent filed) or team (a person worked or closed it, or corrected the record so the check no longer finds it).

include'research'

research adds each task's research inputs: the rule, the steps, the evidence and the record's own fields. Never the proposal.

limitinteger

How many to return per page.

pageinteger

The page, from 1.

Response

List data remediation tasks

successboolean required

Always true on a successful response. Every error carries false and an error object instead.

Example response

{
  "success": true,
  "data": {
    "total": 46,
    "page": 1,
    "perPage": 50,
    "tasks": [
      {
        "taskKey": "contradiction:caliber-confidence-has-a-source:12-gauge-3-5",
        "number": 1204,
        "research": {
          "describes": "Every firearm with a full envelope has an apparent density within 2.5x of its category median.",
          "field": "weight_empty_g",
          "rules": [
            "Check each of the four figures against the maker's page."
          ],
          "evidence": {
            "apparentDensity": 0.258,
            "categoryMedian": 0.892
          },
          "record": {
            "id": "angstadt-udp-556",
            "weight_empty_g": 2268
          },
          "alreadyCites": [
            "https://angstadtarms.com/udp-556"
          ],
          "key": "manufacturer:escort merged_into",
          "currentValue": 2268,
          "affected": [
            "firearm:enfield-no-2",
            "firearm:gewehr-43"
          ]
        },
        "kind": "contradiction",
        "entity": "calibers",
        "subject": "12-gauge-3-5",
        "finding": "caliber-confidence-has-a-source",
        "status": "open",
        "records": 1,
        "openedAt": "2026-09-15T03:00:12Z",
        "startedAt": "2026-09-15T09:14:00Z",
        "assignedTo": "redback",
        "closedReason": "finding_gone",
        "closer": "team"
      }
    ]
  },
  "pagination": {
    "page": 1,
    "per_page": 20,
    "limit": 20,
    "total": 42,
    "totalPages": 3
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.