---
title: "Filterable JSON site index for research agents"
method: GET
path: "/api/agents/context"
tags: ["Agents"]
---

# Filterable JSON site index for research agents

`GET /api/agents/context`

## Request

- Base URL: `https://aicoolies.com`
- URL: `https://aicoolies.com/api/agents/context`
- Auth: none required

Returns the aicoolies catalog as a typed JSON index of tools, comparisons, reviews, stacks, use cases, categories, and tags. Supports conditional GET via If-None-Match. CORS is * for GET and OPTIONS. Responses carry RateLimit headers so a client can self-throttle.

## Query parameters

- `category` string
- `include` string
- `compact` boolean

## Response `200`

Catalog index

- union
  - AgentContext
    - `schema_version` integer, required: Additive response schema version. Existing v2 fields remain available as compatibility aliases.
    - `generated_at` string, date-time, required: Deterministic catalog snapshot timestamp, not the request wall-clock time. Stable while payload_etag is stable.
    - `base_url` string, uri, required
    - `counts` CatalogCounts, required: Record count per collection.
      - `tools` integer
      - `comparisons` integer
      - `reviews` integer
      - `stacks` integer: Editorial stacks were retired; this field is kept for v1 compatibility and is always empty.
      - `use_cases` integer
      - `categories` integer
      - `tags` integer
    - `payload_etag` string, required: Validator for the default unfiltered context. Filtered and compact representations can carry a different HTTP ETag.
    - `tools` AgentTool[]
      - `slug` string, required
      - `name` string, required
      - `status` 'active' | 'graveyard', required
      - `tagline` string, nullable
      - `short_description` string, nullable
      - `official_url` string, uri, nullable
      - `categories` string[]
      - `tags` string[]
      - `use_cases` string[]
      - `is_open_source` boolean
      - `license` 'open-source' | 'source-available' | 'proprietary': License category. Empty CMS license follows the open-source checkbox: checked is open-source, unchecked is proprietary.
      - `is_recommended` boolean
      - `pricing_model` string, nullable
      - `pricing_summary` string, nullable
      - `pricing_plans` PublicPricingPlan[]
        - `name` string, required
        - `amount` number, nullable, required
        - `currency` string, nullable, required
        - `billing_period` string, required
        - `unit` string, nullable, required
        - `limits` string, nullable, required
        - `is_starting_plan` boolean, required
        - `source_url` string, uri, required
        - `source_checked_at` string, date-time, required
      - `sources` PublicSource[]
        - `label` string, required
        - `url` string, uri, required
      - `alternatives` ExplicitAlternatives
        - `provenance` 'explicit', required
        - `source` 'tools.alternatives', required
        - `order` 'stored', required
        - `items` object[], required
          - `position` integer, required
          - `tool_slug` string, required
          - `provenance` 'explicit', required
          - `source` 'tools.alternatives', required
      - `content_updated_at` string, date-time: Editorial content timestamp (contentModifiedAt). Falls back to the CMS updatedAt when that stamp is unset.
      - `verified_at` string, date-time, nullable
      - `source_checked_at` string, date-time, nullable: Most recent date when all cited primary sources were rechecked.
      - `updated_at` string, date-time: Backward-compatible v2 alias of content_updated_at.
    - `comparisons` AgentComparison[]
      - `slug` string, required
      - `title` string, required
      - `intro` string, nullable
      - `verdict` string, nullable
      - `tool_slugs` string[]
      - `winner_tool_slug` string, nullable
      - `sources` PublicSource[]
        - `label` string, required
        - `url` string, uri, required
      - `content_updated_at` string, date-time: Editorial content timestamp (contentModifiedAt). When unset, publishedAt, then createdAt, then CMS updatedAt.
      - `verified_at` string, date-time, nullable
      - `source_checked_at` string, date-time, nullable
      - `updated_at` string, date-time: Backward-compatible v2 alias of content_updated_at.
    - `reviews` AgentReview[]
      - `slug` string, required
      - `title` string
      - `tool_slug` string, nullable
      - `summary` string, nullable
      - `verdict` string, nullable
      - `score_overall` integer, nullable
      - `score_speed` integer, nullable
      - `score_privacy` integer, nullable
      - `score_dev_experience` integer, nullable
      - `evidence_status` 'not-evidenced' | 'partial' | 'verified' | 'null', nullable
      - `evidence_badge` 'verified' | 'documented' | 'partial' | 'not-evidenced' | 'unclassified': Resolved public evidence label. tested_at, tested_version, and test_environment are null when this is documented.
      - `rubric_version` string, nullable
      - `tested_at` string, date-time, nullable: Hands-on test date. Null when evidence_badge is documented.
      - `tested_version` string, nullable: Tested product version or dated SaaS state. Null when evidence_badge is documented.
      - `test_environment` string, nullable: Reproducibility context for a hands-on record. Null when evidence_badge is documented.
      - `test_artifact_url` string, uri, nullable
      - `sources` PublicSource[]
        - `label` string, required
        - `url` string, uri, required
      - `content_updated_at` string, date-time: Editorial content timestamp (contentModifiedAt). When unset, publishedAt, then createdAt, then CMS updatedAt.
      - `verified_at` string, date-time, nullable
      - `source_checked_at` string, date-time, nullable
      - `updated_at` string, date-time: Backward-compatible v2 alias of content_updated_at.
    - `stacks` AgentStack[]: Editorial stacks were retired; this field is kept for v1 compatibility and is always empty.
      - `slug` string, required
      - `title` string, required
      - `intro` string, nullable
      - `verdict` string, nullable
      - `tool_slugs` string[]
      - `budget_range` string, nullable
      - `sources` PublicSource[]
        - `label` string, required
        - `url` string, uri, required
      - `content_updated_at` string, date-time
      - `verified_at` string, date-time, nullable
      - `source_checked_at` string, date-time, nullable
      - `updated_at` string, date-time: Backward-compatible v2 alias of content_updated_at.
    - `use_cases` AgentUseCase[]
      - `slug` string, required
      - `name` string
      - `description` string, nullable
      - `sources` PublicSource[]
        - `label` string, required
        - `url` string, uri, required
      - `content_updated_at` string, date-time
      - `verified_at` string, date-time, nullable
      - `source_checked_at` string, date-time, nullable
      - `updated_at` string, date-time: Backward-compatible v2 alias of content_updated_at.
    - `categories` AgentCategory[]
      - `slug` string, required
      - `name` string, required
      - `description` string, nullable
      - `tool_count` integer
      - `sources` PublicSource[]
        - `label` string, required
        - `url` string, uri, required
      - `content_updated_at` string, date-time
      - `verified_at` string, date-time, nullable
      - `source_checked_at` string, date-time, nullable
      - `updated_at` string, date-time: Backward-compatible v2 alias of content_updated_at.
    - `tags` AgentTag[]
      - `slug` string, required
      - `content_updated_at` string, date-time
      - `updated_at` string, date-time: Backward-compatible v2 alias of content_updated_at.
  - AgentContextCompact: Slug-only representation returned by /api/agents/context?compact=true. Omitted collections remain absent when include is used.
    - `schema_version` integer, required
    - `generated_at` string, date-time, required: Deterministic catalog snapshot timestamp.
    - `base_url` string, uri, required
    - `counts` CatalogCounts, required: Record count per collection.
      - `tools` integer
      - `comparisons` integer
      - `reviews` integer
      - `stacks` integer: Editorial stacks were retired; this field is kept for v1 compatibility and is always empty.
      - `use_cases` integer
      - `categories` integer
      - `tags` integer
    - `payload_etag` string, required: Validator for the default unfiltered full catalog snapshot.
    - `tools` string[]
    - `comparisons` string[]
    - `reviews` string[]
    - `stacks` string[]: Editorial stacks were retired; this field is kept for v1 compatibility and is always empty.
    - `use_cases` string[]
    - `categories` string[]
    - `tags` string[]

## Other responses

- `304`: Not modified — the ETag sent in If-None-Match still matches.
- `400`: Invalid include value or unknown category slug
- `429`: Rate limit exceeded. Retry-After carries the wait in seconds.
- `500`: Server error

---

[API](https://skmtc.dev/aicoolies/apis/aicoolies-public-api.md) · [All operations](https://skmtc.dev/aicoolies/apis/aicoolies-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aicoolies/apis/aicoolies-public-api/revisions/8d666d0ed7aa?raw)
