# Introspect connector resources

> Source: https://docs.clonepartner.com/api-reference/connectors/introspect-connector/

`POST /api/connectors/{id}/introspect`

Returns available resources (tables, collections, entities, files) and optionally column/field schema for a specific resource.

**Operation ID:** `introspectConnector`

## Authentication

### Option 1

- **BearerAuth** (`http bearer`)
  API key token. Create via POST /api/api-keys. Format: `envoy_<hex>`

### Option 2

- **CookieAuth** (`apiKey`)
  Session cookie set after login + TOTP verification

## Path parameters

- `id` — `integer`, `required`
  Resource ID

## Request body

### `application/json`

- Type: `object`
- Properties:
  - `resource` (`string`) — If provided, returns column info for this resource instead of listing resources
  - `integrated_account_id` (`string`) — Truto only — integrated account whose resources to list
  - `surface` (`string`) — Truto only — capability surface filter
    - Description: Truto only — capability surface filter
    - Allowed values: `all`, `unified`, `proxy`
  - `delimiter` (`string`) — CSV only — field delimiter/separator override for column introspection. Use "\t" or "tab" for tab-separated files.
  - `separator` (`string`) — CSV only — alias for delimiter.
  - `limit` (`integer`) — Truto account list page size (default 50)
  - `cursor` (`string`) — Truto account list pagination cursor (next_cursor token)
  - `q` (`string`) — Truto account list search (id prefix or tenant_id substring)
  - `integration` (`string`) — Truto account list filter by integration name (e.g. gorgias)
  - `refresh` (`boolean`) — Dynamics 365 only — discard the connector's cached entity metadata and refetch the schema from the D365 metadata API

## Success responses

### 200

Introspection result

**Content type:** `application/json`

- Type: `object`
- Properties:
  - `resources` (`array<object>`)
    - Items:
      - Type: `object`
      - Properties:
        - `name` (`string`)
        - `type` (`string`)
  - `columns` (`array<object>`)
    - Items:
      - Type: `object`
      - Properties:
        - `name` (`string`)
        - `type` (`string`)
        - `nullable` (`boolean`)
  - `accounts` (`array<object>`)
    - Items:
      - Type: `object`
      - Properties:
        - `id` (`string`)
        - `label` (`string | null`)
          - Nullable: yes
        - `tenant_id` (`string`)
        - `integration_name` (`string`)
        - `status` (`string | null`)
          - Nullable: yes
  - `next_cursor` (`string | null`) — Truto integrated account list — cursor for the next page
    - Description: Truto integrated account list — cursor for the next page
    - Nullable: yes
  - `fallback` (`boolean`) — True when `resources` is a hardcoded fallback list because the live schema fetch failed (Dynamics 365)
  - `schema_error` (`string`) — Error message from the underlying schema fetch when it failed (Dynamics 365)

## Error responses

### 404

Resource not found

**Content type:** `application/json`

- Reference: `Error`
  - Type: `object`
  - Properties:
    - `error` (`string`)
      - Example: `NOT_FOUND`
    - `message` (`string`)
      - Example: `Resource not found`

Example:

```json
{
  "error": "NOT_FOUND",
  "message": "Resource not found"
}
```

### 500

Introspection failed


## Examples

### cURL

```bash
curl --request POST \
  --url 'https://your-envoy.example.com/api/connectors/YOUR_ID/introspect' \
  --header 'Authorization: Bearer $API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "resource": "string",
  "integrated_account_id": "string",
  "surface": "all",
  "delimiter": "string",
  "separator": "string"
}'
```

### JavaScript (fetch)

```javascript
const response = await fetch('https://your-envoy.example.com/api/connectors/YOUR_ID/introspect', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "resource": "string",
    "integrated_account_id": "string",
    "surface": "all",
    "delimiter": "string",
    "separator": "string"
  }),
});

if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = response.status === 204 ? null : await response.json();
console.log(data);
```
