> ## Documentation Index
> Fetch the complete documentation index at: https://docs.teamfortuna.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/diff/latest — Latest pipeline diff

> Returns the item-level diff between the current Valorant version and the immediately previous one, as written by the pipeline at publish time.

The `/v1/diff/latest` endpoint serves the diff that the pipeline wrote into the current version directory at publish time. It describes which items were added, removed, or changed across every category between the previous version and the version currently active behind the `current` symlink.

Use this endpoint to keep a downstream cache in sync without re-fetching every category after each Valorant patch.

## Endpoint

```
GET https://astra.teamfortuna.xyz/v1/diff/latest
```

## Request

The `User-Agent` header is required for all requests to the Astra API. Use the format `AppName/Version (+URL)`.

```bash theme={null}
curl https://astra.teamfortuna.xyz/v1/diff/latest \
  -H "User-Agent: MyApp/1.0 (+https://example.com)"
```

## Response fields

<ResponseField name="status" type="number">
  HTTP status code of the response (e.g. `200`).
</ResponseField>

<ResponseField name="data" type="object">
  <Expandable title="properties" defaultOpen>
    <ResponseField name="fromVersion" type="string">
      Manifest ID of the previous version the diff is computed from.
    </ResponseField>

    <ResponseField name="toVersion" type="string">
      Manifest ID of the current version the diff applies to.
    </ResponseField>

    <ResponseField name="generatedAt" type="string">
      ISO 8601 timestamp of when the pipeline generated the diff.
    </ResponseField>

    <ResponseField name="categories" type="object">
      Map of category name (`agents`, `weapons`, etc.) to a category diff with `added`, `removed`, and `changed` arrays. `added` and `removed` contain UUIDs; `changed` contains objects with the `uuid` and the sorted list of top-level `fields` whose serialized value differs.
    </ResponseField>

    <ResponseField name="summary" type="object">
      <Expandable title="properties">
        <ResponseField name="totalAdded" type="number">
          Total number of added items across all categories.
        </ResponseField>

        <ResponseField name="totalRemoved" type="number">
          Total number of removed items across all categories.
        </ResponseField>

        <ResponseField name="totalChanged" type="number">
          Total number of changed items across all categories.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

## Response

```json theme={null}
{
  "status": 200,
  "data": {
    "fromVersion": "VAL_12.06",
    "toVersion": "VAL_12.07",
    "generatedAt": "2026-04-22T14:25:22.602Z",
    "categories": {
      "agents": {
        "added": ["c2b5d2c5-3a59-4f7c-9e1f-0a1b2c3d4e5f"],
        "removed": [],
        "changed": [
          {
            "uuid": "8e9aa2e9-0e34-4d59-b2b3-9a8a7b6c5d4e",
            "fields": ["abilities", "displayIcon"]
          }
        ]
      },
      "weapons": {
        "added": [],
        "removed": [],
        "changed": []
      }
    },
    "summary": {
      "totalAdded": 1,
      "totalRemoved": 0,
      "totalChanged": 1
    }
  }
}
```

## Errors

<ResponseField name="404" type="status">
  Returned when the active version directory has no diff file yet. This happens on a first-ever pipeline run, or when retention removed the previous version before a diff could be emitted.
</ResponseField>

<ResponseField name="500" type="status">
  Returned when a diff file exists on disk but is unreadable or corrupt. Treat this as an operations alert.
</ResponseField>

<Tip>
  Pair this endpoint with [`/v1/version`](/api-reference/version) to detect new patches: when `manifestId` changes, fetch `/v1/diff/latest` and apply the per-category `added`, `removed`, and `changed` lists to your cache.
</Tip>
