> For the complete documentation index, see [llms.txt](https://entropys-organization.gitbook.io/alerts.boo/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://entropys-organization.gitbook.io/alerts.boo/rest-api.md).

# REST API

### Directory

> You can also experiment with the code in our interactive [Codepen Collection](https://codepen.io/collection/QWYreW?grid_type=list)
>
> We recommend using [JSON Hero](https://jsonhero.io/) to view the sample objects

<table><thead><tr><th width="184">Command</th><th>API Route</th></tr></thead><tbody><tr><td><a href="#authentication">Authentication</a></td><td>Visit on Web - https://app.alerts.boo/settings</td></tr><tr><td><a href="#alert-payload">Alert Payload</a></td><td>Sent to your webhook</td></tr><tr><td><a href="#types-schema">Types Schema</a></td><td>Types reference for objects - Watcher, Log, User</td></tr><tr><td><a href="#get-watcher">Get Watcher</a></td><td>GET /watchers/:watcherID</td></tr><tr><td><a href="#list-watchers">List Watchers</a></td><td>POST /watchers/list</td></tr><tr><td><a href="#create-watcher">Create Watcher</a></td><td>POST /watchers/create</td></tr><tr><td><a href="#update-watcher">Update Watcher</a></td><td>POST /watchers/:watcherID/update</td></tr><tr><td><a href="#list-logs">List Logs</a></td><td>POST /watchers/:watcherID/logs/list</td></tr><tr><td><a href="#get-log">Get Log</a></td><td>GET /logs/:logID</td></tr><tr><td><a href="#my-profile">My Profile</a></td><td>GET /users/:userID</td></tr><tr><td><a href="#rotate-api-key">Rotate API Key</a></td><td>POST /users/:userID/rotate-token</td></tr><tr><td><a href="#buy-credits">Buy Credits</a></td><td>POST /billing/:userID/topup-credits</td></tr></tbody></table>

{% hint style="warning" %}
Get your API Key in the [Settings Page ](https://app.alerts.boo/settings)

Be careful with your API Key! Anyone who has it can control your account. If your API key has been leaked, immediately [rotate it.](#rotate-api-key)
{% endhint %}

### Authentication

{% hint style="info" %}
All commands in the REST API require authentication with an API Key.\
Copy your API Key from the web app settings page. Try the doc examples on your own data.

\
Get your API Key 👉 <https://app.alerts.boo/settings>

\
Be careful with your API Key! Anyone who has it can control your account. If your API key has been leaked, immediately [rotate it.](#rotate-api-key)
{% endhint %}

<details>

<summary>Browser Screenshot (Find your API Key)</summary>

<https://app.alerts.boo/settings>

<img src="/files/cS9YwnvMhmdxkbPwwHhI" alt="" data-size="original">

</details>

```javascript
// Include your API key in every REST API command
// Put it in the headers { "api-key": "YOUR_API_KEY" } 
const API_KEY = 'YOUR_API_KEY'

fetch('https://api.alerts.boo/v1/ping', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY
  },
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

### Alert Payload

{% hint style="info" %}
This is what gets sent to your webhook. Preview what is looks like so you can add it to your workflow or app.
{% endhint %}

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

> [👉 View Sample Object](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/payloadInstagram.json)

```typescript
interface AlertPayload_Instagram {
  id: string // AlertID, for reference only
  logID: string // LogID, to lookup this exact payload
  watcherID: string // WatcherID, to know which watcher it came from
  createdAtUnix: number
  platform: string // "Instagram"
  type: string // "instagram_post" | "instagram_story"
  raw: any // the full original data from source
  url: string // the url to the content. eg instagram post
  data: {
    id: string // AlertID, for reference only
    slug: string // the shortcode or ID assigned by the source, eg. Instagram content ID
    author: string // the username of the account from source. eg. Instagram username
    url: string // the url to the content. eg instagram post
    caption: string // the caption of the post, or main text body
    location: string // any tagged location
    medias: SimpleMedia[] // a list of media content
    timestamp: string // ISO8601 datetime
  }
}
interface SimpleMedia {
  type: string // 'image' | 'video'
  url: string // link to the image or video url
  thumbnail: string // image thumbnail url
}
```

{% endtab %}

{% tab title="Twitter" %}

> Coming soon
> {% endtab %}
> {% endtabs %}

### Types Schema

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

> 👉 View Sample Object

```typescript
// Type Definition
interface Watcher {
  id: string // WatcherID
  platform: 'Instagram' // more coming soon
  alias: string // nickname you choose
  slug: string // eg. instagram username "insidehistory"
  url: string // link to the resource. eg. https://instagram.com/insidehistory
  createdAt: string // ISO8601 Date
  filterPrompt: string // Your Ai filter criteria
  status: string // 'Active' | 'Paused' | 'Awaiting' | 'Pending' | 'Insufficient Funds' | 'Problem'
  webhookUrl: string // your webhook to recieve alerts
  note: string // your private internal note
  autoExpireMs: number // pause watcher after inactivity
  expiresAt: string // ISO8601 Date
  userID: string // UserID
  customData?: {
    uid?: string // you can decide this
    data?: string // you can put whatever in here
  }
  lastReceivedAt?: string // ISO8601 Date
}
```

{% endtab %}

{% tab title="Log" %}

> 👉 View Sample Object

```typescript
// Type Definition
interface Log {
  id: string // LogID
  watcherID: string // WatcherID
  userID: string // UserID
  prompt: string // the Ai filter criteria that was used
  passPromptFilter: boolean // did it pass Ai filter criteria
  status: string // 'Finished' | 'Skipped' | 'Pending'
  platform: string // 'Instagram' | 'Twitter'
  type: string // 'instagram_story' | 'instagram_post'
  alias: string // quick title to summarize
  memo: string // text details
  createdAt: string // ISO8601 Date
  url: string // link to the post on Instagram, etc
  fullObjectUrl: string // link to the full Instagram post data
  creditsConsumed: number // cost of log
}
```

{% endtab %}

{% tab title="User" %}

> 👉 View Sample Object

```typescript
// Type Definition
interface User {
  id: string // UserID
  alias: string // nickname
  email: string // email used to register
  apiToken: string // api key, keep this private
  createdAt: string // ISO8601 Date
  walletCreditBalance: number // credits in your wallet
  billingPlanLabel: string // your pricing plan
  paymentCard?: {
    last4: string // last 4 numbers of your credit card on file
  }
}
```

{% endtab %}
{% endtabs %}

### Get Watcher

{% hint style="info" %}
**GET /watchers/:watcherID**\
\
View a Watcher in detail, excluding its logs. If you want logs, use [List Logs.](#list-logs)
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const WATCHER_ID = 'YOUR_WATCHER_ID'

fetch(`https://api.alerts.boo/v1/watchers/${WATCHER_ID}`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY
  },
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/getWatcher.json)

```typescript
// Type Definition
interface ResponseBody {
  watcher: Watcher // Scroll up for Type Schema
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/live/poYmZEa>" %}
{% endtab %}
{% endtabs %}

***

### List Watchers

{% hint style="info" %}
**POST /watchers/list**\
\
List all the watchers owned by you. Filter by attributes and paginate through results. Can also be used to search by exact username.
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const query = {
  status: "Active",
  platform: "Instagram",
  limit: 5,
  // slug: "instagramusername",
  // cursor: "id-of-prev-last-watcher",
  // customDataUID: "your-custom-lookup-id"
}

fetch(`https://api.alerts.boo/v1/watchers/list`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY
  },
  body: JSON.stringify(query)
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/listWatchers.json)

```typescript
// Type Definition
interface ResponseBody {
  watchers: Watcher[], // Scroll up for Type Schema
  nextCursor: string, // WatcherID
  count: number
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/GReaXOx>" %}
{% endtab %}
{% endtabs %}

<table><thead><tr><th width="168">Argument</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td>status</td><td>enum</td><td>Optional. Filter by watcher status. Options are <code>Active</code> , <code>Awaiting</code>, <code>Pending</code>, <code>Paused</code>, <code>Problem</code>, <code>Insufficient Funds</code> . Leave blank for all.</td></tr><tr><td>platform</td><td>enum</td><td>Optional. Filter by platform. Options are <code>Instagram</code> or <code>Twitter</code></td></tr><tr><td>slug</td><td>string</td><td>Optional. Search by exact username match, case insensitive.</td></tr><tr><td>limit</td><td>number</td><td>Optional. Limit the search results. Default is 20, max is 100</td></tr><tr><td>cursor</td><td>WatcherID</td><td>Optional Pagination. The string ID of the last Watcher of your previous query.</td></tr><tr><td>customDataUID</td><td>string</td><td>Optional. A string field indexed for you to use as a custom searchable ID (eg. your users). Max 256 chars.</td></tr></tbody></table>

***

### Create Watcher

{% hint style="info" %}
**POST /watchers/create**\
\
Create a new Watcher with advanced features such as custom metadata & auto-expire after inactivity.&#x20;
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const payload = {
    url: "https://instagram.com/insidehistory",
    webhookUrl: "https://yourapp.com/your-webhook",
    filterPrompt: "Alert me if its a post about the Roman Empire",
    note: "A private note for your team",
    alias: "A friendly title for your team",
    autoExpireMs: 1000*60*60*24*30, // auto-pause after 30 days inactivity
    customData: {
        uid: "your-custom-unique-id",
        data: JSON.stringify({ hello: 'world' })
    }
}

fetch(`https://api.alerts.boo/v1/watchers/create`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY
  },
  body: JSON.stringify(payload)
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/createWatcher.json)

