Legacy Integrations
The original v1 integrations surface: a provider catalog, the list of what is connected, totals, and two administrative operations. It is still supported and still the only place the catalog is published, but connection management has moved to the v2 operations documented on the other connector pages.
Operations on this page
| Operation | Method and path | Python | Node.js |
|---|---|---|---|
| Provider catalog | GET /api/v1/integrations/catalog | integrations.catalog | integrations.catalog |
| Connected integrations | GET /api/v1/integrations/connected | integrations.connected | integrations.connected |
| Integration totals | GET /api/v1/integrations/stats | integrations.stats | integrations.stats |
| Update an integration | PATCH /api/v1/integrations/{integration_id} | integrations.update | integrations.update |
| Disconnect an integration | DELETE /api/v1/integrations/{integration_id} | integrations.delete | integrations.delete |
Which surface should you use?
What are you trying to do?
Find out what providers exist
Render a picker, or check whether a provider is available.
Use: Use the catalog here. It is not duplicated in v2.
Create or configure a connection
Authorise Slack, select Drive folders, set S3 prefixes.
Use: Use v2: Connection Lifecycle and the per-connector pages.
Inspect what a sync produced
Objects, memories, extraction outcomes.
Use: Use v2: Synced Objects.
Change a sync schedule or disconnect
On an integration created through the v1 surface.
Use: The two administrative operations here still apply.
Authentication and scope
| Requirement | Contract |
|---|---|
| Credential | An API key sent as X-API-Key. |
| Read scope | integrations:read for the catalog, connected list and totals. |
| Write scope | integrations:write alone is not enough for the two write operations. |
| Role | PATCH and DELETE additionally require the authenticated principal to be an admin or owner. A key without that role receives 403 regardless of its scopes. |
| Tenant | Scoped per organization, derived from the key. Every member of an organization sees the same integrations. |
1. Read the provider catalog
The catalog is the authoritative list of what can be connected, including what is not ready yet. Reading it rather than hard-coding a provider list means a client does not go stale when a provider is added.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)for provider in client.integrations.catalog():print(provider["id"], provider["name"], provider["auth_type"])print(" configured:", provider["is_configured"], "connected:", provider["is_connected"])if provider["coming_soon"]:print(" not available yet")# Narrow to one category.productivity = client.integrations.catalog(category="productivity")
| Field | Meaning |
|---|---|
id | The provider slug. This is what you pass as provider when creating a v2 connection. |
name, description, category, icon | For rendering a picker. |
features | What the provider supports, as a list of labels. |
auth_type | How it authenticates. This decides which create operation to use. |
docs_url | Provider documentation, where there is any. Nullable. |
is_configured | Whether the deployment holds the credentials this provider needs. |
is_connected | Whether your organization already has a connection to it. |
coming_soon | Listed but not yet available. Show it, do not offer it. |
2. List what is connected
The connected list covers integrations created through this v1 surface, with their schedule and last sync outcome.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)for integration in client.integrations.connected():print(integration["id"], integration["provider_id"], integration["name"])print(" status:", integration["status"], "enabled:", integration["sync_enabled"])print(" last sync:", integration["last_sync_at"], integration["last_sync_status"])print(" items synced:", integration["items_synced"])
| Field | Meaning |
|---|---|
id | An integer identifier. This is what PATCH and DELETE take. |
provider_id, name, category | Which provider, and the display name given to it. |
status | Connection state. |
sync_enabled, sync_direction, sync_frequency | The schedule and direction. |
last_sync_at, last_sync_status, items_synced | The last run and its outcome. |
connected_at, connected_by | When it was created and by whom. |
config | Provider configuration with secret-bearing keys removed before the response is built. |
3. Read the totals
A small summary for a dashboard header: how many integrations exist, how many are connected, how many AI providers the deployment has configured, and when anything last synced.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)totals = client.integrations.stats()print(totals["total_integrations"], "integrations,", totals["connected"], "connected")print("AI providers configured:", totals["ai_providers_configured"])print("last sync anywhere:", totals["last_sync"])
4. Update an integration
Changes the display name, whether it syncs, the schedule, or the configuration. Only the fields you send are changed; config is merged rather than replaced.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)updated = client.integrations.update(41,name="Notion — engineering only",sync_enabled=True,sync_frequency="daily",)print(updated["name"], updated["sync_frequency"])
| Request field | Contract |
|---|---|
name | Optional. Display name. |
sync_enabled | Optional. Whether scheduled syncs run. |
sync_frequency | Optional. The schedule label. |
config | Optional. Merged into the existing configuration, key by key. |
5. Disconnect an integration
Removes the integration record. Memories it already produced are not removed, in line with the rest of the platform: disconnecting a source and deleting what it taught you are separate decisions.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)result = client.integrations.delete(41)print(result["success"], result["message"])
Errors and next action
| Status | Meaning | Next action |
|---|---|---|
401 | Missing, malformed or inactive API key. | Check server configuration without printing the key. |
403 | The key lacks integrations:read or integrations:write. | Grant the scope on the key, or use a key that has it. |
404 | The connection, object or job is not visible to this tenant. | Confirm the identifier belongs to this organization. |
409 | The connection is in a state that forbids the operation. | Read the connection status first and act on it. |
429 | Rate limited, either by MemorySync or by the upstream provider. | Back off; do not tighten a polling loop in response. |
5xx | Service failure. | Treat a write outcome as uncertain and reconcile by reading the connection back. |