BrowserStack AI Evals
EvaluationHuman Review

Shared Views

Share annotation queues with external reviewers via secret links.

Shared Views

Secret links let you share an annotation queue with external reviewers — people outside your project — without requiring them to log in. Reviewers access a scoped, read-only view where they can only submit scores.

Open the queue settings

Go to the queue detail page and open Share / Secret Links.

Click + New Link and configure:

OptionDescription
ExpiryHow long the link is valid — 1 to 7 days from creation
LayoutsWhich custom view layouts external reviewers can see
Default layoutWhich layout loads by default
Run filterOptionally restrict the link to items from specific runs

Copy the generated URL (format: https://your-domain.com/s/{token}) and share it with reviewers. The token is a 64-character hex string.

What External Reviewers Can Do

ActionAllowed
Browse queue itemsYes
View trace detailsYes
Submit scores for pending itemsYes
Update scores for completed itemsYes
View analytics and run progressYes
Create or delete itemsNo
Modify queue configurationNo

Secret links expire after the configured period (maximum 7 days). After expiry, the link returns a 401 error. Create a new link to continue sharing. Scores submitted via secret links are stored permanently even after the link expires.

Security Considerations

  • Scores submitted via secret links do not capture a user ID — they appear as anonymous annotations.
  • Anyone with the link URL can access the queue during the validity window. Treat the link as a shared secret.
  • Use run filters to restrict external reviewers to a specific batch of items rather than the entire queue.

All secret link endpoints use a token query parameter and do not require project API credentials.

Get Queue Info and Progress

curl "https://evals-api.browserstack.com/api/public/secret-links/annotation-queues?token={token}"

Response:

{
  "queue": {
    "id": "queue-uuid-1",
    "name": "Production Quality Review",
    "description": "...",
    "instructions": "Score each response on relevance and accuracy.",
    "projectId": "proj-uuid-1",
    "createdAt": "2026-04-07T10:00:00.000Z"
  },
  "runs": [
    {
      "id": "run-uuid-1",
      "name": "round-1",
      "createdAt": "2026-04-07T10:00:00.000Z",
      "totalItems": 50,
      "pendingItems": 12,
      "completedItems": 38
    }
  ],
  "stats": {
    "totalItems": 50,
    "pendingItems": 12,
    "completedItems": 38,
    "completionPercentage": 76
  },
  "scoreConfigs": [{ "id": "config-uuid-1", "name": "Relevance", "dataType": "NUMERIC" }],
  "config": { "defaultLayoutId": "layout-uuid-1", "runIds": ["run-uuid-1"] }
}

List Items

curl "https://evals-api.browserstack.com/api/public/secret-links/annotation-queues/items?token={token}&page=1&limit=50"

Submit a Score

curl -X POST "https://evals-api.browserstack.com/api/public/secret-links/annotation-queues/scores?token={token}" \
  -H "Content-Type: application/json" \
  -d '{
    "itemId": "item-uuid-1",
    "scoreConfigId": "config-uuid-1",
    "value": 0.9,
    "comment": "Response is highly relevant and accurate."
  }'
FieldTypeRequiredDescription
itemIdstringYesThe queue item to score
scoreConfigIdstringYesWhich score config to submit for
valuenumberNumeric configsScore value (must be within min/max)
stringValuestringCategorical/text configsSelected category label or free text
commentstringNoOptional reviewer comment

Update an Existing Score

curl -X PUT "https://evals-api.browserstack.com/api/public/secret-links/annotation-queues/scores?token={token}" \
  -H "Content-Type: application/json" \
  -d '{
    "itemId": "item-uuid-1",
    "scoreConfigId": "config-uuid-1",
    "value": 0.75,
    "comment": "Revised after re-reading the reference."
  }'

Get Analytics

curl "https://evals-api.browserstack.com/api/public/secret-links/annotation-queues/analytics?token={token}"

Response:

{
  "runs": [
    {
      "runId": "run-uuid-1",
      "runName": "round-1",
      "createdAt": "2026-04-07T10:00:00.000Z",
      "pendingCount": 12,
      "completedCount": 38,
      "totalCount": 50,
      "scoreAverages": { "Relevance": 0.87 },
      "scoreDistributions": { "Quality": { "PASS": 30, "FAIL": 8 } },
      "scoreMetadata": [
        { "name": "Relevance", "dataType": "NUMERIC" },
        { "name": "Quality", "dataType": "CATEGORICAL" }
      ]
    }
  ],
  "scoreNames": {
    "numeric": ["Relevance"],
    "categorical": ["Quality"]
  }
}

Get View Layouts

curl "https://evals-api.browserstack.com/api/public/secret-links/annotation-queues/view-layouts?token={token}"

Dashboard Workflow

End-to-end walkthrough for setting up and completing a human review cycle.

Open your project and click Annotation Queues in the left sidebar.

Create a queue

Click + New Queue. Enter a name and description. In the Instructions field, write clear guidance for reviewers (e.g. "Score each response on a scale of 0–1 for relevance to the user question."). Select the score configs to use.

Add items to the queue

Add traces to the queue manually from the trace detail page (Add to Queue button), or programmatically via the API. Items enter the queue in PENDING state.

Use Automation Rules to automatically route traces matching certain conditions into an annotation queue — no manual selection required.

Configure score rubrics

Go to Settings → Score Configurations and confirm the score configs attached to the queue are correctly defined. For categorical scores, ensure the labels and their numeric values accurately represent your rubric.

Review items

Open the queue and click Start Review. For each item:

  1. Read the trace content in the detail panel.
  2. Fill in the score fields (numeric values, category selections, or text).
  3. Click Submit to mark the item as completed and move to the next.

Items are temporarily locked to the active reviewer (5-minute timeout) to prevent concurrent edits.

Track progress

Return to the queue overview to see the completion percentage per run. The Scores tab shows aggregate analytics: score averages, distributions, and item-level drill-down.

Share with external reviewers (optional)

If external reviewers will participate, create a secret link via Share → New Link, configure the expiry and run filter, and send the link to reviewers. Their scores merge with internal annotations in the same queue.