> For the complete documentation index, see [llms.txt](https://docs.hydromancer.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hydromancer.xyz/readme/rest-api/metadata/perpannotation.md).

# perpAnnotation

Returns the human-readable annotation (category, description, and keywords) for a single perpetual asset.

<table><thead><tr><th width="115">Field</th><th width="177">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>type</code></td><td>string</td><td>Must be <code>"perpAnnotation"</code></td></tr><tr><td><code>coin</code></td><td>string</td><td>Perp asset name, including the DEX prefix for builder-deployed perps (e.g. <code>"xyz:TSLA"</code>). Required. Only perp assets are accepted — spot and outcome markets are rejected.</td></tr></tbody></table>

## Request

{% tabs %}
{% tab title="cURL" %}

```bash
curl -X POST https://api.hydromancer.xyz/info \
  -H "Authorization: Bearer $HYDROMANCER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "perpAnnotation",
    "coin": "xyz:TSLA"
  }'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import os
import json

response = requests.post(
    'https://api.hydromancer.xyz/info',
    json={
        'type': 'perpAnnotation',
        'coin': 'xyz:TSLA'
    },
    headers={
        'Authorization': f'Bearer {os.environ["HYDROMANCER_API_KEY"]}',
        'Content-Type': 'application/json'
    }
)
print(json.dumps(response.json(), indent=2))
```

{% endtab %}

{% tab title="Javascript" %}

```javascript
import axios from 'axios';

const response = await axios.post(
  'https://api.hydromancer.xyz/info',
  {
    type: 'perpAnnotation',
    coin: 'xyz:TSLA'
  },
  {
    headers: {
      'Authorization': `Bearer ${process.env.HYDROMANCER_API_KEY}`,
      'Content-Type': 'application/json'
    }
  }
);

console.log(JSON.stringify(response.data, null, 2));
```

{% endtab %}
{% endtabs %}

***

## Response Fields

Returns `null` if the asset has no annotation.

| Field         | Type   | Description                                                                        |
| ------------- | ------ | ---------------------------------------------------------------------------------- |
| `category`    | string | Asset category (e.g. `"stocks"`, `"crypto"`, `"commodities"`, `"indices"`, `"FX"`) |
| `description` | string | Human-readable description of the underlying asset                                 |
| `displayName` | string | Display name for the asset                                                         |
| `keywords`    | array? | Optional list of search keywords                                                   |

<details>

<summary>Response</summary>

```json
{
  "category": "stocks",
  "description": "TSLA tracks the value of 1 share of common stock in Tesla, Inc. Tesla designs and manufactures electric vehicles, battery energy storage systems, and solar products. The company is a global leader in EV production and autonomous driving technology.",
  "displayName": "TSLA",
  "keywords": ["tesla", "ev"]
}
```

</details>
