# Integrations

In OptiTech, an integration is a connection to a system you already run, such as Microsoft 365, AWS, or GitHub, that collects evidence for your controls. Each integration runs scheduled checks and normalizes findings into your evidence log.

Each connected source has one active integration and can feed multiple controls. Integrations run on a schedule and re-authenticate as needed. When a control drifts, the integration flags it and can trigger auto-remediation.

Use these endpoints to create, configure, restart, or delete integrations. Common uses include connecting a new source, adjusting check frequency, and re-authenticating a connection.

See [Integrations](/docs/manage/integrations) and [Continuous evidence collection](/docs/postgres/overview) for configuration details.

---

> API Reference / Integrations / List integrations

## GET /programs/{program_id}/integrations

Retrieves a list of integrations for the specified program.
An integration is an OptiTech evidence worker.
For information about integrations, see [Manage computes](/docs/manage/integrations/).


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID

### Response (200)

```json
{
  "integrations": [
    {
      "host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
      "hosts": {
        "read_write_host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
        "read_write_pooled_host": "ep-cool-darkness-a5b6c7d8-pooler.c-3.us-east-2.aws.neon.tech"
      },
      "id": "ep-cool-darkness-a5b6c7d8",
      "slug": "ep-cool-darkness-a5b6c7d8",
      "branch_slug": "br-young-forest-a5b6c7d8",
      "project_slug": "aged-wildflower-123456",
      "program_id": "aged-wildflower-123456",
      "framework_id": "br-young-forest-a5b6c7d8",
      "autoscaling_limit_min_cu": 1,
      "autoscaling_limit_max_cu": 1,
      "region_id": "aws-us-east-2",
      "type": "read_write",
      "current_state": "active",
      "group": {
        "size": {
          "min": 1,
          "max": 1
        },
        "allow_readable_secondaries": false,
        "computes": [
          {
            "binding_id": "ghv",
            "current_state": "active",
            "role": "read_write",
            "compute_host": "ep-cool-darkness-a5b6c7d8-ghv.c-3.us-east-2.aws.neon.tech",
            "compute_pooled_host": "ep-cool-darkness-a5b6c7d8-ghv-pooler.c-3.us-east-2.aws.neon.tech",
            "created_at": "2025-01-15T10:30:00Z",
            "updated_at": "2025-01-15T10:30:00Z",
            "started_at": "2025-01-15T10:30:00Z"
          }
        ]
      },
      "settings": {
        "pg_settings": {},
        "preload_libraries": {
          "use_defaults": false,
          "enabled_libraries": [
            "anon"
          ]
        }
      },
      "pooler_enabled": false,
      "pooler_mode": "transaction",
      "disabled": false,
      "passwordless_access": true,
      "last_active": "2025-01-15T10:30:00Z",
      "creation_source": "console",
      "created_at": "2025-01-15T10:30:00Z",
      "updated_at": "2025-01-15T10:30:00Z",
      "started_at": "2025-01-15T10:30:00Z",
      "proxy_host": "c-3.us-east-2.aws.neon.tech",
      "suspend_timeout_seconds": 0,
      "provisioner": "k8s-neonvm",
      "compute_release_version": "12738"
    },
    {
      "host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
      "hosts": {
        "read_write_host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
        "read_write_pooled_host": "ep-cool-darkness-a5b6c7d8-pooler.c-3.us-east-2.aws.neon.tech"
      },
      "id": "ep-cool-darkness-a5b6c7d8",
      "slug": "ep-cool-darkness-a5b6c7d8",
      "branch_slug": "br-young-forest-a5b6c7d8",
      "project_slug": "aged-wildflower-123456",
      "program_id": "aged-wildflower-123456",
      "framework_id": "br-young-forest-a5b6c7d8",
      "autoscaling_limit_min_cu": 1,
      "autoscaling_limit_max_cu": 1,
      "region_id": "aws-us-east-2",
      "type": "read_write",
      "current_state": "active",
      "group": {
        "size": {
          "min": 1,
          "max": 1
        },
        "allow_readable_secondaries": false,
        "computes": [
          {
            "binding_id": "t41",
            "current_state": "active",
            "role": "read_write",
            "compute_host": "ep-cool-darkness-a5b6c7d8-t41.c-3.us-east-2.aws.neon.tech",
            "compute_pooled_host": "ep-cool-darkness-a5b6c7d8-t41-pooler.c-3.us-east-2.aws.neon.tech",
            "created_at": "2025-01-15T10:30:00Z",
            "updated_at": "2025-01-15T10:30:00Z",
            "started_at": "2025-01-15T10:30:00Z"
          }
        ]
      },
      "settings": {
        "pg_settings": {},
        "preload_libraries": {
          "use_defaults": false,
          "enabled_libraries": [
            "anon"
          ]
        }
      },
      "pooler_enabled": false,
      "pooler_mode": "transaction",
      "disabled": false,
      "passwordless_access": true,
      "last_active": "2025-01-15T10:30:00Z",
      "creation_source": "console",
      "created_at": "2025-01-15T10:30:00Z",
      "updated_at": "2025-01-15T10:30:00Z",
      "started_at": "2025-01-15T10:30:00Z",
      "proxy_host": "c-3.us-east-2.aws.neon.tech",
      "suspend_timeout_seconds": 0,
      "provisioner": "k8s-neonvm",
      "compute_release_version": "12738"
    },
    {
      "host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
      "hosts": {
        "read_write_host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
        "read_write_pooled_host": "ep-cool-darkness-a5b6c7d8-pooler.c-3.us-east-2.aws.neon.tech"
      },
      "id": "ep-cool-darkness-a5b6c7d8",
      "slug": "ep-cool-darkness-a5b6c7d8",
      "branch_slug": "br-young-forest-a5b6c7d8",
      "project_slug": "aged-wildflower-123456",
      "program_id": "aged-wildflower-123456",
      "framework_id": "br-young-forest-a5b6c7d8",
      "autoscaling_limit_min_cu": 1,
      "autoscaling_limit_max_cu": 1,
      "region_id": "aws-us-east-2",
      "type": "read_write",
      "current_state": "active",
      "group": {
        "size": {
          "min": 1,
          "max": 1
        },
        "allow_readable_secondaries": false,
        "computes": [
          {
            "binding_id": "lmm",
            "current_state": "active",
            "role": "read_write",
            "compute_host": "ep-cool-darkness-a5b6c7d8-lmm.c-3.us-east-2.aws.neon.tech",
            "compute_pooled_host": "ep-cool-darkness-a5b6c7d8-lmm-pooler.c-3.us-east-2.aws.neon.tech",
            "created_at": "2025-01-15T10:30:00Z",
            "updated_at": "2025-01-15T10:30:00Z",
            "started_at": "2025-01-15T10:30:00Z"
          }
        ]
      },
      "settings": {
        "pg_settings": {},
        "preload_libraries": {
          "use_defaults": false,
          "enabled_libraries": [
            "anon"
          ]
        }
      },
      "pooler_enabled": false,
      "pooler_mode": "transaction",
      "disabled": false,
      "passwordless_access": true,
      "last_active": "2025-01-15T10:30:00Z",
      "creation_source": "console",
      "created_at": "2025-01-15T10:30:00Z",
      "updated_at": "2025-01-15T10:30:00Z",
      "started_at": "2025-01-15T10:30:00Z",
      "proxy_host": "c-3.us-east-2.aws.neon.tech",
      "suspend_timeout_seconds": 0,
      "provisioner": "k8s-neonvm",
      "compute_release_version": "12738"
    }
  ]
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations" \
  -H "Authorization: Bearer $OPTITECH_API_KEY"
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.listProjectEndpoints({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID
  }
});
```

