> ## 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.

# Sprays & Levels API — GET /v1/sprays endpoints

> Retrieve all Valorant sprays or a single spray by UUID. Includes spray levels with animated PNG and GIF variants and display icons.

Sprays are cosmetics that players place on surfaces throughout Valorant's maps — on walls, floors, and objectives. Some sprays have multiple levels that unlock animated variants (PNG or GIF). The Sprays API lets you retrieve the complete catalog or query individual sprays and their levels directly by UUID.

<Note>
  All requests must include a `User-Agent` header in the format `AppName/Version (+URL)`. Requests without it will be rejected.
</Note>

***

## GET /v1/sprays

Returns a list of all sprays.

<Tip>
  Use the `language` query parameter to receive localized `displayName` values for each spray.
</Tip>

### Query parameters

<ParamField query="language" type="string" default="en-US">
  BCP 47 locale string for response localization. Example: `it-IT`, `ru-RU`, `tr-TR`.
</ParamField>

### Example request

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url "https://astra.teamfortuna.xyz/v1/sprays?language=en-US" \
    --header "User-Agent: MyApp/1.0 (+https://example.com)"
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "status": 200,
  "data": [
    {
      "uuid": "abdd1060-4133-c259-eb11-b19512a1853a",
      "displayName": "¡Barrida! Spray",
      "category": null,
      "themeUuid": null,
      "isNullSpray": false,
      "hideIfNotOwned": true,
      "displayIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/displayicon.png",
      "fullIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/fullicon.png",
      "fullTransparentIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/fulltransparenticon.png",
      "animationPng": null,
      "animationGif": null,
      "assetPath": "ShooterGame/Content/Personalization/Sprays/Masters1_2026Shotcalls/Spray_Masters1_2026Shotcalls_PrimaryAsset",
      "levels": [
        {
          "uuid": "a8845bf6-4952-52b3-99ad-b28865f7bea4",
          "sprayLevel": 1,
          "displayName": "¡Barrida! Spray",
          "displayIcon": null,
          "assetPath": "ShooterGame/Content/Personalization/Sprays/Masters1_2026Shotcalls/Spray_Masters1_2026Shotcalls_Level1_PrimaryAsset"
        }
      ]
    }
  ]
}
```

### Response fields

<ResponseField name="status" type="number" required>
  HTTP status code of the response.
</ResponseField>

<ResponseField name="data" type="object[]" required>
  Array of spray objects.

  <Expandable title="spray properties">
    <ResponseField name="uuid" type="string" required>
      Unique identifier for the spray.
    </ResponseField>

    <ResponseField name="displayName" type="string" required>
      Localized display name of the spray.
    </ResponseField>

    <ResponseField name="category" type="string">
      Internal category string (e.g. `EAresSprayCategory::Humanoid`). May be `null`.
    </ResponseField>

    <ResponseField name="themeUuid" type="string">
      UUID of the cosmetic theme this spray belongs to. May be `null`.
    </ResponseField>

    <ResponseField name="isNullSpray" type="boolean" required>
      Whether this is a placeholder spray with no visual content.
    </ResponseField>

    <ResponseField name="hideIfNotOwned" type="boolean" required>
      Whether the spray is hidden in the store if the player does not own it.
    </ResponseField>

    <ResponseField name="displayIcon" type="string" required>
      URL of the spray's standard display icon.
    </ResponseField>

    <ResponseField name="fullIcon" type="string" required>
      URL of the full-size icon with background.
    </ResponseField>

    <ResponseField name="fullTransparentIcon" type="string">
      URL of the full-size icon without background. May be `null`.
    </ResponseField>

    <ResponseField name="animationPng" type="string">
      URL of the animated PNG for sprays with animation. `null` if the spray is static.
    </ResponseField>

    <ResponseField name="animationGif" type="string">
      URL of the animated GIF for sprays with animation. `null` if the spray is static.
    </ResponseField>

    <ResponseField name="assetPath" type="string" required>
      Internal Unreal Engine asset path.
    </ResponseField>

    <ResponseField name="levels" type="object[]" required>
      Array of level objects representing the spray's unlock tiers.

      <Expandable title="level properties">
        <ResponseField name="uuid" type="string" required>
          Unique identifier for this level.
        </ResponseField>

        <ResponseField name="sprayLevel" type="number" required>
          Numeric tier of this level (e.g. `1`).
        </ResponseField>

        <ResponseField name="displayName" type="string" required>
          Localized name for this level.
        </ResponseField>

        <ResponseField name="displayIcon" type="string">
          URL of the level's display icon. May be `null`.
        </ResponseField>

        <ResponseField name="assetPath" type="string" required>
          Internal Unreal Engine asset path for this level.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

***

## GET /v1/sprays/\{uuid}

Returns a single spray by its UUID.

### Path parameters

<ParamField path="uuid" type="string" required>
  The UUID of the spray to retrieve.
</ParamField>

### Query parameters

<ParamField query="language" type="string" default="en-US">
  BCP 47 locale string for response localization.
</ParamField>

### Example request

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url "https://astra.teamfortuna.xyz/v1/sprays/abdd1060-4133-c259-eb11-b19512a1853a?language=en-US" \
    --header "User-Agent: MyApp/1.0 (+https://example.com)"
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "status": 200,
  "data": {
    "uuid": "abdd1060-4133-c259-eb11-b19512a1853a",
    "displayName": "¡Barrida! Spray",
    "category": null,
    "themeUuid": null,
    "isNullSpray": false,
    "hideIfNotOwned": true,
    "displayIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/displayicon.png",
    "fullIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/fullicon.png",
    "fullTransparentIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/fulltransparenticon.png",
    "animationPng": null,
    "animationGif": null,
    "assetPath": "ShooterGame/Content/Personalization/Sprays/Masters1_2026Shotcalls/Spray_Masters1_2026Shotcalls_PrimaryAsset",
    "levels": [
      {
        "uuid": "a8845bf6-4952-52b3-99ad-b28865f7bea4",
        "sprayLevel": 1,
        "displayName": "¡Barrida! Spray",
        "displayIcon": null,
        "assetPath": "ShooterGame/Content/Personalization/Sprays/Masters1_2026Shotcalls/Spray_Masters1_2026Shotcalls_Level1_PrimaryAsset"
      }
    ]
  }
}
```

