Data Providers
Data providers connect MemoryLayer to external data sources for automated document ingestion. Configure a provider once, set a sync schedule, and MemoryLayer pulls new and updated content automatically into the documents pipeline.
This page covers the open-source /v1/data-providers REST API and the OSS connector set. For the full enterprise connector pack (S3, GitHub, Google Drive, Dropbox, Slack, Teams, Discord, web scraper, manual upload, and the VFS-backed local_fs watcher), see Enterprise Data Connectors.
The REST API surface is identical in OSS and Enterprise. The only thing the enterprise package adds is more
provider_typevalues backed by thememorylayer-data-connectorspeer service.
OSS Connector Set
The open-source server ships with a single connector type:
| Type | Description | Typical Connection Args |
|---|---|---|
local | Local filesystem path on the server host | root_path, glob, recursive |
local is the default provider_type value if you omit it. A _default local provider is auto-created in each workspace on first access, so listing providers in a fresh workspace will always show at least one entry.
OSS scope note: in the OSS build, the
localprovider is a registry / metadata surface only — the/v1/data-providers/{provider_id}/syncendpoint succeeds but is implemented as a no-op (returns an empty document list) and theschedulefield is stored but not honored by any built-in scheduler. The endpoints exist so OSS clients can persist provider records and stay forward-compatible with a Forge / connector-pack deployment that does the actual sync work. Use OSS data-providers for inventory and configuration; use the enterprise connector pack for actual scheduled ingestion.
Create a Local Filesystem Provider
curl -X POST "$MEMORYLAYER_URL/v1/data-providers" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Engineering Docs (local)", "provider_type": "local", "description": "Local docs directory mounted into the server", "enabled": true, "connection_args": { "root_path": "/data/docs/engineering", "glob": "**/*.md", "recursive": true }, "schedule": "0 2 * * *", "metadata": {"team": "engineering"} }'Fields:
| Field | Required | Description |
|---|---|---|
name | Yes | Provider name (must not be empty) |
provider_type | No | Connector type (defaults to local in OSS) |
description | No | Human-readable description |
enabled | No | Whether the provider is active (default true) |
connection_args | No | Non-sensitive connection parameters |
encrypted_args | No | Sensitive credentials (stored encrypted, never returned in API responses) |
schedule | No | Cron expression for automatic sync |
metadata | No | Arbitrary key-value metadata |
List Providers
curl "$MEMORYLAYER_URL/v1/data-providers?limit=50&offset=0" \ -H "Authorization: Bearer $API_KEY"Get a Provider
curl "$MEMORYLAYER_URL/v1/data-providers/$PROVIDER_ID" \ -H "Authorization: Bearer $API_KEY"The response never includes encrypted_args — only non-sensitive connection_args are returned.
Update a Provider
Only provided fields are updated; others remain unchanged.
curl -X PUT "$MEMORYLAYER_URL/v1/data-providers/$PROVIDER_ID" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "schedule": "0 */6 * * *", "connection_args": { "root_path": "/data/docs/engineering", "glob": "**/*.{md,txt}", "recursive": true } }'Delete a Provider
curl -X DELETE "$MEMORYLAYER_URL/v1/data-providers/$PROVIDER_ID" \ -H "Authorization: Bearer $API_KEY"Deleting a provider does not delete previously ingested documents or memories.
Sync Scheduling
The schedule field accepts standard cron expressions:
| Expression | Meaning |
|---|---|
0 2 * * * | Daily at 2:00 AM |
0 */6 * * * | Every 6 hours |
0 0 * * 1 | Weekly on Monday at midnight |
*/30 * * * * | Every 30 minutes |
Set schedule to null to disable automatic sync. The last_sync_at field on the provider record shows the timestamp of the most recent successful sync.
You can also trigger a one-off sync at any time:
curl -X POST "$MEMORYLAYER_URL/v1/data-providers/$PROVIDER_ID/sync" \ -H "Authorization: Bearer $API_KEY"OSS behaviour: in the open-source server the local connector’s
sync()is a no-op — the endpoint returns success with an emptysynced_documentslist and theschedulecron is stored but never fired. The enterprise connector pack and Forge are what turn these calls into real ingestion runs. The patterns above are still the right way to configure providers in OSS so the same records work unchanged once a sync-capable deployment is in place.
Related Pages
- Document Ingestion — how ingested documents become memories
- Enterprise Data Connectors — S3, GitHub, GDrive, Dropbox, Slack, Teams, Discord, and the rest of the connector pack