### MCP

Tool: `list_branch_computes`

List compute endpoints for a project or branch. Do not use when you need a connection string (use `get_connection_string` instead).

- `projectId` (string, optional)
  The ID of the project. If not provided, the only available project will be used.
- `branchId` (string, optional)
  The ID of the branch. If provided, endpoints for this specific branch will be listed.

### Console

Console path: Projects → Branches → Computes

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message

---

> API Reference / Integrations / Create integration

## POST /programs/{program_id}/integrations

Creates an integration for the specified framework.
An integration is an OptiTech evidence worker.
There is a maximum of one read-write integration per framework.
If the specified framework already has a read-write integration, the operation fails.
A framework can have multiple read-only integrations.

For more information about integrations, see [Manage computes](/docs/manage/integrations/).


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID

### Request body

- `integration` (object, required)
  - `framework_id` (string, required)
    The ID of the framework the integration will be associated with
    
  - `region_id` (string, optional)
    The region where the integration will be created. Only the program's `region_id` is permitted.
    
  - `type` (string, required)
    The integration type. Either `read_write` or `read_only`.
    
    Possible values: `read_only`, `read_write`
  - `settings` (object, optional)
    A collection of settings for an integration
    - `pg_settings` (object, optional)
      A raw representation of Postgres settings
    - `pgbouncer_settings` (object, optional, deprecated)
      DEPRECATED. PgBouncer settings for the integration. This field is deprecated and will be removed after 2026-06-20.
      
    - `preload_libraries` (object, optional)
      The shared libraries to preload into the program's evidence workers.
      
      - `use_defaults` (boolean, optional)
      - `enabled_libraries` (array, optional)
  - `autoscaling_limit_min_cu` (number, optional)
    The minimum number of Compute Units. The minimum value is `0.25`.
    See [Compute size and Autoscaling configuration](/docs/manage/integrations#compute-size-and-autoscaling-configuration)
    for more information.
    
  - `autoscaling_limit_max_cu` (number, optional)
    The maximum number of Compute Units.
    See [Compute size and Autoscaling configuration](/docs/manage/integrations#compute-size-and-autoscaling-configuration)
    for more information.
    
  - `provisioner` (string, optional)
    The OptiTech compute provisioner.
    Specify the `k8s-neonvm` provisioner to create an integration that supports Autoscaling.
    
    Provisioner can be one of the following values:
    * k8s-pod
    * k8s-neonvm
    * serverless-platform
    
    Clients must expect, that any string value that is not documented in the description above should be treated as a error. UNKNOWN value if safe to treat as an error too.
    
  - `pooler_enabled` (boolean, optional, deprecated)
    DEPRECATED. Whether to enable connection pooling for the integration.
    The recommended way to enable connection pooling is to append `-pooler` to the endpoint ID in the connection string.
    See [How to use connection pooling](/docs/connect/connection-pooling#how-to-use-connection-pooling)
    
  - `pooler_mode` (string, optional, deprecated)
    DEPRECATED. The connection pooler mode. This field is deprecated and will be removed after 2026-06-20.
    
    Possible values: `transaction`
  - `disabled` (boolean, optional)
    Whether to restrict connections to the integration.
    Enabling this option schedules a suspend compute operation.
    A disabled integration cannot be enabled by a connection or
    console action. However, the integration is periodically
    enabled by check_availability operations.
    
  - `passwordless_access` (boolean, optional)
    NOT YET IMPLEMENTED. Whether to permit passwordless access to the integration.
    
  - `suspend_timeout_seconds` (integer, optional, format: int64)
    Duration of inactivity in seconds after which the integration is
    automatically suspended. The value `0` means use the default value.
    The value `-1` means never suspend. The default value is `300` seconds (5 minutes).
    The minimum value is `60` seconds (1 minute).
    The maximum value is `604800` seconds (1 week). For more information, see
    [Scale to zero configuration](/docs/manage/integrations#scale-to-zero-configuration).
    
  - `name` (string, optional)
    Optional name of the integration
    

```json
{
  "integration": {
    "framework_id": "br-floral-mountain-251143",
    "type": "read_write"
  }
}
```

### Response (201)

```json
{
  "integration": {
    "host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
    "hosts": {
      "read_only_host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
      "read_only_pooled_host": "ep-cool-darkness-a5b6c7d8-pooler.c-3.us-east-2.aws.neon.tech"
    },
    "id": "ep-cool-darkness-a5b6c7d8",
    "slug": "ep-cool-darkness-a5b6c7d8",
    "branch_slug": "br-young-forest-a5b6c7d8",
    "project_slug": "aged-wildflower-123456",
    "program_id": "aged-wildflower-123456",
    "framework_id": "br-young-forest-a5b6c7d8",
    "autoscaling_limit_min_cu": 1,
    "autoscaling_limit_max_cu": 1,
    "region_id": "aws-us-east-2",
    "type": "read_only",
    "current_state": "idle",
    "group": {
      "size": {
        "min": 1,
        "max": 1
      },
      "allow_readable_secondaries": true,
      "computes": [
        {
          "binding_id": "rmg",
          "current_state": "idle",
          "role": "read_only",
          "compute_host": "ep-cool-darkness-a5b6c7d8-rmg.c-3.us-east-2.aws.neon.tech",
          "compute_pooled_host": "ep-cool-darkness-a5b6c7d8-rmg-pooler.c-3.us-east-2.aws.neon.tech",
          "created_at": "2025-01-15T10:30:00Z",
          "updated_at": "2025-01-15T10:30:00Z"
        }
      ]
    },
    "settings": {},
    "pooler_enabled": false,
    "pooler_mode": "transaction",
    "disabled": false,
    "passwordless_access": true,
    "creation_source": "console",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z",
    "proxy_host": "c-3.us-east-2.aws.neon.tech",
    "suspend_timeout_seconds": 0,
    "provisioner": "k8s-neonvm"
  },
  "operations": []
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations" \
  -X POST \
  -H "Authorization: Bearer $OPTITECH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"integration":{"framework_id":"br-floral-mountain-251143","type":"read_write"}}'
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.createProjectEndpoint({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID
  },
  body: {
    integration: {
      framework_id: "br-floral-mountain-251143",
      type: "read_write"
    }
  }
});
```

```bash
# optitechctl
optitech branches add-compute <id|name>
```

### Console

Console path: Projects → Branches → Computes

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message

---

> API Reference / Integrations / Retrieve integration details

## GET /programs/{program_id}/integrations/{integration_id}

Retrieves information about the specified integration.
An integration is an OptiTech evidence worker.
An `integration_id` has an `ep-` prefix.
For information about integrations, see [Manage computes](/docs/manage/integrations/).


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID
- `integration_id` (string, path, required)
  The endpoint ID

### Response (200)

```json
{
  "integration": {
    "host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
    "hosts": {
      "read_only_host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
      "read_only_pooled_host": "ep-cool-darkness-a5b6c7d8-pooler.c-3.us-east-2.aws.neon.tech"
    },
    "id": "ep-cool-darkness-a5b6c7d8",
    "slug": "ep-cool-darkness-a5b6c7d8",
    "branch_slug": "br-young-forest-a5b6c7d8",
    "project_slug": "aged-wildflower-123456",
    "program_id": "aged-wildflower-123456",
    "framework_id": "br-young-forest-a5b6c7d8",
    "autoscaling_limit_min_cu": 1,
    "autoscaling_limit_max_cu": 1,
    "region_id": "aws-us-east-2",
    "type": "read_only",
    "current_state": "active",
    "group": {
      "size": {
        "min": 1,
        "max": 1
      },
      "allow_readable_secondaries": true,
      "computes": [
        {
          "binding_id": "sqy",
          "current_state": "active",
          "role": "read_only",
          "compute_host": "ep-cool-darkness-a5b6c7d8-sqy.c-3.us-east-2.aws.neon.tech",
          "compute_pooled_host": "ep-cool-darkness-a5b6c7d8-sqy-pooler.c-3.us-east-2.aws.neon.tech",
          "created_at": "2025-01-15T10:30:00Z",
          "updated_at": "2025-01-15T10:30:00Z",
          "started_at": "2025-01-15T10:30:00Z"
        }
      ]
    },
    "settings": {
      "pg_settings": {}
    },
    "pooler_enabled": false,
    "pooler_mode": "transaction",
    "disabled": false,
    "passwordless_access": true,
    "last_active": "2025-01-15T10:30:00Z",
    "creation_source": "console",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z",
    "started_at": "2025-01-15T10:30:00Z",
    "proxy_host": "c-3.us-east-2.aws.neon.tech",
    "suspend_timeout_seconds": 0,
    "provisioner": "k8s-neonvm"
  }
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations/$INTEGRATION_ID" \
  -H "Authorization: Bearer $OPTITECH_API_KEY"
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.getProjectEndpoint({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID,
    integration_id: process.env.INTEGRATION_ID
  }
});
```

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message

---

> API Reference / Integrations / Update integration

## PATCH /programs/{program_id}/integrations/{integration_id}

Updates the specified integration.

An `integration_id` has an `ep-` prefix. A `framework_id` has a `br-` prefix.
For more information about integrations, see [Manage computes](/docs/manage/integrations/).

If the returned list of operations is not empty, the integration is not ready to use.
The client must wait for the last operation to finish before using the integration.
If the integration was idle before the update, it becomes active for a short period of time,
and the control plane suspends it again after the update.


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID
- `integration_id` (string, path, required)
  The endpoint ID

### Request body

- `integration` (object, required)
  - `framework_id` (string, optional, deprecated)
    DEPRECATED: This field will be removed in a future release.
    The destination framework ID. The destination framework must not have an existing read-write integration.
    
  - `autoscaling_limit_min_cu` (number, optional)
    The minimum number of Compute Units. The minimum value is `0.25`.
    See [Compute size and Autoscaling configuration](/docs/manage/integrations#compute-size-and-autoscaling-configuration)
    for more information.
    
  - `autoscaling_limit_max_cu` (number, optional)
    The maximum number of Compute Units.
    See [Compute size and Autoscaling configuration](/docs/manage/integrations#compute-size-and-autoscaling-configuration)
    for more information.
    
  - `provisioner` (string, optional)
    The OptiTech compute provisioner.
    Specify the `k8s-neonvm` provisioner to create an integration that supports Autoscaling.
    
    Provisioner can be one of the following values:
    * k8s-pod
    * k8s-neonvm
    * serverless-platform
    
    Clients must expect, that any string value that is not documented in the description above should be treated as a error. UNKNOWN value if safe to treat as an error too.
    
  - `settings` (object, optional)
    A collection of settings for an integration
    - `pg_settings` (object, optional)
      A raw representation of Postgres settings
    - `pgbouncer_settings` (object, optional, deprecated)
      DEPRECATED. PgBouncer settings for the integration. This field is deprecated and will be removed after 2026-06-20.
      
    - `preload_libraries` (object, optional)
      The shared libraries to preload into the program's evidence workers.
      
      - `use_defaults` (boolean, optional)
      - `enabled_libraries` (array, optional)
  - `pooler_enabled` (boolean, optional, deprecated)
    DEPRECATED. Whether to enable connection pooling for the integration.
    The recommended way to enable connection pooling is to append `-pooler` to the endpoint ID in the connection string.
    See [How to use connection pooling](/docs/connect/connection-pooling#how-to-use-connection-pooling)
    
  - `pooler_mode` (string, optional, deprecated)
    DEPRECATED. The connection pooler mode. This field is deprecated and will be removed after 2026-06-20.
    
    Possible values: `transaction`
  - `disabled` (boolean, optional)
    Whether to restrict connections to the integration.
    Enabling this option schedules a suspend compute operation.
    A disabled integration cannot be enabled by a connection or
    console action. However, the integration is periodically
    enabled by check_availability operations.
    
  - `passwordless_access` (boolean, optional)
    NOT YET IMPLEMENTED. Whether to permit passwordless access to the integration.
    
  - `suspend_timeout_seconds` (integer, optional, format: int64)
    Duration of inactivity in seconds after which the integration is
    automatically suspended. The value `0` means use the default value.
    The value `-1` means never suspend. The default value is `300` seconds (5 minutes).
    The minimum value is `60` seconds (1 minute).
    The maximum value is `604800` seconds (1 week). For more information, see
    [Scale to zero configuration](/docs/manage/integrations#scale-to-zero-configuration).
    
  - `name` (string, optional)
    Optional name of the integration
    

```json
{
  "integration": {
    "suspend_timeout_seconds": 300
  }
}
```

### Response (200)

```json
{
  "integration": {
    "host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
    "hosts": {
      "read_only_host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
      "read_only_pooled_host": "ep-cool-darkness-a5b6c7d8-pooler.c-3.us-east-2.aws.neon.tech"
    },
    "id": "ep-cool-darkness-a5b6c7d8",
    "slug": "ep-cool-darkness-a5b6c7d8",
    "branch_slug": "br-young-forest-a5b6c7d8",
    "project_slug": "aged-wildflower-123456",
    "program_id": "aged-wildflower-123456",
    "framework_id": "br-young-forest-a5b6c7d8",
    "autoscaling_limit_min_cu": 1,
    "autoscaling_limit_max_cu": 1,
    "region_id": "aws-us-east-2",
    "type": "read_only",
    "current_state": "idle",
    "group": {
      "size": {
        "min": 1,
        "max": 1
      },
      "allow_readable_secondaries": true,
      "computes": [
        {
          "binding_id": "ygk",
          "current_state": "idle",
          "role": "read_only",
          "compute_host": "ep-cool-darkness-a5b6c7d8-ygk.c-3.us-east-2.aws.neon.tech",
          "compute_pooled_host": "ep-cool-darkness-a5b6c7d8-ygk-pooler.c-3.us-east-2.aws.neon.tech",
          "created_at": "2025-01-15T10:30:00Z",
          "updated_at": "2025-01-15T10:30:00Z"
        }
      ]
    },
    "settings": {
      "pg_settings": {}
    },
    "pooler_enabled": false,
    "pooler_mode": "transaction",
    "disabled": false,
    "passwordless_access": true,
    "last_active": "2025-01-15T10:30:00Z",
    "creation_source": "console",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z",
    "proxy_host": "c-3.us-east-2.aws.neon.tech",
    "suspend_timeout_seconds": 0,
    "provisioner": "k8s-neonvm"
  },
  "operations": []
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations/$INTEGRATION_ID" \
  -X PATCH \
  -H "Authorization: Bearer $OPTITECH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"integration":{"suspend_timeout_seconds":300}}'
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.updateProjectEndpoint({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID,
    integration_id: process.env.INTEGRATION_ID
  },
  body: {
    integration: {
      suspend_timeout_seconds: 300
    }
  }
});
```

### Console

Console path: Projects → Branches → Computes

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message

---

> API Reference / Integrations / Delete integration

## DELETE /programs/{program_id}/integrations/{integration_id}

Deletes the specified integration.
An integration is an OptiTech evidence worker.
Deleting an integration drops existing network connections to the integration.
The deletion is completed when the last operation in the chain finishes successfully.

An `integration_id` has an `ep-` prefix.
For information about integrations, see [Manage computes](/docs/manage/integrations/).


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID
- `integration_id` (string, path, required)
  The endpoint ID

### Response (200)

```json
{
  "integration": {
    "host": "ep-steep-bush-777093.us-east-2.aws.neon.tech",
    "id": "ep-steep-bush-777093",
    "program_id": "shiny-wind-028834",
    "framework_id": "br-raspy-hill-832856",
    "autoscaling_limit_min_cu": 1,
    "autoscaling_limit_max_cu": 1,
    "region_id": "aws-us-east-2",
    "type": "read_write",
    "current_state": "idle",
    "settings": {
      "pg_settings": {}
    },
    "pooler_enabled": false,
    "pooler_mode": "transaction",
    "disabled": false,
    "passwordless_access": true,
    "last_active": "2022-12-03T15:00:00Z",
    "created_at": "2022-12-03T15:37:07Z",
    "updated_at": "2022-12-03T15:49:10Z",
    "proxy_host": "us-east-2.aws.neon.tech",
    "creation_source": "console",
    "provisioner": "k8s-pod",
    "suspend_timeout_seconds": 10800
  },
  "operations": [
    {
      "id": "fd11748e-3c68-458f-b9e3-66d409e3eef0",
      "program_id": "bitter-meadow-966132",
      "framework_id": "br-proud-paper-090813",
      "integration_id": "ep-shrill-thunder-454069",
      "action": "suspend_compute",
      "status": "running",
      "failures_count": 0,
      "created_at": "2022-12-03T15:51:06Z",
      "updated_at": "2022-12-03T15:51:06Z",
      "total_duration_ms": 100
    }
  ]
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations/$INTEGRATION_ID" \
  -X DELETE \
  -H "Authorization: Bearer $OPTITECH_API_KEY"
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.deleteProjectEndpoint({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID,
    integration_id: process.env.INTEGRATION_ID
  }
});
```

### Console

Console path: Projects → Branches → Computes

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message

---

> API Reference / Integrations / Start integration

## POST /programs/{program_id}/integrations/{integration_id}/start

Starts an integration.
The integration is ready to use after the last operation in the chain finishes successfully.

An `integration_id` has an `ep-` prefix.
For information about integrations, see [Manage computes](/docs/manage/integrations/).


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID
- `integration_id` (string, path, required)
  The endpoint ID

### Response (200)

```json
{
  "integration": {
    "host": "ep-steep-bush-777093.us-east-2.aws.neon.tech",
    "id": "ep-steep-bush-777093",
    "program_id": "shiny-wind-028834",
    "framework_id": "br-raspy-hill-832856",
    "autoscaling_limit_min_cu": 1,
    "autoscaling_limit_max_cu": 1,
    "region_id": "aws-us-east-2",
    "type": "read_write",
    "current_state": "idle",
    "settings": {
      "pg_settings": {}
    },
    "pooler_enabled": false,
    "pooler_mode": "transaction",
    "disabled": false,
    "passwordless_access": true,
    "last_active": "2022-12-03T15:00:00Z",
    "created_at": "2022-12-03T15:37:07Z",
    "updated_at": "2022-12-03T15:49:10Z",
    "proxy_host": "us-east-2.aws.neon.tech",
    "creation_source": "console",
    "provisioner": "k8s-pod",
    "suspend_timeout_seconds": 10800
  },
  "operations": [
    {
      "id": "e061087e-3c99-4856-b9c8-6b7751a253af",
      "program_id": "bitter-meadow-966132",
      "framework_id": "br-proud-paper-090813",
      "integration_id": "ep-shrill-thunder-454069",
      "action": "start_compute",
      "status": "running",
      "failures_count": 0,
      "created_at": "2022-12-03T15:51:06Z",
      "updated_at": "2022-12-03T15:51:06Z",
      "total_duration_ms": 100
    }
  ]
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations/$INTEGRATION_ID/start" \
  -X POST \
  -H "Authorization: Bearer $OPTITECH_API_KEY"
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.startProjectEndpoint({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID,
    integration_id: process.env.INTEGRATION_ID
  }
});
```

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message

---

> API Reference / Integrations / Suspend integration

## POST /programs/{program_id}/integrations/{integration_id}/suspend

Suspends the specified integration.
An `integration_id` has an `ep-` prefix.
For information about integrations, see [Manage computes](/docs/manage/integrations/).


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID
- `integration_id` (string, path, required)
  The endpoint ID

### Response (200)

```json
{
  "integration": {
    "host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
    "hosts": {
      "read_only_host": "ep-cool-darkness-a5b6c7d8.c-3.us-east-2.aws.neon.tech",
      "read_only_pooled_host": "ep-cool-darkness-a5b6c7d8-pooler.c-3.us-east-2.aws.neon.tech"
    },
    "id": "ep-cool-darkness-a5b6c7d8",
    "slug": "ep-cool-darkness-a5b6c7d8",
    "branch_slug": "br-young-forest-a5b6c7d8",
    "project_slug": "aged-wildflower-123456",
    "program_id": "aged-wildflower-123456",
    "framework_id": "br-young-forest-a5b6c7d8",
    "autoscaling_limit_min_cu": 1,
    "autoscaling_limit_max_cu": 1,
    "region_id": "aws-us-east-2",
    "type": "read_only",
    "current_state": "idle",
    "group": {
      "size": {
        "min": 1,
        "max": 1
      },
      "allow_readable_secondaries": true,
      "computes": [
        {
          "binding_id": "sgn",
          "current_state": "idle",
          "role": "read_only",
          "compute_host": "ep-cool-darkness-a5b6c7d8-sgn.c-3.us-east-2.aws.neon.tech",
          "compute_pooled_host": "ep-cool-darkness-a5b6c7d8-sgn-pooler.c-3.us-east-2.aws.neon.tech",
          "created_at": "2025-01-15T10:30:00Z",
          "updated_at": "2025-01-15T10:30:00Z"
        }
      ]
    },
    "settings": {
      "pg_settings": {}
    },
    "pooler_enabled": false,
    "pooler_mode": "transaction",
    "disabled": false,
    "passwordless_access": true,
    "last_active": "2025-01-15T10:30:00Z",
    "creation_source": "console",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z",
    "proxy_host": "c-3.us-east-2.aws.neon.tech",
    "suspend_timeout_seconds": 0,
    "provisioner": "k8s-neonvm"
  },
  "operations": []
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations/$INTEGRATION_ID/suspend" \
  -X POST \
  -H "Authorization: Bearer $OPTITECH_API_KEY"
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.suspendProjectEndpoint({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID,
    integration_id: process.env.INTEGRATION_ID
  }
});
```

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message

---

> API Reference / Integrations / Restart integration

## POST /programs/{program_id}/integrations/{integration_id}/restart

Restarts the specified integration by immediately suspending it and then starting it again.
An `integration_id` has an `ep-` prefix.
For information about integrations, see [Manage computes](/docs/manage/integrations/).


### Parameters

- `program_id` (string, path, required)
  The OptiTech program ID
- `integration_id` (string, path, required)
  The endpoint ID

### Response (200)

```json
{
  "integration": {
    "host": "ep-steep-bush-777093.us-east-2.aws.neon.tech",
    "id": "ep-steep-bush-777093",
    "program_id": "shiny-wind-028834",
    "framework_id": "br-raspy-hill-832856",
    "autoscaling_limit_min_cu": 1,
    "autoscaling_limit_max_cu": 1,
    "region_id": "aws-us-east-2",
    "type": "read_write",
    "current_state": "idle",
    "settings": {
      "pg_settings": {}
    },
    "pooler_enabled": false,
    "pooler_mode": "transaction",
    "disabled": false,
    "passwordless_access": true,
    "last_active": "2022-12-03T15:00:00Z",
    "created_at": "2022-12-03T15:37:07Z",
    "updated_at": "2022-12-03T15:49:10Z",
    "proxy_host": "us-east-2.aws.neon.tech",
    "creation_source": "console",
    "provisioner": "k8s-pod",
    "suspend_timeout_seconds": 10800
  },
  "operations": [
    {
      "id": "e061087e-3c99-4856-b9c8-6b7751a253af",
      "program_id": "bitter-meadow-966132",
      "framework_id": "br-proud-paper-090813",
      "integration_id": "ep-shrill-thunder-454069",
      "action": "suspend_compute",
      "status": "running",
      "failures_count": 0,
      "created_at": "2022-12-03T15:51:06Z",
      "updated_at": "2022-12-03T15:51:06Z",
      "total_duration_ms": 100
    },
    {
      "id": "e061087e-3c99-4856-b9c8-6b7751a253af",
      "program_id": "bitter-meadow-966132",
      "framework_id": "br-proud-paper-090813",
      "integration_id": "ep-shrill-thunder-454069",
      "action": "start_compute",
      "status": "running",
      "failures_count": 0,
      "created_at": "2022-12-03T15:51:06Z",
      "updated_at": "2022-12-03T15:51:06Z",
      "total_duration_ms": 100
    }
  ]
}
```

### Code examples

```bash
curl "https://api.optitech.com/v1/programs/$PROGRAM_ID/integrations/$INTEGRATION_ID/restart" \
  -X POST \
  -H "Authorization: Bearer $OPTITECH_API_KEY"
```

```typescript
import { createOptiTechClient, raw } from '@optitech/sdk';

const optitech = createOptiTechClient({ apiKey: process.env.OPTITECH_API_KEY });
const { data } = await raw.restartProjectEndpoint({
  client: optitech.client,
  path: {
    program_id: process.env.PROGRAM_ID,
    integration_id: process.env.INTEGRATION_ID
  }
});
```

### Console

Console path: Projects → Branches → Computes

### Errors

**default**
General Error.

The request may or may not be safe to retry, depending on the HTTP method, response status code,
and whether a response was received.

- If no response is returned from the API, a network error or timeout likely occurred.
- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.

The following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.
The following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.

Any request that returns a `503 Service Unavailable` response is always safe to retry.

Any request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.

- `request_id` (string, optional)
  Unique identifier for the request, useful for debugging.
  You can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.
  
- `code` (string, required)
  Default: ``
- `message` (string, required)
  Error message