```typescript
// Type Definition
interface ResponseBody {
  watcher: Watcher, // Scroll up for Type Schema
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/oNVRayQ>" %}
{% endtab %}
{% endtabs %}

<table><thead><tr><th width="185">Argument</th><th width="91">Type</th><th>Description</th></tr></thead><tbody><tr><td>url</td><td>string</td><td>Required. The url of your watchers source. For example, a pages' Instagram profile URL.</td></tr><tr><td>webhookUrl</td><td>string</td><td>Optional. The url of your webhook that will recieve alerts. Use empty string to remove webhook.</td></tr><tr><td>filterPrompt</td><td>string</td><td>Optional. The prompt for the Ai use as filter criteria. Determines if you get alerted. Max 2000 chars. Use empty string to remove filter criteria.</td></tr><tr><td>alias</td><td>string</td><td>Optional. A human friendly name to identify your watcher. Max 256 chars.</td></tr><tr><td>autoExpireMs</td><td>number</td><td>Optional. Watchers can auto-expire if it hasn't seen any activity in milliseconds. Defaults to 3 months. Min 1 hour, Max 10 years.</td></tr><tr><td>note</td><td>string</td><td>Optional. A private note only you can see. Max 10k chars.</td></tr><tr><td>customData.uid</td><td>string</td><td>Optional. A string field indexed for you to use as a custom searchable ID (eg. your users). Max 256 chars.</td></tr><tr><td>customData.data</td><td>string</td><td>Optional. A string serialized object for any additional data you want to store. Max 100kb or 100k chars. </td></tr></tbody></table>

***

***

### Update Watcher

{% hint style="info" %}
**POST /watchers/:watcherID/update**\
\
Update a Watcher with advanced features such as custom metadata & auto-expire after inactivity.&#x20;
{% endhint %}

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

<pre class="language-javascript"><code class="lang-javascript">// copy paste this to your browser console to run
<strong>const API_KEY = 'YOUR_API_KEY'
</strong>const WATCHER_ID = 'WATCHER_ID'
const payload = {
  status: "Paused",
  webhookUrl: "https://yourapp.com/other-webhook",
  filterPrompt: "Alert me if its a post about collapse of the Roman Empire",
  note: "Still a private note",
  alias: "A friendly title for your team",
  autoExpireMs: 1000*60*60*24*30, // auto-pause after 30 days inactivity
  customData: {
    uid: "your-custom-unique-id",
    data: JSON.stringify({ hello: 'world' })
  }
}

fetch(`https://api.alerts.boo/v1/watchers/${WATCHER_ID}/update`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY
  },
  body: JSON.stringify(payload)
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
</code></pre>

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/updateWatcher.json)

