---
title: "Services API | Gazebo Docs"
description: "List connected services through Gazebo's account administration API without exposing stored credential values."
url: "https://gazebohq.com/docs/api/services"
---

List the services connected to the authenticated Gazebo account. Credential values are never included.

## List connected services

```
GET /api/v1/services
```

Requires an [account API token](/docs/api/authentication).

```bash
curl https://app.gazebohq.com/api/v1/services \
  -H "Authorization: Bearer YOUR_ACCOUNT_API_TOKEN"
```

### Response

```json
[
  {
    "service": "stripe",
    "connectedAt": "2026-09-04T05:42:18.000Z",
    "keyType": "api_key"
  },
  {
    "service": "google",
    "connectedAt": "2026-09-03T23:11:02.000Z",
    "keyType": "oauth"
  }
]
```

| Field | Type | Description |
|---|---|---|
| `service` | string | Gazebo's normalized service identifier |
| `connectedAt` | ISO 8601 timestamp | When the selected credential record was connected |
| `keyType` | `api_key` or `oauth` | How the service is authenticated |

An empty array means the account has no connected services.

## Test credentials without storing them

```
POST /api/v1/services/test
```

```bash
curl https://app.gazebohq.com/api/v1/services/test \
  -X POST \
  -H "Authorization: Bearer YOUR_ACCOUNT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "stripe",
    "credentials": [
      { "keyName": "api_key", "value": "YOUR_STRIPE_KEY" }
    ]
  }'
```

When Gazebo has a server-owned verification endpoint for the provider, `verified` is `true` only after that provider accepts the credential:

```json
{ "ok": true, "verified": true }
```

For custom or unsupported providers, Gazebo never sends credentials to a caller-provided URL. The response instead makes the skipped remote check explicit:

```json
{ "ok": true, "verified": false }
```

## Store or replace credentials

```
PUT /api/v1/services/credentials
```

The request uses the same `service` and `credentials` shape as the test endpoint. Saving replaces every existing credential field for that service, so include the complete set on each request.

```bash
curl https://app.gazebohq.com/api/v1/services/credentials \
  -X PUT \
  -H "Authorization: Bearer YOUR_ACCOUNT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "stripe",
    "credentials": [
      { "keyName": "api_key", "value": "YOUR_STRIPE_KEY" }
    ]
  }'
```

Credential values are encrypted before storage and are never returned by the account API. Test first when `verified: true` is required by your automation.

## Remove a service's credentials

```
DELETE /api/v1/services/credentials/{service}
```

```bash
curl https://app.gazebohq.com/api/v1/services/credentials/stripe \
  -X DELETE \
  -H "Authorization: Bearer YOUR_ACCOUNT_API_TOKEN"
```

This removes every stored credential field for the normalized service identifier. Agents immediately lose access to that service.
