Upload your knowledge base
Neo.Tax can ingest your internal knowledge base—engineering wikis, design docs, technical blog posts—to strengthen the documentation behind your engagement. The fastest path is our direct API integration, which connects to platforms like Confluence, Notion, and SharePoint. If a direct connection isn’t an option in your environment (for example, due to network or security policy), you can provide the same data as a file export instead. This guide describes the file format we accept.
What to include
Export the knowledge base folders (also known as spaces, sections, or workspaces, depending on your platform) that are relevant to your engagement with Neo.Tax. Your account team can confirm the list with you.
- Include articles with a status of
PUBLISHED. You may also includeARCHIVEDarticles if they document relevant past work. - You don’t need to filter out anything else: rows with a status of
DRAFTorTRASHare ignored at ingestion, as are link-stub article types.
File format
We accept a CSV file (UTF-8 encoded) with one row per article. A few rules to keep the file valid:
- Use standard CSV quoting (RFC 4180): wrap any field containing commas, quotes, or line breaks in double quotes, and escape embedded double quotes by doubling them (
""). Article content almost always contains all three, so make sure your export library handles quoting—most standard CSV writers do this automatically. - Include a header row using the exact column names below. Column order doesn’t matter.
- Avoid opening and re-saving the file in Excel before sending it—Excel can silently alter encodings, dates, and long text fields.
- We also accept the same fields as JSONL (one JSON object per line) if that’s easier for your team to produce.
Required columns
| Column | Type | Description |
|---|---|---|
article_id | string | The article’s unique ID in your source system. Used to match articles across re-uploads, so it must be stable. |
title | string | The article’s title. |
content | string | The article body. HTML is preferred; plain text is also accepted. |
author_email | string | Email address of the article’s original author. |
status | string | One of DRAFT, PUBLISHED, ARCHIVED, TRASH (case-insensitive). Only PUBLISHED and ARCHIVED articles are processed. |
type | string | One of PAGE, BLOG_POST (case-insensitive). |
created_at | datetime | When the article was created in your source system, in ISO 8601 format (e.g. 2025-06-02T14:05:00Z). |
updated_at | datetime | When the article was last updated, in ISO 8601 format. |
url | string | Link to the article in your source system. Used for provenance and audit trail. |
folder_id | string | The folder (space, section, or workspace) the article belongs to. This is how articles are grouped, so use a consistent identifier per folder. |
Optional columns
These columns are truly optional—leave them out entirely, or leave individual values blank, and your file will process fine.
| Column | Type | Description |
|---|---|---|
parent_article_id | string | The article_id of the article this one is nested under, if your knowledge base is hierarchical. |
last_edited_by_email | string | Email address of the most recent editor. |
description | string | A short summary or excerpt of the article. |
visibility | string | One of PUBLIC, INTERNAL, RESTRICTED. |
Notes on article content
- Provide the rendered article body (what a reader sees), not your platform’s internal storage markup, which can contain unexpanded macros.
- Embedded images and attachments are not processed—ingestion uses the article text. Image references left in the HTML as URLs pointing back to your instance are fine; we simply don’t fetch them.
Example
A minimal file looks like this (content abbreviated for readability):
article_id,title,content,author_email,status,type,created_at,updated_at,url,folder_id
98304,"Motion Planning Service — Architecture Overview","<h1>Motion Planning Service</h1><p>This page describes…</p>",jane.doe@acmerobotics.example,PUBLISHED,PAGE,2024-03-11T09:42:00Z,2025-06-02T14:05:00Z,https://acmerobotics.example/wiki/spaces/ENG/pages/98304,ENG
102211,"Q2 Firmware Release Retrospective","<h1>Q2 Firmware Release Retrospective</h1><p>Summary of what shipped…</p>",sam.lee@acmerobotics.example,PUBLISHED,BLOG_POST,2025-07-01T16:20:00Z,2025-07-03T10:11:00Z,https://acmerobotics.example/wiki/spaces/FW/blog/102211,FW
Download the template below to start from a working file with all columns included:
Exporting from Confluence
If your knowledge base is Atlassian Confluence, the Confluence REST API provides everything the schema needs. The mapping below uses Confluence Cloud’s v2 API (GET /wiki/api/v2/pages and GET /wiki/api/v2/blogposts, requesting the body with body-format=export_view).
| Neo.Tax column | Confluence API field |
|---|---|
article_id | id |
title | title |
content | body.export_view.value |
author_email | authorId, resolved to an email via the Users API |
status | status (current → PUBLISHED, draft → DRAFT, archived → ARCHIVED, trashed → TRASH) |
type | PAGE for pages, BLOG_POST for blog posts |
created_at | createdAt |
updated_at | version.createdAt |
url | _links.webui, prefixed with your site’s base URL |
folder_id | the space key (resolve spaceId via GET /wiki/api/v2/spaces) |
parent_article_id | parentId |
last_edited_by_email | version.authorId, resolved via the Users API |
On Confluence Data Center / Server, the equivalent endpoint is GET /rest/api/content?expand=body.export_view,history,version,space, and the same fields are available under slightly different paths (history.createdBy for the author, space.key for the folder).
See Atlassian’s documentation for details: Confluence Cloud REST API v2 · Confluence Data Center REST API.
Sending your file to Neo.Tax
Share the file with your Neo.Tax account team through the secure file-transfer channel established for your engagement. If a channel hasn’t been set up yet, your account team will arrange one with you.
If a single file is very large (over ~1 GB), split the export into multiple files—one file per folder works well. All files should use the same schema. We suggest naming files neotax-kb-export-{folder}-{YYYYMMDD}.csv so re-uploads are easy to tell apart, but any naming is fine.
Updating your data
If you send an updated export later, include all articles, not just the ones that changed. Each file is treated as a full snapshot of the exported folders: existing articles are updated in place by article_id, and new articles are added. Articles missing from a later file are not deleted.
Your account team will confirm the refresh cadence that makes sense for your engagement — for most engagements this is once or twice per cycle, not a continuous sync.
What we do with this data
Knowledge base data you share with us is used solely to prepare the deliverables for your engagement. Access is restricted to the team working on your account, the data is never shared with third parties, and it is retained and deleted according to the data-handling terms of your engagement agreement. If you have questions about data handling, your account team can walk you through the specifics.