---
title: "Connect a non-OAuth app with user-supplied credentials"
method: POST
path: "/v1/integrations/connect-key"
tags: ["integrations"]
---

# Connect a non-OAuth app with user-supplied credentials

`POST /v1/integrations/connect-key`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/integrations/connect-key`
- Auth: HTTP bearer

Connects a non-OAuth app with user-supplied credentials. Brokered providers receive their credentials in a provider vault; Patricia seals validated native credential bundles with its account. The account is recorded with its sharing scope and its tools sync after the database commit. Returns the recorded account.

## Headers

- `X-Tenant-Id` string, nullable

## Request body

- ConnectKeyBody: Submit a non-OAuth toolkit's user-supplied credentials to connect it. ``credentials`` is the toolkit's field map, which can contain secrets. A brokered provider receives its values, while a native adapter can return a validated bundle for Patricia to seal. The route does not log them. ``extra="forbid"`` rejects unexpected top-level keys.
  - `app_slug` string, required
  - `credentials` object, required
  - `visibility` 'team' | 'personal': Who, within a tenant, may use a connected account's tools. ``TEAM``: any actor in the tenant. ``PERSONAL``: only the actor who connected it. Designed to extend to a ``GROUP`` scope later (the Groups model is already on main).
  - `reconnect_account_id` string, uuid, nullable
  - `attempt_id` string, uuid, nullable

## Response `202`

Successful Response

- ConnectedAccountResponse
  - `id` string, uuid, required
  - `provider` string, required
  - `app_slug` string, nullable
  - `status_code` string, required
  - `visibility_code` 'team' | 'personal': Who, within a tenant, may use a connected account's tools. ``TEAM``: any actor in the tenant. ``PERSONAL``: only the actor who connected it. Designed to extend to a ``GROUP`` scope later (the Groups model is already on main).
  - `sync_enqueued` boolean, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
