---
title: "Fetch up to 20 canonical projects from a structured request using one corpus snapshot."
method: POST
path: "/api/projects"
---

# Fetch up to 20 canonical projects from a structured request using one corpus snapshot.

`POST /api/projects`

## Request

- Base URL: `https://git.top`
- URL: `https://git.top/api/projects`
- Auth: none declared

## Query parameters

- `require_d1` string

## Request body

- ProjectsBatchRequest
  - `project_ids` string[], required
  - `profile` 'compact' | 'decision' | 'evidence'

## Response `200`

Batch project response

- ProjectsBatchResponse
  - `profile` 'compact' | 'decision' | 'evidence', required
  - `requested_count` integer, required
  - `found_count` integer, required
  - `projects` object[], required
  - `missing` string[], required
  - `metadata` Metadata, required: Common provenance envelope for agent-facing responses. Agents should require source=d1 for high-confidence production claims and disclose seed fallback.
    - `source` 'd1' | 'seed'
    - `reason` string
    - `project_count` integer
    - `generated_at` string, date-time
    - `snapshot_id` string: Stable identity for the corpus snapshot used by this response.
    - `latest_synced_at` string, date-time, nullable
    - `schema_version` 'git-top.knowledge.v1'
    - `loaded_project_limit` integer: Maximum D1 knowledge or search-candidate rows loaded into the bounded ranking set when present.
    - `truncated` boolean: Whether the D1-backed ranking or candidate set reached its limit and may omit additional matching rows.
    - `candidate_retrieval` 'd1_first': Search-only marker indicating that deterministic filters and broad query matching ran in D1 before TypeScript ranking.
    - `candidate_count` integer: Number of D1 search candidates passed to the authoritative TypeScript filter and ranking stage.
    - `candidate_limit` integer: Maximum number of D1 search candidates passed to the ranking stage.
    - `warnings` string[]: Fallback, count, freshness, or trust caveats that agents should account for before citing results.

## Other responses

- `400`: Invalid batch request

---

[API](https://skmtc.dev/git/apis/git-top-agent-api.md) · [All operations](https://skmtc.dev/git/apis/git-top-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/git/apis/git-top-agent-api/revisions/c9ebf661ef6d?raw)
