---
title: "Connect a pack’s declared source"
method: POST
path: "/v1/admin/source-connections"
tags: ["Source Plane"]
---

# Connect a pack’s declared source

`POST /v1/admin/source-connections`

## Request

- Base URL: `https://brain.inite.ai`
- URL: `https://brain.inite.ai/v1/admin/source-connections`
- Auth: HTTP bearer

Instantiates one `sources[]` entry of an installed (and consented — `acceptSources`) or builtin pack: a `native` entry must name a connector this brain ships, `mcp` is harvested by brain, `external` is a catalogue the publisher fills. The connection becomes a `source_registry` recorder (`vertical:recorder`) so per-connection trust is learned; `ownerUserId` makes it personal (every row it writes is user-fenced). Defaults for schedule / policies come from the entry. Source plane operator surface (docs/roadmap/raw-evidence-sources-2026-09.md) — answers a bare 404 until `SOURCE_PLANE_ENABLED=1`.

Required scope: `brain:admin`.

## Request body

- CreateSourceConnectionRequest
  - `config` object
  - `contentPolicy` 'manifest' | 'text' | 'bytes'
  - `credential` string
  - `deletePolicy` 'close' | 'retract' | 'keep'
  - `fetchBudget` integer
  - `host` string
  - `label` string
  - `mode` 'synced' | 'linked'
  - `ownerUserId` string
  - `packId` string, required
  - `schedule` 'manual' | '15m' | '1h' | '4h' | '24h'
  - `sourceId` string, required
  - `vertical` string, required

## Response `201`

Created.

- SourceConnection
  - `checkpoint` object, nullable, required
  - `config` object, required
  - `connector` string, required
  - `contentPolicy` 'manifest' | 'text' | 'bytes', required
  - `createdAt` string, required
  - `deletePolicy` 'close' | 'retract' | 'keep', required
  - `fetchBudget` integer, nullable, required
  - `grantId` string, nullable, required
  - `hasCredential` boolean, required
  - `host` string, required
  - `id` string, required
  - `kind` 'mcp' | 'native' | 'external', required
  - `label` string, nullable, required
  - `lastError` string, nullable, required
  - `lastSyncAt` string, nullable, required
  - `lastSyncStatus` string, nullable, required
  - `mode` 'synced' | 'linked', required
  - `ownerUserId` string, nullable, required
  - `packId` string, required
  - `recorder` string, required
  - `schedule` 'manual' | '15m' | '1h' | '4h' | '24h', required
  - `shape` 'document' | 'conversation' | 'binary' | 'structure', required
  - `sourceId` string, required
  - `sourceKey` string, required
  - `status` 'active' | 'paused' | 'deleting', required
  - `updatedAt` string, nullable, required
  - `vertical` string, required
  - `webhook` object, required
    - `enabled` boolean, required
    - `lastEventAt` string, nullable, required

## Other responses

- `400`: Validation failed.
- `401`: Missing or unknown bearer key.
- `403`: The key lacks the required scope.
- `404`: No such resource in this tenant.

---

[API](https://skmtc.dev/inite/apis/inite-brain-platform-api.md) · [All operations](https://skmtc.dev/inite/apis/inite-brain-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/inite/apis/inite-brain-platform-api/revisions/c7c3eb5e304b?raw)
