---
title: Signals (public)
product: Managed Agents
url: https://docs.digitalocean.com/reference/api/reference/signals/
---

> **For AI agents:** The documentation index is at [https://docs.digitalocean.com/llms.txt](https://docs.digitalocean.com/llms.txt). Markdown versions of pages use the same URL with `index.html.md` in place of the HTML page (for example, append `index.html.md` to the directory path instead of opening the HTML document).

# Signals (public)

[View full API reference](https://docs.digitalocean.com/reference/api/reference/index.html.md)

The DigitalOcean Signals API provides observability for environment conversations, such as Harness Runtime conversations and Serverless Inference chat completions, detecting behavioral signals such as user disengagement, execution failures, and satisfaction indicators.

Use the consent endpoints to manage whether signals collection is enabled — per environment for Harness Runtime (`source=agent`) and per team for Serverless Inference chat completions (`source=inference`) — the session endpoints to browse conversations and their detected signals, the export endpoints to create downloadable archives of signals data for offline analysis, and the deletion endpoints to permanently delete Signals conversations for an environment or Serverless Inference conversations for a whole team (aggregated Insights or metrics summaries may still remain).

Base URL `https://api.digitalocean.com`

## Endpoints

- **GET** [List All Consent Records](#signals_list_consents)
- **PUT** [Update Team-Level Consent](#signals_update_team_consent)
- **GET** [Retrieve Consent for an Environment](#signals_get_consent)
- **PUT** [Update Consent for an Environment](#signals_update_consent)
- **GET** [List Sessions for an Environment](#signals_list_agent_sessions)
- **GET** [List Dialogues for a Session](#signals_list_session_dialogues)
- **GET** [List Export Jobs](#signals_list_exports)
- **POST** [Create an Export Job](#signals_create_export)
- **GET** [Get Export Options](#signals_get_export_options)
- **GET** [Retrieve an Export Job](#signals_get_export)
- **GET** [Get Export Download URL](#signals_get_export_download)
- **GET** [List Data Deletion Jobs](#signals_list_deletions)
- **POST** [Create a Data Deletion Job](#signals_create_deletion)
- **GET** [Retrieve a Data Deletion Job](#signals_get_deletion)

## GET List All Consent Records

`/v1/consent`

**Authorizations: bearer_auth (1 scope)**

Http: Bearer

Required scopes: signals:read

### OAuth Authentication

In order to interact with the DigitalOcean API, you or your application must authenticate.

The DigitalOcean API handles this through OAuth, an open standard for authorization. OAuth allows you to delegate access to your account. Scopes can be used to grant full access, read-only access, or access to a specific set of endpoints.

You can generate an OAuth token by visiting the [Apps & API](https://cloud.digitalocean.com/account/api/tokens) section of the DigitalOcean control panel for your account.

An OAuth token functions as a complete authentication request. In effect, it acts as a substitute for a username and password pair.

Because of this, it is absolutely **essential** that you keep your OAuth tokens secure. In fact, upon generation, the web interface will only display each token a single time in order to prevent the token from being compromised.

DigitalOcean access tokens begin with an identifiable prefix in order to distinguish them from other similar tokens.

- `dop_v1_` for personal access tokens generated in the control panel
- `doo_v1_` for tokens generated by applications using [the OAuth flow](https://docs.digitalocean.com/reference/api/oauth-api/index.html.md)
- `dor_v1_` for OAuth refresh tokens

#### Scopes

Scopes act like permissions assigned to an API token. These permissions determine what actions the token can perform. You can create API tokens that grant read-only access, full access, or limited access to specific endpoints by using custom scopes.

Generally, scopes are designed to match HTTP verbs and common CRUD operations (Create, Read, Update, Delete).

| HTTP Verb | CRUD Operation | Scope |
|---|---|---|
| GET | Read | `<resource>:read` |
| POST | Create | `<resource>:create` |
| PUT/PATCH | Update | `<resource>:update` |
| DELETE | Delete | `<resource>:delete` |

For example, creating a new Droplet by making a `POST` request to the `/v2/droplets` endpoint requires the `droplet:create` scope while listing Droplets by making a `GET` request to the `/v2/droplets` endpoint requires the `droplet:read` scope.

Each endpoint below specifies which scope is required to access it when using custom scopes.

#### How to Authenticate with OAuth

In order to make an authenticated request, include a bearer-type `Authorization` header containing your OAuth token. All requests must be made over HTTPS.

#### Authenticate with a Bearer Authorization Header

```
curl -X $HTTP_METHOD -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/$OBJECT"
```

To list all signals consent records for your team, send a GET request to `/v1/consent`. Each record indicates whether signals collection is enabled for a source: per-environment records (`source: agent`) for Harness Runtime, and the team-level record (`source: inference`) for Serverless Inference chat completions.

Pass `?source=agent` or `?source=inference` to return only that source's records. When filtered, the response also echoes the `source`.

#### Query Parameters

`source` string, one of: agent, inference optional

Example: `inference`

Filter consent records by source. `agent` returns per-environment records (Harness Runtime); `inference` returns the team-level record for Serverless Inference chat completions. When omitted, records for all sources are returned.

##### Request: `/v1/consent`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/consent"
```

#### Responses

**200** A list of consent records.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`consents` array of object required

A list of consent records for the team. Includes per-environment records (`source: agent`) and, when set, the team-level inference record (`source: inference`).

**Show child properties**

`agent_id` string required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

The unique identifier of the environment. For Harness Runtime, this is the Environment Config ID. Empty for team-level records (`source: inference`), which are not tied to an environment.

`enabled` boolean required

Example: `true`

Whether signals collection is enabled for this source.

`environment_id` string optional

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

Same as agent_id when present. Dual-emitted during the rename; omitted when agent_id is empty.

`id` integer required

Example: `13`

The unique numeric identifier for the consent record.

`source` string, one of: agent, inference required

Example: `agent`

The source this consent applies to. `agent` is per-environment consent for Harness Runtime; `inference` is team-level consent for Serverless Inference chat completions.

`team_id` integer required

Example: `39449946`

The team ID that owns this consent record.

`updated_at` string (date-time) required

Example: `2026-08-10T10:09:25.738533Z`

A time value given in ISO8601 combined date and time format.

`source` string, one of: agent, inference optional

Example: `inference`

Echoes the `source` filter when the request was filtered by source. Omitted when the list was not filtered.

**400** There was an error parsing the request body.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "consents": [
    {
      "agent_id": "019fb3d2-8a56-72cc-8bf9-9d21510b2a99",
      "enabled": true,
      "environment_id": "019fb3d2-8a56-72cc-8bf9-9d21510b2a99",
      "id": 13,
      "source": "agent",
      "team_id": 39449946,
      "updated_at": "2026-08-10T10:09:25.738533Z"
    },
    {
      "agent_id": "019fb6b1-aad4-7d54-a74e-c5570d768148",
      "enabled": true,
      "environment_id": "019fb6b1-aad4-7d54-a74e-c5570d768148",
      "id": 6,
      "source": "agent",
      "team_id": 39449946,
      "updated_at": "2026-08-07T10:10:16.385447Z"
    },
    {
      "agent_id": "",
      "enabled": true,
      "id": 21,
      "source": "inference",
      "team_id": 39449946,
      "updated_at": "2026-10-09T11:41:27.104822Z"
    }
  ]
}
```

**400**

```json
{
  "id": "bad_request",
  "message": "error parsing request body",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## PUT Update Team-Level Consent

`/v1/consent`

To enable or disable signals collection for a source that is consented at the team level, send a PUT request to `/v1/consent?source=inference` with an `enabled` boolean in the request body. Currently the only team-level source is `inference`, which covers Serverless Inference chat completions made by your team.

To revoke consent, send the same request with `enabled` set to `false`. The `source` query parameter is required. Per-environment consent for Harness Runtime environments is managed with `PUT /v1/consent/{environment_id}` instead.

#### Query Parameters

`source` string, one of: inference required

Example: `inference`

The consent source to update. Only team-level sources are accepted on this endpoint; currently `inference` (Serverless Inference chat completions). Per-environment consent (`agent`) is managed with `PUT /v1/consent/{environment_id}` instead.

#### Request Body: `application/json`

`enabled` boolean required

Whether to enable signals collection for this source.

##### Request: `/v1/consent`

### Payload

Content type `application/json`

```json
{
  "enabled": true
}
```

### cURL

```bash
curl -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"enabled":true}' \
  "https://api.digitalocean.com/v1/consent?source=inference"
```

#### Responses

**200** The team-level consent record was updated successfully.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`consent` object required

A consent record indicating whether signals collection is enabled for a source. Records with `source: agent` apply to one environment; the record with `source: inference` applies to the whole team.

**Show child properties**

`agent_id` string required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

The unique identifier of the environment. For Harness Runtime, this is the Environment Config ID. Empty for team-level records (`source: inference`), which are not tied to an environment.

`enabled` boolean required

Example: `true`

Whether signals collection is enabled for this source.

`environment_id` string optional

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

Same as agent_id when present. Dual-emitted during the rename; omitted when agent_id is empty.

`id` integer required

Example: `13`

The unique numeric identifier for the consent record.

`source` string, one of: agent, inference required

Example: `agent`

The source this consent applies to. `agent` is per-environment consent for Harness Runtime; `inference` is team-level consent for Serverless Inference chat completions.

`team_id` integer required

Example: `39449946`

The team ID that owns this consent record.

`updated_at` string (date-time) required

Example: `2026-08-10T10:09:25.738533Z`

A time value given in ISO8601 combined date and time format.

**400** There was an error parsing the request body.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "consent": {
    "agent_id": "",
    "enabled": true,
    "id": 21,
    "source": "inference",
    "team_id": 39449946,
    "updated_at": "2026-10-09T11:41:27.104822Z"
  }
}
```

**400**

```json
{
  "id": "bad_request",
  "message": "error parsing request body",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET Retrieve Consent for an Environment

`/v1/consent/{environment_id}`

To retrieve the consent record for a specific environment, send a GET request to `/v1/consent/{environment_id}`. The response includes an `enabled` field indicating whether signals collection is on for this environment.

This endpoint only serves per-environment (`source: agent`) records. Team-level inference consent is read from `GET /v1/consent?source=inference`.

#### Path Parameters

`environment_id` string (uuid) required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

A unique identifier for an environment. For Harness Runtime, this is the Environment Config ID. Formerly named agent_id.

##### Request: `/v1/consent/{environment_id}`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/consent/019fb3d2-8a56-72cc-8bf9-9d21510b2a99"
```

#### Responses

**200** A single environment consent record.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`agent_id` string (uuid) required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

The unique identifier of the environment. For Harness Runtime, this is the Environment Config ID.

`enabled` boolean required

Example: `true`

Whether signals collection is enabled for this environment.

`environment_id` string (uuid) required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

Same as agent_id. Dual-emitted during the rename.

`id` integer optional

Example: `13`

The unique numeric identifier for the consent record.

`source` string, one of: agent required

Example: `agent`

The source this consent applies to. Always `agent` for per-environment records returned by this endpoint.

`team_id` integer required

Example: `39449946`

The team ID that owns this consent record.

`updated_at` string (date-time) optional

Example: `2026-08-10T10:09:25.738533Z`

A time value given in ISO8601 combined date and time format.

**400** There was an error parsing the request body.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "agent_id": "019fb3d2-8a56-72cc-8bf9-9d21510b2a99",
  "enabled": true,
  "environment_id": "019fb3d2-8a56-72cc-8bf9-9d21510b2a99",
  "id": 13,
  "source": "agent",
  "team_id": 39449946,
  "updated_at": "2026-08-10T10:09:25.738533Z"
}
```

**400**

```json
{
  "id": "bad_request",
  "message": "error parsing request body",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## PUT Update Consent for an Environment

`/v1/consent/{environment_id}`

To enable or disable signals collection for a specific environment, send a PUT request to `/v1/consent/{environment_id}` with an `enabled` boolean in the request body.

This endpoint only manages per-environment (`source: agent`) consent. To manage team-level consent for Serverless Inference, use `PUT /v1/consent?source=inference` instead.

#### Path Parameters

`environment_id` string (uuid) required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

A unique identifier for an environment. For Harness Runtime, this is the Environment Config ID. Formerly named agent_id.

#### Request Body: `application/json`

`enabled` boolean required

Whether to enable signals collection for this environment.

##### Request: `/v1/consent/{environment_id}`

### Payload

Content type `application/json`

```json
{
  "enabled": true
}
```

### cURL

```bash
curl -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"enabled":true}' \
  "https://api.digitalocean.com/v1/consent/019fb3d2-8a56-72cc-8bf9-9d21510b2a99"
```

#### Responses

**200** The consent record was updated successfully.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`consent` object required

A consent record indicating whether signals collection is enabled for a source. Records with `source: agent` apply to one environment; the record with `source: inference` applies to the whole team.

**Show child properties**

`agent_id` string required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

The unique identifier of the environment. For Harness Runtime, this is the Environment Config ID. Empty for team-level records (`source: inference`), which are not tied to an environment.

`enabled` boolean required

Example: `true`

Whether signals collection is enabled for this source.

`environment_id` string optional

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

Same as agent_id when present. Dual-emitted during the rename; omitted when agent_id is empty.

`id` integer required

Example: `13`

The unique numeric identifier for the consent record.

`source` string, one of: agent, inference required

Example: `agent`

The source this consent applies to. `agent` is per-environment consent for Harness Runtime; `inference` is team-level consent for Serverless Inference chat completions.

`team_id` integer required

Example: `39449946`

The team ID that owns this consent record.

`updated_at` string (date-time) required

Example: `2026-08-10T10:09:25.738533Z`

A time value given in ISO8601 combined date and time format.

**400** There was an error parsing the request body.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "consent": {
    "agent_id": "019fb3d2-8a56-72cc-8bf9-9d21510b2a99",
    "enabled": true,
    "environment_id": "019fb3d2-8a56-72cc-8bf9-9d21510b2a99",
    "id": 13,
    "source": "agent",
    "team_id": 39449946,
    "updated_at": "2026-10-07T11:06:32.280572Z"
  }
}
```

**400**

```json
{
  "id": "bad_request",
  "message": "error parsing request body",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET List Sessions for an Environment

`/v1/signals/agents/{environment_id}/sessions`

To list signals sessions for a specific environment, send a GET request to `/v1/signals/agents/{environment_id}/sessions`. Results are paginated using cursor-based pagination with `limit` and `after` parameters.

#### Path Parameters

`environment_id` string (uuid) required

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

A unique identifier for an environment. For Harness Runtime, this is the Environment Config ID. Formerly named agent_id.

#### Query Parameters

`limit` integer 1 – 100 optional

Example: `20`

Maximum number of items to return per page.

Default: `20`

`after` string optional

Example: `eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=`

An opaque cursor string returned from a previous page. Pass this value to retrieve the next page of results.

`start_time` string (date-time) optional

Example: `2026-09-01T00:00:00Z`

Filter results to those occurring at or after this timestamp (RFC 3339).

`end_time` string (date-time) optional

Example: `2026-10-01T00:00:00Z`

Filter results to those occurring at or before this timestamp (RFC 3339).

`signal_type` string optional

Example: `DisengagementEscalation`

Filter results by signal type. Use the export options endpoint to list available signal types.

##### Request: `/v1/signals/agents/{environment_id}/sessions`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/agents/019fb3d2-8a56-72cc-8bf9-9d21510b2a99/sessions?limit=20"
```

#### Responses

**200** A paginated list of sessions.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`edges` array of object optional

**Show child properties**

`cursor` string optional

Example: `eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=`

An opaque cursor for pagination.

`node` object optional

A session represents a conversation monitored by Signals, such as a Harness Runtime environment session or a Serverless Inference chat completion.

**Show child properties**

`duration_seconds` number optional

Example: `120.5`

The duration of the session in seconds.

`session_id` string (uuid) required

Example: `01a0f3d5-d5f1-798a-9352-2cd8f8b81e78`

The unique identifier for the session.

`signal_count` integer optional

Example: `3`

The number of signals detected in this session.

`started_at` string (date-time) optional

Example: `2026-09-15T14:30:00Z`

When the session started.

`total_turns` integer optional

Example: `5`

The total number of conversation turns in this session.

`page_info` object optional

**Show child properties**

`has_next_page` boolean optional

Whether there are more results after this page.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "edges": [
    {
      "cursor": "eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=",
      "node": {
        "duration_seconds": 120.5,
        "session_id": "01a0f3d5-d5f1-798a-9352-2cd8f8b81e78",
        "signal_count": 3,
        "started_at": "2026-09-15T14:30:00Z",
        "total_turns": 5
      }
    }
  ],
  "page_info": {
    "has_next_page": false
  }
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET List Dialogues for a Session

`/v1/signals/sessions/{session_id}/dialogues`

To list the dialogue turns within a specific session, send a GET request to `/v1/signals/sessions/{session_id}/dialogues`. Each dialogue represents a single turn of conversation between a user and the environment, along with any signals detected. Results are paginated using cursor-based pagination.

#### Path Parameters

`session_id` string (uuid) required

Example: `01a0f3d5-d5f1-798a-9352-2cd8f8b81e78`

A unique identifier for a signals session.

#### Query Parameters

`limit` integer 1 – 100 optional

Example: `20`

Maximum number of items to return per page.

Default: `20`

`after` string optional

Example: `eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=`

An opaque cursor string returned from a previous page. Pass this value to retrieve the next page of results.

`start_time` string (date-time) optional

Example: `2026-09-01T00:00:00Z`

Filter results to those occurring at or after this timestamp (RFC 3339).

`end_time` string (date-time) optional

Example: `2026-10-01T00:00:00Z`

Filter results to those occurring at or before this timestamp (RFC 3339).

`signal_type` string optional

Example: `DisengagementEscalation`

Filter results by signal type. Use the export options endpoint to list available signal types.

##### Request: `/v1/signals/sessions/{session_id}/dialogues`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/sessions/01a0f3d5-d5f1-798a-9352-2cd8f8b81e78/dialogues?limit=20"
```

#### Responses

**200** A paginated list of session dialogues.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`edges` array of object optional

**Show child properties**

`cursor` string optional

Example: `eyJzZXF1ZW5jZSI6MX0=`

An opaque cursor for pagination.

`node` object optional

A dialogue entry within a session, representing a single turn of conversation.

**Show child properties**

`id` string required

Example: `01a0f3d6-1234-7abc-def0-123456789abc`

The unique identifier for the dialogue.

`run_status` string optional

Example: `completed`

The execution status of this dialogue turn.

`sequence` integer optional

Example: `1`

The sequence number of this dialogue within the session.

`signals` array of string optional

Example: `["SatisfactionConfirmation"]`

A list of signal types detected in this dialogue.

`user_message` string optional

Example: `How do I create a Droplet?`

The user's message in this dialogue turn.

`page_info` object optional

**Show child properties**

`has_next_page` boolean optional

Whether there are more results after this page.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "edges": [
    {
      "cursor": "eyJzZXF1ZW5jZSI6MX0=",
      "node": {
        "id": "01a0f3d6-1234-7abc-def0-123456789abc",
        "run_status": "completed",
        "sequence": 1,
        "signals": [
          "SatisfactionConfirmation"
        ],
        "user_message": "How do I create a Droplet?"
      }
    }
  ],
  "page_info": {
    "has_next_page": false
  }
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET List Export Jobs

`/v1/signals/exports`

To list signals export jobs for your team, send a GET request to `/v1/signals/exports`. Results are paginated using cursor-based pagination with `limit` and `after` parameters.

#### Query Parameters

`environment_id` string (uuid) optional

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

Optional filter by environment ID.

`agent_id` string (uuid) optional

Example: `019fb3d2-8a56-72cc-8bf9-9d21510b2a99`

Deprecated alias for environment_id. Accepted for backward compatibility; must equal environment_id when both are set. Both set and different returns 400.

`limit` integer 1 – 100 optional

Example: `20`

Maximum number of items to return per page.

Default: `20`

`after` string optional

Example: `eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=`

An opaque cursor string returned from a previous page. Pass this value to retrieve the next page of results.

##### Request: `/v1/signals/exports`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/exports?limit=20"
```

#### Responses

**200** A paginated list of export jobs.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`edges` array of object optional

**Show child properties**

`cursor` string optional

Example: `eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=`

An opaque cursor for pagination.

`node` object optional

An export job that produces a downloadable archive of signals data.

**Show child properties**

`agent_id` string (uuid) optional

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

The environment whose data is being exported. For Harness Runtime, this is the Environment Config ID. Not meaningful for `inference` exports; use `type` to distinguish the export scope.

`completed_at` integer optional Nullable

Example: `1791036405`

Unix timestamp when the export completed, or null if still in progress.

`created_at` integer required

Example: `1791036405`

Unix timestamp when the export was created.

`environment_id` string (uuid) optional

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

Same as agent_id. Dual-emitted during the rename.

`error_message` string optional Nullable

Error message if the export failed, or null on success.

`expires_at` integer optional Nullable

Example: `1791641205`

Unix timestamp when the export download link expires.

`export_id` string (uuid) required

Example: `9f13c09c-c877-436b-9863-dcc39c9dd737`

The unique identifier for the export job.

`filters` object required

The filters applied to this export.

**Show child properties**

`session_ids` array of string optional

Example: `["01a0f3d5-d5f1-798a-9352-2cd8f8b81e78"]`

Specific session IDs included in the export.

`signal_type` array of string optional

Example: `["ExecutionFailureToolNotFound"]`

Signal types included in the export.

`status` string, one of: pending, processing, complete, failed required

Example: `complete`

The current status of the export job.

`type` string, one of: agent, inference optional

Example: `agent`

The scope of the export. `agent` covers one Harness Runtime environment; `inference` covers the team's Serverless Inference Signals conversations.

`page_info` object optional

**Show child properties**

`has_next_page` boolean optional

Whether there are more results after this page.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "edges": [
    {
      "cursor": "eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=",
      "node": {
        "agent_id": "01a0f3d5-b58d-7c99-a743-7ca0397b7f5d",
        "completed_at": 1791036405,
        "created_at": 1791036405,
        "environment_id": "01a0f3d5-b58d-7c99-a743-7ca0397b7f5d",
        "error_message": null,
        "expires_at": 1791641205,
        "export_id": "9f13c09c-c877-436b-9863-dcc39c9dd737",
        "filters": {
          "session_ids": [
            "01a0f3d5-d5f1-798a-9352-2cd8f8b81e78"
          ],
          "signal_type": [
            "ExecutionFailureToolNotFound"
          ]
        },
        "status": "complete",
        "type": "agent"
      }
    }
  ],
  "page_info": {
    "has_next_page": false
  }
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## POST Create an Export Job

`/v1/signals/exports`

To create a new signals data export, send a POST request to `/v1/signals/exports`. To export one Harness Runtime environment, include its `environment_id` (`type` defaults to `agent`). Deprecated `agent_id` is still accepted. To export the team's Serverless Inference Signals conversations, set `type` to `inference` and omit `environment_id` and `agent_id`. You may optionally filter the export by `signal_type`, `session_ids`, `start_time`, and `end_time`. Use the export options endpoint to discover available signal types.

The export job runs asynchronously. Poll the get export endpoint to check its status. When complete, use the download endpoint to retrieve a pre-signed URL.

#### Request Body: `application/json`

`agent_id` string (uuid) optional Deprecated

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

Deprecated alias for `environment_id`. Accepted for backward compatibility; must equal `environment_id` when both are set. Both set and different returns 400. Required when `type` is `agent` if `environment_id` is omitted; must be omitted when `type` is `inference`.

`end_time` string (date-time) optional

Example: `2026-10-01T00:00:00Z`

Include only sessions that started at or before this timestamp.

`environment_id` string (uuid) optional

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

The environment whose data should be exported. For Harness Runtime, this is the Environment Config ID. Required when `type` is `agent` if `agent_id` is omitted; must be omitted when `type` is `inference`. Prefer this over `agent_id`.

`session_ids` array of string (uuid) optional

Example: `["01a0f3d5-d5f1-798a-9352-2cd8f8b81e78"]`

Optional list of specific session IDs to include in the export.

`signal_type` array of string optional

Example: `["ExecutionFailureToolNotFound"]`

Filter the export to only include the specified signal types. Use the export options endpoint to list available values.

`start_time` string (date-time) optional

Example: `2026-09-01T00:00:00Z`

Include only sessions that started at or after this timestamp.

`type` string, one of: agent, inference optional

Example: `agent`

The scope of the export. `agent` exports Signals conversations for one Harness Runtime environment and requires `environment_id` (or deprecated `agent_id`). `inference` exports Serverless Inference Signals conversations for the whole team (team-wide; omit `environment_id` and `agent_id`). Defaults to `agent` when `environment_id` or `agent_id` is provided and to `inference` when both are omitted.

##### Request: `/v1/signals/exports`

### Payload

Content type `application/json`

Example

```json
{
  "environment_id": "01a0f3d5-b58d-7c99-a743-7ca0397b7f5d",
  "signal_type": [
    "ExecutionFailureToolNotFound"
  ]
}
```

```json
{
  "signal_type": [
    "MisalignmentCorrection"
  ],
  "type": "inference"
}
```

### cURL

```
# Export one Harness Runtime environment
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"environment_id":"01a0f3d5-b58d-7c99-a743-7ca0397b7f5d","signal_type":["ExecutionFailureToolNotFound"]}' \
  "https://api.digitalocean.com/v1/signals/exports"

# Export the team's Serverless Inference Signals (no environment_id)
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"type":"inference","signal_type":["MisalignmentCorrection"]}' \
  "https://api.digitalocean.com/v1/signals/exports"
```

#### Responses

**201** A single export job.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`agent_id` string (uuid) optional

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

The environment whose data is being exported. For Harness Runtime, this is the Environment Config ID. Not meaningful for `inference` exports; use `type` to distinguish the export scope.

`completed_at` integer optional Nullable

Example: `1791036405`

Unix timestamp when the export completed, or null if still in progress.

`created_at` integer required

Example: `1791036405`

Unix timestamp when the export was created.

`environment_id` string (uuid) optional

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

Same as agent_id. Dual-emitted during the rename.

`error_message` string optional Nullable

Error message if the export failed, or null on success.

`expires_at` integer optional Nullable

Example: `1791641205`

Unix timestamp when the export download link expires.

`export_id` string (uuid) required

Example: `9f13c09c-c877-436b-9863-dcc39c9dd737`

The unique identifier for the export job.

`filters` object required

The filters applied to this export.

**Show child properties**

`session_ids` array of string optional

Example: `["01a0f3d5-d5f1-798a-9352-2cd8f8b81e78"]`

Specific session IDs included in the export.

`signal_type` array of string optional

Example: `["ExecutionFailureToolNotFound"]`

Signal types included in the export.

`status` string, one of: pending, processing, complete, failed required

Example: `complete`

The current status of the export job.

`type` string, one of: agent, inference optional

Example: `agent`

The scope of the export. `agent` covers one Harness Runtime environment; `inference` covers the team's Serverless Inference Signals conversations.

**400** There was an error parsing the request body.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**422** Unprocessable Entity

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**201**

```json
{
  "agent_id": "01a0f3d5-b58d-7c99-a743-7ca0397b7f5d",
  "completed_at": 1791036405,
  "created_at": 1791036405,
  "environment_id": "01a0f3d5-b58d-7c99-a743-7ca0397b7f5d",
  "error_message": null,
  "expires_at": 1791641205,
  "export_id": "9f13c09c-c877-436b-9863-dcc39c9dd737",
  "filters": {
    "session_ids": [
      "01a0f3d5-d5f1-798a-9352-2cd8f8b81e78"
    ],
    "signal_type": [
      "ExecutionFailureToolNotFound"
    ]
  },
  "status": "complete",
  "type": "agent"
}
```

**400**

```json
{
  "id": "bad_request",
  "message": "error parsing request body",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**422**

```json
{
  "id": "unprocessable_entity",
  "message": "request payload validation failed",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET Get Export Options

`/v1/signals/exports/options`

To retrieve the available filter options for creating an export, send a GET request to `/v1/signals/exports/options`. The response lists valid signal types that can be used in the `signal_type` filter when creating an export.

##### Request: `/v1/signals/exports/options`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/exports/options"
```

#### Responses

**200** Available export filter options.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`filters` object required

**Show child properties**

`signal_type` array of string required

The list of valid signal type values that can be used when creating an export.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "filters": {
    "signal_type": [
      "DisengagementEscalation",
      "DisengagementNegativeStance",
      "DisengagementQuit",
      "EnvironmentExhaustionApiError",
      "ExecutionFailureToolNotFound",
      "ExecutionLoopsRetry",
      "MisalignmentCorrection",
      "SatisfactionConfirmation",
      "SatisfactionGratitude",
      "SatisfactionSuccess",
      "StagnationRepetition"
    ]
  }
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET Retrieve an Export Job

`/v1/signals/exports/{export_id}`

To retrieve the status and details of a signals export job, send a GET request to `/v1/signals/exports/{export_id}`.

#### Path Parameters

`export_id` string (uuid) required

Example: `9f13c09c-c877-436b-9863-dcc39c9dd737`

A unique identifier for an export job.

##### Request: `/v1/signals/exports/{export_id}`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/exports/9f13c09c-c877-436b-9863-dcc39c9dd737"
```

#### Responses

**200** A single export job.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`agent_id` string (uuid) optional

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

The environment whose data is being exported. For Harness Runtime, this is the Environment Config ID. Not meaningful for `inference` exports; use `type` to distinguish the export scope.

`completed_at` integer optional Nullable

Example: `1791036405`

Unix timestamp when the export completed, or null if still in progress.

`created_at` integer required

Example: `1791036405`

Unix timestamp when the export was created.

`environment_id` string (uuid) optional

Example: `01a0f3d5-b58d-7c99-a743-7ca0397b7f5d`

Same as agent_id. Dual-emitted during the rename.

`error_message` string optional Nullable

Error message if the export failed, or null on success.

`expires_at` integer optional Nullable

Example: `1791641205`

Unix timestamp when the export download link expires.

`export_id` string (uuid) required

Example: `9f13c09c-c877-436b-9863-dcc39c9dd737`

The unique identifier for the export job.

`filters` object required

The filters applied to this export.

**Show child properties**

`session_ids` array of string optional

Example: `["01a0f3d5-d5f1-798a-9352-2cd8f8b81e78"]`

Specific session IDs included in the export.

`signal_type` array of string optional

Example: `["ExecutionFailureToolNotFound"]`

Signal types included in the export.

`status` string, one of: pending, processing, complete, failed required

Example: `complete`

The current status of the export job.

`type` string, one of: agent, inference optional

Example: `agent`

The scope of the export. `agent` covers one Harness Runtime environment; `inference` covers the team's Serverless Inference Signals conversations.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "agent_id": "01a0f3d5-b58d-7c99-a743-7ca0397b7f5d",
  "completed_at": 1791036405,
  "created_at": 1791036405,
  "environment_id": "01a0f3d5-b58d-7c99-a743-7ca0397b7f5d",
  "error_message": null,
  "expires_at": 1791641205,
  "export_id": "9f13c09c-c877-436b-9863-dcc39c9dd737",
  "filters": {
    "session_ids": [
      "01a0f3d5-d5f1-798a-9352-2cd8f8b81e78"
    ],
    "signal_type": [
      "ExecutionFailureToolNotFound"
    ]
  },
  "status": "complete",
  "type": "agent"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET Get Export Download URL

`/v1/signals/exports/{export_id}/download`

To retrieve a pre-signed download URL for a completed export, send a GET request to `/v1/signals/exports/{export_id}/download`. The export must have a `complete` status. The URL is temporary and will expire.

#### Path Parameters

`export_id` string (uuid) required

Example: `9f13c09c-c877-436b-9863-dcc39c9dd737`

A unique identifier for an export job.

##### Request: `/v1/signals/exports/{export_id}/download`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/exports/9f13c09c-c877-436b-9863-dcc39c9dd737/download"
```

#### Responses

**200** A download URL for a completed export.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`download_url` string (uri) required

A temporary pre-signed URL to download the export archive.

`expires_at` integer required

Example: `1791390640`

Unix timestamp when the download URL expires. The URL is valid for 15 minutes.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "download_url": "https://example-bucket.nyc3.digitaloceanspaces.com/exports/3f2a1c4e-5b6d-4e7f-8a9b-0c1d2e3f4a5b/9f13c09c-c877-436b-9863-dcc39c9dd737.json.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Signature=EXAMPLE",
  "expires_at": 1791390640
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET List Data Deletion Jobs

`/v1/signals/deletions`

To list signals data deletion jobs for your team, newest first, send a GET request to `/v1/signals/deletions`. Results are paginated using cursor-based pagination with `limit` and `after` parameters.

#### Query Parameters

`limit` integer 1 – 100 optional

Example: `20`

Maximum number of items to return per page.

Default: `20`

`after` string optional

Example: `eyJ0ZWFtX2lkIjozOTQ0OTk0Nn0=`

An opaque cursor string returned from a previous page. Pass this value to retrieve the next page of results.

##### Request: `/v1/signals/deletions`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/deletions?limit=20"
```

#### Responses

**200** A paginated list of deletion jobs.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`edges` array of object optional

**Show child properties**

`cursor` string optional

Example: `eyJkIjoiMDFKOVpYME41UTdNMkszUjRTNVQ2VjdXOFgifQ==`

An opaque cursor for pagination.

`node` object optional

A deletion job that permanently removes Signals conversations for one Harness Runtime environment, or Serverless Inference Signals conversations for a whole team. Aggregated Insights or metrics summaries may still remain.

**Show child properties**

`agent_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

The Harness Runtime Environment Config ID (agent UUID) whose conversations are being deleted. Only present for `agent` deletions.

`completed_at` integer (int64) optional Nullable

Unix timestamp when the deletion finished, or null if still in progress.

`created_at` integer (int64) required

Example: `1791036405`

Unix timestamp when the deletion job was created.

`deletion_id` string required

Example: `01J9ZX0N5Q7M2K3R4S5T6V7W8X`

The unique identifier for the deletion job (ULID).

`environment_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

Same as agent_id when present. Dual-emitted during the rename; omitted when agent_id is omitted.

`error_message` string optional Nullable

Error message if the deletion failed, or null otherwise.

`started_at` integer (int64) optional Nullable

Example: `1791036410`

Unix timestamp when processing started, or null if still queued.

`status` string, one of: queued, running, complete, failed required

Example: `running`

The current status of the deletion job.

`team_id` integer (int64) required

Example: `12345678`

The team that owns the deletion job.

`type` string, one of: agent, inference required

Example: `agent`

The scope of the deletion. `agent` deletes Signals conversations for one Harness Runtime environment. `inference` deletes Serverless Inference Signals conversations for the whole team.

`page_info` object optional

**Show child properties**

`end_cursor` string optional

Example: `eyJkIjoiMDFKOVpXN0E4QjlDMEQxRTJGM0c0SDVKNksifQ==`

Cursor of the last item. Pass as `after` to fetch the next page. Present only when there are more results.

`has_next_page` boolean optional

Whether there are more results after this page.

**400** There was an error parsing the request body.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "edges": [
    {
      "cursor": "eyJkIjoiMDFKOVpYME41UTdNMkszUjRTNVQ2VjdXOFgifQ==",
      "node": {
        "agent_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
        "completed_at": null,
        "created_at": 1791036405,
        "deletion_id": "01J9ZX0N5Q7M2K3R4S5T6V7W8X",
        "environment_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
        "error_message": null,
        "started_at": 1791036410,
        "status": "running",
        "team_id": 12345678,
        "type": "agent"
      }
    },
    {
      "cursor": "eyJkIjoiMDFKOVpXN0E4QjlDMEQxRTJGM0c0SDVKNksifQ==",
      "node": {
        "completed_at": 1790950605,
        "created_at": 1790950005,
        "deletion_id": "01J9ZW7A8B9C0D1E2F3G4H5J6K",
        "error_message": null,
        "started_at": 1790950010,
        "status": "complete",
        "team_id": 12345678,
        "type": "inference"
      }
    }
  ],
  "page_info": {
    "has_next_page": false
  }
}
```

**400**

```json
{
  "id": "bad_request",
  "message": "error parsing request body",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## POST Create a Data Deletion Job

`/v1/signals/deletions`

To permanently delete Signals conversation data, send a POST request to `/v1/signals/deletions`. Deletion cannot be undone.

Two deletion types are supported:

- `agent` — deletes Signals conversations for one Harness Runtime environment and turns off collection for that environment. Requires `environment_id` (the environment's Environment Config ID). Deprecated `agent_id` is still accepted; both set and equal is accepted, both set and different returns 400. On create, matching conversations are hidden from Signals reads immediately. Wait until the job is `complete` before enabling Signals for the environment again.
- `inference` — deletes Serverless Inference Signals conversations for your whole team (team-wide; not limited to one endpoint or model) that were collected at or before the deletion request, and turns off team inference collection (`source=inference`). Do not send `environment_id` or `agent_id`. On create, matching conversations are hidden from Signals reads immediately.

The job runs asynchronously; poll the get endpoint until `status` is `complete` or `failed`. DigitalOcean may retry transient processing errors while a job is still active. If a job ends as `failed`, matching conversations stay hidden and collection stays off; send the same create request again to retry. Earlier export files are not deleted and remain available until they expire.

Note: Deletion removes Signals conversation data for the requested scope. Aggregated Insights or metrics charts may still show historical summary datapoints after deletion. Those summaries are not the same as recoverable conversation content.

The endpoint is idempotent: if a queued or running job already exists for the same target, it is returned with `200 OK`. A new job returns `202 Accepted`. Each team can have a limited number of active jobs; requests beyond that limit return `429 Too Many Requests`.

#### Request Body: `application/json`

`agent_id` string (uuid) optional Deprecated

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

Deprecated alias for `environment_id`. Accepted for backward compatibility; must equal `environment_id` when both are set. Both set and different returns 400. Required when `type` is `agent` if `environment_id` is omitted; must be omitted when `type` is `inference`.

`environment_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

The Harness Runtime Environment Config ID of the environment whose conversations should be deleted. Required when `type` is `agent` if `agent_id` is omitted; must be omitted when `type` is `inference`. Prefer this over `agent_id`.

`team_id` integer (int64) required

Example: `12345678`

The team whose data should be deleted. Must match the authenticated team.

`type` string, one of: agent, inference required

Example: `agent`

The scope of the deletion. `agent` deletes Signals conversations for one Harness Runtime environment and requires `environment_id` (or deprecated `agent_id`). `inference` deletes Serverless Inference Signals conversations for the whole team (team-wide; omit `environment_id` and `agent_id`).

##### Request: `/v1/signals/deletions`

### Payload

Content type `application/json`

Example

```json
{
  "environment_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
  "team_id": 12345678,
  "type": "agent"
}
```

```json
{
  "team_id": 12345678,
  "type": "inference"
}
```

### cURL

```bash
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"type":"agent","team_id":12345678,"environment_id":"01a10d3f-2c09-764f-99f8-458e521627f3"}' \
  "https://api.digitalocean.com/v1/signals/deletions"
```

#### Responses

**200** A single deletion job.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`agent_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

The Harness Runtime Environment Config ID (agent UUID) whose conversations are being deleted. Only present for `agent` deletions.

`completed_at` integer (int64) optional Nullable

Unix timestamp when the deletion finished, or null if still in progress.

`created_at` integer (int64) required

Example: `1791036405`

Unix timestamp when the deletion job was created.

`deletion_id` string required

Example: `01J9ZX0N5Q7M2K3R4S5T6V7W8X`

The unique identifier for the deletion job (ULID).

`environment_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

Same as agent_id when present. Dual-emitted during the rename; omitted when agent_id is omitted.

`error_message` string optional Nullable

Error message if the deletion failed, or null otherwise.

`started_at` integer (int64) optional Nullable

Example: `1791036410`

Unix timestamp when processing started, or null if still queued.

`status` string, one of: queued, running, complete, failed required

Example: `running`

The current status of the deletion job.

`team_id` integer (int64) required

Example: `12345678`

The team that owns the deletion job.

`type` string, one of: agent, inference required

Example: `agent`

The scope of the deletion. `agent` deletes Signals conversations for one Harness Runtime environment. `inference` deletes Serverless Inference Signals conversations for the whole team.

**202** The deletion job was accepted and will be processed asynchronously.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`agent_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

The Harness Runtime Environment Config ID (agent UUID) whose conversations are being deleted. Only present for `agent` deletions.

`completed_at` integer (int64) optional Nullable

Unix timestamp when the deletion finished, or null if still in progress.

`created_at` integer (int64) required

Example: `1791036405`

Unix timestamp when the deletion job was created.

`deletion_id` string required

Example: `01J9ZX0N5Q7M2K3R4S5T6V7W8X`

The unique identifier for the deletion job (ULID).

`environment_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

Same as agent_id when present. Dual-emitted during the rename; omitted when agent_id is omitted.

`error_message` string optional Nullable

Error message if the deletion failed, or null otherwise.

`started_at` integer (int64) optional Nullable

Example: `1791036410`

Unix timestamp when processing started, or null if still queued.

`status` string, one of: queued, running, complete, failed required

Example: `running`

The current status of the deletion job.

`team_id` integer (int64) required

Example: `12345678`

The team that owns the deletion job.

`type` string, one of: agent, inference required

Example: `agent`

The scope of the deletion. `agent` deletes Signals conversations for one Harness Runtime environment. `inference` deletes Serverless Inference Signals conversations for the whole team.

**400** There was an error parsing the request body.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**403** The authenticated principal does not have permission to perform this action on the requested resource.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "agent_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
  "completed_at": null,
  "created_at": 1791036405,
  "deletion_id": "01J9ZX0N5Q7M2K3R4S5T6V7W8X",
  "environment_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
  "error_message": null,
  "started_at": 1791036410,
  "status": "running",
  "team_id": 12345678,
  "type": "agent"
}
```

**202**

```json
{
  "agent_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
  "completed_at": null,
  "created_at": 1791036405,
  "deletion_id": "01J9ZX0N5Q7M2K3R4S5T6V7W8X",
  "environment_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
  "error_message": null,
  "started_at": null,
  "status": "queued",
  "team_id": 12345678,
  "type": "agent"
}
```

**400**

```json
{
  "id": "bad_request",
  "message": "error parsing request body",
  "request_id": "4851a473-1621-42ea-b2f9-5071c0ea8414"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**403**

```json
{
  "id": "forbidden",
  "message": "You do not have permission to perform this action."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

## GET Retrieve a Data Deletion Job

`/v1/signals/deletions/{deletion_id}`

To retrieve the status of a signals data deletion job, send a GET request to `/v1/signals/deletions/{deletion_id}`.

#### Path Parameters

`deletion_id` string required

Example: `01J9ZX0N5Q7M2K3R4S5T6V7W8X`

A unique identifier for a data deletion job.

##### Request: `/v1/signals/deletions/{deletion_id}`

### cURL

```bash
curl -X GET \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v1/signals/deletions/01J9ZX0N5Q7M2K3R4S5T6V7W8X"
```

#### Responses

**200** A single deletion job.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`agent_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

The Harness Runtime Environment Config ID (agent UUID) whose conversations are being deleted. Only present for `agent` deletions.

`completed_at` integer (int64) optional Nullable

Unix timestamp when the deletion finished, or null if still in progress.

`created_at` integer (int64) required

Example: `1791036405`

Unix timestamp when the deletion job was created.

`deletion_id` string required

Example: `01J9ZX0N5Q7M2K3R4S5T6V7W8X`

The unique identifier for the deletion job (ULID).

`environment_id` string (uuid) optional

Example: `01a10d3f-2c09-764f-99f8-458e521627f3`

Same as agent_id when present. Dual-emitted during the rename; omitted when agent_id is omitted.

`error_message` string optional Nullable

Error message if the deletion failed, or null otherwise.

`started_at` integer (int64) optional Nullable

Example: `1791036410`

Unix timestamp when processing started, or null if still queued.

`status` string, one of: queued, running, complete, failed required

Example: `running`

The current status of the deletion job.

`team_id` integer (int64) required

Example: `12345678`

The team that owns the deletion job.

`type` string, one of: agent, inference required

Example: `agent`

The scope of the deletion. `agent` deletes Signals conversations for one Harness Runtime environment. `inference` deletes Serverless Inference Signals conversations for the whole team.

**401** Authentication failed due to invalid credentials.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**404** The resource was not found.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**429** The API rate limit has been exceeded.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**500** There was a server error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

**default** There was an unexpected error.

Response Headers

`ratelimit-limit` integer

The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.

`ratelimit-remaining` integer

The number of requests in your hourly quota that remain before you hit your request limit. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

`ratelimit-reset` integer

The time when the oldest request will expire. The value is given in Unix epoch time. See [https://docs.digitalocean.com/reference/api/reference/#rate-limit](https://docs.digitalocean.com/reference/api/reference/index.html.md#rate-limit) for information about how requests expire.

Response Schema: `application/json`

`id` string required

Example: `not_found`

A short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."

`message` string required

Example: `The resource you were accessing could not be found.`

A message providing additional information about the error, including details to help resolve it when possible.

`request_id` string optional

Example: `4d9d8375-3c56-4925-a3e7-eb137fed17e9`

Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.

##### Response

**200**

```json
{
  "agent_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
  "completed_at": null,
  "created_at": 1791036405,
  "deletion_id": "01J9ZX0N5Q7M2K3R4S5T6V7W8X",
  "environment_id": "01a10d3f-2c09-764f-99f8-458e521627f3",
  "error_message": null,
  "started_at": 1791036410,
  "status": "running",
  "team_id": 12345678,
  "type": "agent"
}
```

**401**

```json
{
  "id": "unauthorized",
  "message": "Unable to authenticate you."
}
```

**404**

```json
{
  "id": "not_found",
  "message": "The resource you requested could not be found."
}
```

**429**

```json
{
  "id": "too_many_requests",
  "message": "API rate limit exceeded."
}
```

**500**

```json
{
  "id": "server_error",
  "message": "Unexpected server-side error"
}
```

**default**

```json
{
  "id": "example_error",
  "message": "some error message"
}
```

* * *

Learn more: [Create DigitalOcean Harness Runtime Environments](https://docs.digitalocean.com/products/managed-agents/agent-harness-runtime/how-to/create-harness-agents/index.html.md), [What You Can Build](https://docs.digitalocean.com/products/managed-agents/agent-harness-runtime/details/what-you-can-build/index.html.md), [DigitalOcean Harness Runtime Pricing](https://docs.digitalocean.com/products/managed-agents/agent-harness-runtime/details/pricing/index.html.md)