```typescript
// Type Definition
interface ResponseBody {
  trigger: Trigger, // Scroll up for Type Schema
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/VwROENO>" %}
{% endtab %}
{% endtabs %}

<table><thead><tr><th width="186">Argument</th><th width="91">Type</th><th>Description</th></tr></thead><tbody><tr><td>status</td><td>enum</td><td>Optional. Set watcher status to <code>Active</code> or <code>Paused</code> or <code>Inactive</code> (Be careful with <code>Inactive</code> as it is equal to a deletion and cannot be undone).</td></tr><tr><td>webhookUrl</td><td>string</td><td>Optional. The url of your webhook that will recieve alerts. Use empty string to remove webhook.</td></tr><tr><td>filterPrompt</td><td>string</td><td>Optional. The prompt for the Ai use as filter criteria. Determines if you get alerted. Max 2000 chars. Use empty string to remove filter criteria.</td></tr><tr><td>note</td><td>string</td><td>Optional. A private note only you can see. Max 10k chars.</td></tr><tr><td>alias</td><td>string</td><td>Optional. A human friendly name to identify your watcher. Max 256 chars.</td></tr><tr><td>autoExpireMs</td><td>number</td><td>Optional. Watchers can auto-expire if it hasn't seen any activity in milliseconds. Defaults to 3 months. Min 1 hour, Max 10 years.</td></tr><tr><td>customData.uid</td><td>string</td><td>Optional. A string field indexed for you to use as a custom searchable ID (eg. your users). Max 256 chars.</td></tr><tr><td>customData.data</td><td>string</td><td>Optional. A string serialized object for any additional data you want to store. Max 100kb or 100k chars. </td></tr></tbody></table>

***

### List Logs

{% hint style="info" %}
**POST /watchers/:watcherID/logs/list**\
\
List the most recents logs from a Watcher. Paginate through logs by most recent first.
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const WATCHER_ID = 'WATCHER_ID'
const query = {
  limit: 50, // always returned newest first
  cursor: 'prev-watcher-id'
}

fetch(`https://api.alerts.boo/v1/watchers/${WATCHER_ID}/logs/list`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY 
  }
  body: JSON.stringify(query)
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/listLogs.json)

