supermemory/apps/docs/connectors/managing-resources.mdx
MaheshtheDev 672defc08b docs: move SDK snippets to the shipped v5 call shape and finish the namespace rename (#1772)
Rewrites 339 TypeScript calls across 50 pages from the rc.5 `method({ namespace, body })` form to the shipped `method(namespace, { ... })` form, and aligns field names with the live v5 spec: `attach` to `include`, `authUrl` to `authorization`, `lastSync` to `latestRun`, `deletedCount` to `count`, and the paginated `namespaces.list()`.

Renames container tags to namespaces across concepts, connectors, integrations and snippets. The namespace pages keep container tag in the description, search keywords and a rename note so old searches still land, and the v3 reference page points at v5.

The migration guide's SDK table now covers both 5.0.0 SDKs, and the SDK integration page uses the real client options (`baseUrl`, `timeoutInSeconds`, `maxRetries`) and error classes.
2026-10-06 17:06:38 +00:00

266 lines
7.6 KiB
Text

---
title: 'Managing Connector Selection'
sidebarTitle: 'Managing Resources'
description: 'Choose what a connector syncs with the hosted picker or a direct selection update'
icon: 'folder-sync'
---
<Note>
**Selectable connectors:** GitHub (repositories), Gmail (labels) and Google Drive (files and folders) let you choose what to sync. Other connectors sync everything and return `selection: null`.
</Note>
Some connectors let you select which resources to sync. v5 exposes this through two calls on the connector itself: read it with `include: "picker"` to get a hosted picker URL, or send the ids directly with `connectors.update`.
## Open the Hosted Picker
`GET /ns/{namespace}/connectors/{id}?include=picker`
Returns a one-time picker URL. Send the user there; Supermemory lists their resources, saves the selection and starts a sync. Pass `returnUrl` to choose where the picker sends the user when they finish.
<CodeGroup>
```typescript Typescript
import { Supermemory } from "supermemory"
const supermemory = new Supermemory({ apiKey: process.env.SUPERMEMORY_API_KEY })
const connector = await supermemory.connectors.get("user-123", connectorId, {
include: "picker",
returnUrl: "https://yourapp.com/settings/integrations"
})
console.log("Picker URL:", connector.picker?.url)
console.log("Expires at:", connector.picker?.expiresAt)
console.log("Selectable:", connector.capabilities.selectable)
```
```python Python
from supermemory import Supermemory
import os
client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))
connector = client.connectors.get(
"user-123",
connector_id,
include=["picker"],
return_url="https://yourapp.com/settings/integrations",
)
print(f"Picker URL: {connector.picker.url if connector.picker else None}")
print(f"Expires at: {connector.picker.expires_at if connector.picker else None}")
print(f"Selectable: {connector.capabilities.selectable}")
```
```bash cURL
curl "https://api.supermemory.ai/ns/user-123/connectors/{connectorId}?include=picker&returnUrl=https%3A%2F%2Fyourapp.com%2Fsettings%2Fintegrations" \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY"
```
</CodeGroup>
### Query parameters
- `include`: `picker` for the hosted picker URL, `syncs` for recent sync runs, or `syncs,picker` for both
- `returnUrl`: Optional. Where the hosted picker sends the user when they finish
### Response
```json
{
"id": "PTzGiUYei7pgzg5buzZHgA",
"provider": "github",
"namespace": "user-123",
"capabilities": { "selectable": true, "webhooks": true },
"selection": {
"repos": [
{ "id": "123456789", "name": "your-org/documentation" }
]
},
"picker": {
"url": "https://...",
"expiresAt": "2024-01-15T11:30:00.000Z"
}
}
```
<Note>
The picker link works once, in any browser. `picker` is `null` for connectors that sync everything.
</Note>
## Set the Selection Directly
`PATCH /ns/{namespace}/connectors/{id}`
Send the ids to sync, grouped by kind. The new selection replaces the current one and starts a sync. Webhooks are registered for the selected resources.
<CodeGroup>
```typescript Typescript
import { Supermemory } from "supermemory"
const supermemory = new Supermemory({ apiKey: process.env.SUPERMEMORY_API_KEY })
const connector = await supermemory.connectors.update("user-123", connectorId, {
selection: {
repos: ["123456789", "987654321"],
},
})
console.log("Selection:", connector.selection)
console.log("Last sync:", connector.latestRun?.system.status)
```
```python Python
from supermemory import Supermemory
import os
client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))
connector = client.connectors.update(
"user-123",
connector_id,
selection={"repos": ["123456789", "987654321"]},
)
print(f"Selection: {connector.selection}")
print(f"Last sync: {connector.latest_run.system.status}")
```
```bash cURL
curl -X PATCH "https://api.supermemory.ai/ns/user-123/connectors/{connectorId}" \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"selection": {
"repos": ["123456789", "987654321"]
}
}'
```
</CodeGroup>
### Request body
```json
{
"selection": {
"repos": ["123456789"]
}
}
```
The selection key depends on the provider:
- GitHub: `repos` (repository ids)
- Gmail: `labels` (label ids, for example `INBOX`)
- Google Drive: `files` and `folders` (Drive ids)
You can send `documentLimit` in the same body. Each call must include `selection`, `documentLimit`, or both.
### Response
The updated connector object, including the saved `selection` as `{ id, name }` pairs.
```json
{
"id": "PTzGiUYei7pgzg5buzZHgA",
"provider": "github",
"selection": {
"repos": [
{ "id": "123456789", "name": "your-org/documentation" },
{ "id": "987654321", "name": "your-org/api-docs" }
]
},
"latestRun": { "errorCode": null, "error": null, "system": { "status": "running", "startedAt": "...", "completedAt": null } }
}
```
### Error Responses
- `400`: Connector does not support selection
- `401`: Unauthorized
- `404`: Connector not found
<Note>
**Automatic Sync:** After a selection is saved, a sync starts for the connector. You don't need to call `connectors.sync` afterwards.
</Note>
## Example: GitHub repository selection
Here's a complete example for GitHub:
<CodeGroup>
```typescript Typescript
// 1. Create the connector
const created = await supermemory.connectors.create("user-123", {
provider: "github",
redirectUrl: "https://yourapp.com/callback"
})
// 2. Send the user to GitHub; the connector becomes visible once they authorize
if (created.authorization) window.location.href = created.authorization.url
// 3. After the callback, open the hosted picker so the user chooses repositories
const connector = await supermemory.connectors.get("user-123", created.id, {
include: "picker",
returnUrl: "https://yourapp.com/settings/integrations"
})
if (connector.picker) window.location.href = connector.picker.url
// 4. Or, if you already know the repository ids, set them directly
await supermemory.connectors.update("user-123", created.id, {
selection: { repos: selectedRepositoryIds },
})
```
```python Python
# 1. Create the connector
created = client.connectors.create(
"user-123",
request={
"provider": "github",
"redirectUrl": "https://yourapp.com/callback",
},
)
# 2. Send the user to GitHub; the connector becomes visible once they authorize
print(f"Redirect to: {created.authorization.url}")
# 3. After the callback, open the hosted picker so the user chooses repositories
connector = client.connectors.get(
"user-123",
created.id,
include=["picker"],
return_url="https://yourapp.com/settings/integrations",
)
if connector.picker:
print(f"Redirect to: {connector.picker.url}")
# 4. Or, if you already know the repository ids, set them directly
client.connectors.update(
"user-123",
created.id,
selection={"repos": selected_repository_ids},
)
```
```bash cURL
# 1. Create the connector
curl -X POST "https://api.supermemory.ai/ns/user-123/connectors" \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"provider": "github", "redirectUrl": "https://yourapp.com/callback"}'
# 2. ... (user authorizes at authorization.url) ...
# 3. Get a one-time hosted picker URL
curl "https://api.supermemory.ai/ns/user-123/connectors/{connectorId}?include=picker" \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY"
# 4. Or set the repositories directly
curl -X PATCH "https://api.supermemory.ai/ns/user-123/connectors/{connectorId}" \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"selection": {
"repos": ["123456789"]
}
}'
```
</CodeGroup>