Browse this section
API reference

Documents

Upload, list, read and delete documents directly.

Besides connector-synced content, you can push documents directly — useful for systems without a connector or for generated content.

The document object

{
  "id": "doc_01j9x4a1b2",
  "knowledge_base": "kb_01j9x3k2m7",
  "source": "api",
  "title": "Supplier onboarding SOP",
  "url": "https://intranet.example.com/sop/supplier-onboarding",
  "mime_type": "text/markdown",
  "language": "en",
  "permissions": { "users": ["*"], "groups": [] },
  "metadata": { "owner": "operations", "version": "3" },
  "status": "indexed",
  "updated_at": "2026-09-01T10:00:00Z"
}

Endpoints

MethodPathPurpose
GET/knowledge-bases/{kb}/documentsList (filter: source, status, updated_after)
POST/knowledge-bases/{kb}/documentsCreate from text/markdown/HTML or a file (multipart)
GET/documents/{id}Retrieve metadata
GET/documents/{id}/contentRetrieve extracted text
PATCH/documents/{id}Update title, url, permissions, metadata
PUT/documents/{id}/contentReplace content (re-indexes)
DELETE/documents/{id}Delete

Create from text

curl -X POST https://api.brewmycode.com/v1/knowledge-bases/kb_01j9x3k2m7/documents \
  -H "Authorization: Bearer $BMC_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "title": "Supplier onboarding SOP",
    "url": "https://intranet.example.com/sop/supplier-onboarding",
    "content": "# Supplier onboarding\n\n1. Collect …",
    "mime_type": "text/markdown",
    "permissions": { "groups": ["operations", "finance"] },
    "external_id": "sop-supplier-onboarding"
  }'

external_id makes the request an upsert: repeating it with the same id replaces the document.

Upload a file

curl -X POST https://api.brewmycode.com/v1/knowledge-bases/kb_01j9x3k2m7/documents \
  -H "Authorization: Bearer $BMC_API_KEY" \
  -F "file=@handbook.pdf" \
  -F 'permissions={"users":["*"]}'

Supported: PDF, DOCX, XLSX, PPTX, CSV, Markdown, HTML, plain text, images (OCR). Max 200 MB.

Permissions

permissions.users is a list of emails or "*" for everyone in the workspace; permissions.groups is a list of group names. Documents with no permissions are visible to nobody except admins — set them.