MemorySync
API Reference

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

OperationMethod and pathPythonNode.js
Provider catalogGET /api/v1/integrations/catalogintegrations.catalogintegrations.catalog
Connected integrationsGET /api/v1/integrations/connectedintegrations.connectedintegrations.connected
Integration totalsGET /api/v1/integrations/statsintegrations.statsintegrations.stats
Update an integrationPATCH /api/v1/integrations/{integration_id}integrations.updateintegrations.update
Disconnect an integrationDELETE /api/v1/integrations/{integration_id}integrations.deleteintegrations.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

RequirementContract
CredentialAn API key sent as X-API-Key.
Read scopeintegrations:read for the catalog, connected list and totals.
Write scopeintegrations:write alone is not enough for the two write operations.
RolePATCH and DELETE additionally require the authenticated principal to be an admin or owner. A key without that role receives 403 regardless of its scopes.
TenantScoped 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 os
from memorysync import MemorySyncClient
client = 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")
GET/api/v1/integrations/catalog
200 OK
FieldMeaning
idThe provider slug. This is what you pass as provider when creating a v2 connection.
name, description, category, iconFor rendering a picker.
featuresWhat the provider supports, as a list of labels.
auth_typeHow it authenticates. This decides which create operation to use.
docs_urlProvider documentation, where there is any. Nullable.
is_configuredWhether the deployment holds the credentials this provider needs.
is_connectedWhether your organization already has a connection to it.
coming_soonListed 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 os
from memorysync import MemorySyncClient
client = 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"])
GET/api/v1/integrations/connected
200 OK
FieldMeaning
idAn integer identifier. This is what PATCH and DELETE take.
provider_id, name, categoryWhich provider, and the display name given to it.
statusConnection state.
sync_enabled, sync_direction, sync_frequencyThe schedule and direction.
last_sync_at, last_sync_status, items_syncedThe last run and its outcome.
connected_at, connected_byWhen it was created and by whom.
configProvider 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 os
from memorysync import MemorySyncClient
client = 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"])
GET/api/v1/integrations/stats
200 OK

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 os
from memorysync import MemorySyncClient
client = 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"])
PATCH/api/v1/integrations/{integration_id}
200 OK
Request fieldContract
nameOptional. Display name.
sync_enabledOptional. Whether scheduled syncs run.
sync_frequencyOptional. The schedule label.
configOptional. 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 os
from memorysync import MemorySyncClient
client = MemorySyncClient(
api_key=os.environ["MEMORYSYNC_API_KEY"],
base_url="https://api.memorysync.io",
)
result = client.integrations.delete(41)
print(result["success"], result["message"])
DELETE/api/v1/integrations/{integration_id}
200 OK

Errors and next action

StatusMeaningNext action
401Missing, malformed or inactive API key.Check server configuration without printing the key.
403The key lacks integrations:read or integrations:write.Grant the scope on the key, or use a key that has it.
404The connection, object or job is not visible to this tenant.Confirm the identifier belongs to this organization.
409The connection is in a state that forbids the operation.Read the connection status first and act on it.
429Rate limited, either by MemorySync or by the upstream provider.Back off; do not tighten a polling loop in response.
5xxService failure.Treat a write outcome as uncertain and reconcile by reading the connection back.