```typescript
// Type Definition
interface ResponseBody {
  logs: Log[], // Scroll up for Type Schema
  nextCursor: string, // LogID
  count: number
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/LYaoMLx>" %}
{% endtab %}
{% endtabs %}

<table><thead><tr><th width="117">Argument</th><th width="95">Type</th><th>Description</th></tr></thead><tbody><tr><td>limit</td><td>number</td><td>Optional. Limit the search results. Default is 20, max is 100</td></tr><tr><td>cursor</td><td>LogID</td><td>Optional Pagination. The string ID of the last Log of your previous query.</td></tr></tbody></table>

***

### Get Log

{% hint style="info" %}
**GET /logs/:logID**\
\
Get details of a specific log.
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const logID = "YOUR_LOG_ID"

fetch(`https://api.alerts.boo/v1/logs/${logID}`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY 
  }
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/getLog.json)

```typescript
// Type Definition
interface ResponseBody {
  log: Log, // Scroll up for Type Schema
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/WNmBYwO>" %}
{% endtab %}
{% endtabs %}

***

### My Profile

{% hint style="info" %}
**GET /users/:userID**\
\
Get user details of your account.
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const userID = "YOUR_USER_ID"

fetch(`https://api.alerts.boo/v1/users/${userID}`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY 
  }
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/myProfile.json)

```typescript
// Type Definition
interface ResponseBody {
  user: User, // Scroll up for Type Schema
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/wvObQyq>" %}
{% endtab %}
{% endtabs %}

***

### Rotate API Key

{% hint style="info" %}
**POST /users/:userID/rotate-token**\
\
Rotate your accounts' API key and return the new key in response. Be careful as old keys will stop working.
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const userID = "YOUR_USER_ID"

fetch(`https://api.alerts.boo/v1/users/${userID}/rotate-token`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY
  }
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));Request
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/rotateAPIKey.json)

```typescript
// Type Definition
interface ResponseBody {
  user: User, // Scroll up for Type Schema
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/rNRgQQR>" %}
{% endtab %}
{% endtabs %}

***

### Buy Credits

{% hint style="info" %}
**POST /billing/:userID/topup-credits**\
\
Buy additional credits to pay for your usage. You will first need to setup billing by entering your credit card in the webapp settings page 👉 <https://app.alerts.boo/settings>\
\
Use this API route to programmatically buy more credits whenever you need. Your default credit card will be billed.
{% endhint %}

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

```javascript
// copy paste this to your browser console to run
const API_KEY = 'YOUR_API_KEY'
const userID = "YOUR_USER_ID"
const payload = {
  amount: 1000
}
 
fetch(`https://api.alerts.boo/v1/billing/${userID}/topup-credits`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'api-key': API_KEY
  },
  body: JSON.stringify(payload)
})
  .then(response => response.json())
  .then(data => console.log(data));
  .catch(error => console.log(error));
```

{% endtab %}

{% tab title="Response" %}

> [👉 View Sample Response](https://raw.githubusercontent.com/0xterran/samples-alertsboo/main/samples/buyCredits.json)

```typescript
// Type Definition
interface ResponseBody {
  txID: string, // purchase reciept ID
  creditsReceived: number,
  pricePaid: number, // in USD eg. 5.00 = five dollars usd
  currency: "USD", // always the same USD
  cardCharged: string // last 4 digits of credit card on file
}
```

{% endtab %}

{% tab title="Try It" %}

> Click "Run Pen" and "JS" button for the interactive code \
> Recommended to open in new tab (click Edit on Codepen)

{% embed url="<https://codepen.io/entropyinternet/full/YzgbdzN>" %}
{% endtab %}
{% endtabs %}

<table><thead><tr><th width="137">Argument</th><th width="99">Type</th><th>Description</th></tr></thead><tbody><tr><td>amount</td><td>number</td><td>Required. The amount of credits you would like to buy as a one-time purchase. Min 20 credits, Max 40k credits.</td></tr></tbody></table>

***

### Rate Limits

There are 3 rate limits for the REST API. Contact us if you need more.

<table><thead><tr><th width="211">Rate</th><th>Routes</th></tr></thead><tbody><tr><td>1 per 3 seconds</td><td>POST /billing/:userID/topup-credits<br>POST /users/:userID/rotate-token</td></tr><tr><td>3 per 3 seconds</td><td>POST /watchers/list<br>POST /watchers/:watcherID/logs/list</td></tr><tr><td>10 per 3 seconds</td><td>Everything Else</td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://entropys-organization.gitbook.io/alerts.boo/rest-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
