Source: https://developers.tokportal.com/comments-verifications/
Markdown: https://developers.tokportal.com/comments-verifications.md

# Verifier Timeline

```
GET /api/ext/comments/{id}/verifications
```

Returns the full list of auto-verification attempts on a task — useful when:

- a task is stuck in `submitted` and you want to know **why** the verifier couldn't match,
- you want to audit the auto-verifier's hit rate per platform,
- you're building automation that decides between approve/dispute based on the scrape evidence.

```bash
curl -X GET https://app.tokportal.com/api/ext/comments/0d8b5a3e-92c4-4111-9a7d-3e2f1a2b3c4d/verifications \
  -H "X-API-Key: sk_xxx"
```

**Response:**

```json
{
  "data": {
    "task_id": "0d8b5a3e-92c4-4111-9a7d-3e2f1a2b3c4d",
    "status": "manually_confirmed",
    "attempts": [
      {
        "attempt_n": 1,
        "scraped_at": "2026-04-27T17:22:10Z",
        "outcome_kind": "couldnt_verify",
        "verified": false,
        "match_score": 0,
        "found_comment_id": null,
        "reason": "no_candidate_found",
        "comments_scraped": 87,
        "platform": "tiktok"
      }
    ]
  }
}
```

## Field reference

| Field              | Type            | Description                                                                                                          |
| ------------------ | --------------- | -------------------------------------------------------------------------------------------------------------------- |
| `attempt_n`        | integer         | 1-indexed attempt number on this task.                                                                               |
| `scraped_at`       | string          | When the scrape ran (UTC).                                                                                           |
| `outcome_kind`     | string          | One of: `verified`, `wrong_text`, `wrong_account`, `couldnt_verify`, `scrape_failed`.                                |
| `verified`         | boolean         | True only when `outcome_kind = "verified"`.                                                                          |
| `match_score`      | number          | Sørensen-Dice similarity of the best-matching comment (0–1). `0` if nothing matched.                                 |
| `found_comment_id` | string \| null  | Platform comment ID of the best match (if any).                                                                      |
| `reason`           | string          | Internal reason tag — `matched`, `no_candidate_found`, `wrong_text_same_handle`, `wrong_account`, `scrape_failed_*`. |
| `comments_scraped` | integer \| null | How many comments the scraper returned. `0` is a strong signal the scraper couldn't reach the video.                 |
| `platform`         | string \| null  | Snapshot of the platform at scrape time — useful for cross-platform audits.                                          |

## Outcome decision matrix

| `outcome_kind`   | Resulting task state                                                  |
| ---------------- | --------------------------------------------------------------------- |
| `verified`       | `verified_auto` → `finalized` after the 24h review window.            |
| `wrong_text`     | `pending_corrections` (manager edits/reposts).                        |
| `wrong_account`  | `pending_corrections` (manager deletes + reposts from right account). |
| `couldnt_verify` | Task stays in `submitted` — manager sees the manual modal.            |
| `scrape_failed`  | Task stays in `submitted`; cron re-attempts later.                    |

## Why was my task not verified?

If `comments_scraped` is `0` across all attempts, the Apify scraper couldn't reach the video — usually a private account or a regional block. Approve the task or contact the manager.

If `comments_scraped` is high (40–100) and `outcome_kind` is `couldnt_verify`, the comment really wasn't found among the recent ones. Either:

- the manager didn't actually post (dispute),
- the comment was hidden / deleted by the creator (approve, your reach is gone but the manager did the work),
- the comment is older than the 100 most recent (rare; approve).

If `outcome_kind` is `wrong_text`, the manager posted a typo'd version. The `correction_required` text on the task spells out what they need to fix.

If `outcome_kind` is `wrong_account`, the manager used a different account than `saved_account_id`. The manager will be told to delete + repost.
