Skip to main content
Once a Knowledge instance has content_sources registered, AgentOS exposes them through the Knowledge API.
# Upload a file from a registered S3 source
curl -X POST http://localhost:7777/knowledge/remote-content \
  -F "config_id=company-s3" \
  -F "path=reports/q4-2025.pdf" \
  -F "name=Q4 Report"

Register sources

Register at least one source in content_sources on your Knowledge instance. See Cloud Storage Sources for the provider classes (S3Config, GcsConfig, SharePointConfig, GitHubConfig, AzureBlobConfig) and their parameters.
from agno.knowledge.knowledge import Knowledge
from agno.knowledge.remote_content import S3Config, GitHubConfig

knowledge = Knowledge(
    vector_db=vector_db,
    contents_db=contents_db,
    content_sources=[
        S3Config(id="company-s3", name="Company S3", bucket_name="my-bucket"),
        GitHubConfig(id="docs-repo", name="Docs Repo", repo="acme/docs", token="..."),
    ],
)
The id values (company-s3, docs-repo) are what later cURL examples pass as config_id.

Discover registered sources

The root /knowledge/config endpoint lists every configured remote source under remote_content_sources:
curl http://localhost:7777/knowledge/config | jq '.remote_content_sources'
[
  { "id": "company-s3", "name": "Company S3", "type": "s3", "prefix": null },
  { "id": "docs-repo",  "name": "Docs Repo",  "type": "github", "prefix": null }
]
To scope to a specific Knowledge instance, use the per-instance endpoint:
curl http://localhost:7777/knowledge/{knowledge_id}/sources
The id returned here is the value to pass as config_id when uploading.
type valueProvider
s3Amazon S3
gcsGoogle Cloud Storage
sharepointSharePoint
githubGitHub
azureblobAzure Blob Storage

Upload remote content

POST /knowledge/remote-content accepts application/x-www-form-urlencoded and processes the content asynchronously.
import requests

response = requests.post(
    "http://localhost:7777/knowledge/remote-content",
    data={
        "config_id": "company-s3",
        "path": "reports/q4-2025.pdf",
        "name": "Q4 Report",
        "metadata": '{"team": "finance", "year": 2025}',
    },
)

# 202 Accepted while the content is being processed
print(response.status_code, response.json())

Path semantics

  • A trailing / ingests every file under the prefix as a folder. Example: reports/.
  • No trailing / ingests a single file. Example: reports/q4-2025.pdf.
config_id and path are required. See the upload-remote-content reference for all form fields and query parameters. Valid reader_id and chunker values come from /knowledge/config under readers and chunkers.

Per-request overrides with source_params

source_params lets one configured source serve multiple targets. Today GitHub is the supported case: pass repo to point a single GitHubConfig at a different repository per request.
curl -X POST http://localhost:7777/knowledge/remote-content \
  -F "config_id=docs-repo" \
  -F "path=README.md" \
  -F 'source_params={"repo": "acme/other-repo"}'
Without source_params, the request uses the values baked into the registered config.

Browse files in a source

GET /knowledge/{knowledge_id}/sources/{source_id}/files returns paginated files and folder prefixes inside a source.
File listing is currently S3 only. Calls against gcs, sharepoint, github, or azureblob sources return 400 Bad Request with detail Source type '<ConfigClass>' does not support file listing.
curl "http://localhost:7777/knowledge/{knowledge_id}/sources/company-s3/files?prefix=reports/&limit=50"
{
  "source_id": "company-s3",
  "source_name": "Company S3",
  "prefix": "reports/",
  "folders": [
    { "prefix": "reports/2025/", "name": "2025", "is_empty": false }
  ],
  "files": [
    {
      "key": "reports/annual-summary.pdf",
      "name": "annual-summary.pdf",
      "size": 102400,
      "last_modified": "2025-01-15T10:30:00Z",
      "content_type": "application/pdf"
    }
  ],
  "meta": { "page": 1, "limit": 50, "total_pages": 1, "total_count": 1 }
}
See the list-files-in-source reference for prefix, limit, page, delimiter, and db_id. For non-S3 sources, list available content with the provider’s own tooling (for example, the GitHub API or the Azure portal) and pass the resulting path directly to POST /knowledge/remote-content.

Next Steps

Cloud Storage Sources

Configure S3, GCS, SharePoint, GitHub, and Azure Blob providers.

Manage Knowledge

Attach Knowledge instances to AgentOS and find their IDs.

Filter Knowledge

Apply metadata filters when agents search the knowledge base.

Upload Remote Content API

Full reference for POST /knowledge/remote-content.