***

## GET /v1/sprays/levels

Returns a flat list of all spray levels across every spray. Use this endpoint when you need to look up a level directly by its UUID without knowing which parent spray it belongs to.

### Query parameters

<ParamField query="language" type="string" default="en-US">
  BCP 47 locale string for response localization.
</ParamField>

### Example request

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url "https://astra.teamfortuna.xyz/v1/sprays/levels?language=en-US" \
    --header "User-Agent: MyApp/1.0 (+https://example.com)"
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "status": 200,
  "data": [
    {
      "uuid": "a8845bf6-4952-52b3-99ad-b28865f7bea4",
      "sprayLevel": 1,
      "displayName": "¡Barrida! Spray",
      "displayIcon": null,
      "assetPath": "ShooterGame/Content/Personalization/Sprays/Masters1_2026Shotcalls/Spray_Masters1_2026Shotcalls_Level1_PrimaryAsset"
    }
  ]
}
```

### Response fields

<ResponseField name="status" type="number" required>
  HTTP status code of the response.
</ResponseField>

<ResponseField name="data" type="object[]" required>
  Array of spray level objects.

  <Expandable title="level properties">
    <ResponseField name="uuid" type="string" required>
      Unique identifier for this spray level.
    </ResponseField>

    <ResponseField name="sprayLevel" type="number" required>
      Numeric tier of this level.
    </ResponseField>

    <ResponseField name="displayName" type="string" required>
      Localized name for this level.
    </ResponseField>

    <ResponseField name="displayIcon" type="string">
      URL of the level's display icon. May be `null`.
    </ResponseField>

    <ResponseField name="assetPath" type="string" required>
      Internal Unreal Engine asset path.
    </ResponseField>
  </Expandable>
</ResponseField>

***

## GET /v1/sprays/levels/\{uuid}

Returns a single spray level by its UUID.

### Path parameters

<ParamField path="uuid" type="string" required>
  The UUID of the spray level to retrieve.
</ParamField>

### Query parameters

<ParamField query="language" type="string" default="en-US">
  BCP 47 locale string for response localization.
</ParamField>

### Example request

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url "https://astra.teamfortuna.xyz/v1/sprays/abdd1060-4133-c259-eb11-b19512a1853a?language=en-US" \
    --header "User-Agent: MyApp/1.0 (+https://example.com)"
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "st{
  "status": 200,
  "data": {
    "uuid": "abdd1060-4133-c259-eb11-b19512a1853a",
    "displayName": "¡Barrida! Spray",
    "category": null,
    "themeUuid": null,
    "isNullSpray": false,
    "hideIfNotOwned": true,
    "displayIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/displayicon.png",
    "fullIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/fullicon.png",
    "fullTransparentIcon": "https://valmedia.teamfortuna.xyz/sprays/abdd1060-4133-c259-eb11-b19512a1853a/fulltransparenticon.png",
    "animationPng": null,
    "animationGif": null,
    "assetPath": "ShooterGame/Content/Personalization/Sprays/Masters1_2026Shotcalls/Spray_Masters1_2026Shotcalls_PrimaryAsset",
    "levels": [
      {
        "uuid": "a8845bf6-4952-52b3-99ad-b28865f7bea4",
        "sprayLevel": 1,
        "displayName": "¡Barrida! Spray",
        "displayIcon": null,
        "assetPath": "ShooterGame/Content/Personalization/Sprays/Masters1_2026Shotcalls/Spray_Masters1_2026Shotcalls_Level1_PrimaryAsset"
      }
    ]
  }
}
```
