Research Upload
How to upload, manage, and process research sources in Praxiom AI.
Overview
Research sources are the foundation of everything in Praxiom AI. They represent the raw user voice — interviews, support tickets, surveys, usage data, and feedback — that the AI synthesizes into structured insights. This guide covers uploading, managing, and monitoring the processing of your research files.
How It Works
When you upload a file, Praxiom stores it in cloud storage (Cloudflare R2), creates a database record, and triggers background processing. Processing extracts text from PDFs, transcribes audio/video, and parses structured data from CSVs — making the content available for AI synthesis.
Upload a file
Send a multipart form request to POST /api/research/upload with the following fields:
| Field | Type | Description |
|---|---|---|
file | File | The research file (max 100 MB) |
workspace_id | UUID | Target workspace |
source_type | String | One of: interview, support_ticket, survey, usage_data, feedback, other |
title | String | A human-readable title for this source |
The response returns a ResearchSourceResponse with the new source's id and a processing_status of pending.
Wait for processing
Processing runs in the background. Poll the source status via GET /api/research/sources/{source_id} or list all sources with GET /api/research/sources?workspace_id=....
The processing_status field transitions through:
pending— Queued for extractioncompleted— Text extracted and ready for synthesisfailed— Extraction encountered an error
Synthesize
Once sources are completed, select them for synthesis. See the Synthesis guide for details.
Supported File Types
Praxiom accepts a wide range of document formats:
- Documents — PDF, Word (.docx), plain text, Markdown, JSON
- Spreadsheets — CSV, Excel (.xlsx)
- Audio/Video — MP3, MP4, WAV, WebM (auto-transcribed)
- Images — PNG, JPEG, TIFF (OCR-extracted)
Executable files (.exe, .sh, .py, .js, .bat, etc.) are blocked for security. The upload endpoint validates both MIME types and file magic bytes.
API Reference
List Sources
GET /api/research/sources?workspace_id={id}
Optional query parameters:
| Parameter | Description |
|---|---|
source_type | Filter by type (e.g. interview) |
processing_status | Filter by status (e.g. completed) |
limit | Max results (default 200, max 500) |
offset | Pagination offset |
Returns { sources: [...], total: N }.
Get Single Source
GET /api/research/sources/{source_id}
Returns the full source record including file_url, file_type, file_size_bytes, extracted_text, and transcript.
Delete Source
DELETE /api/research/sources/{source_id}
Removes the source record and its file from cloud storage. Returns 204 No Content.
Reprocess Source
POST /api/research/sources/{source_id}/reprocess
Resets a pending or failed source back to pending and retriggers background extraction. Useful when a source is stuck. Returns the updated source record.
Sources that have already completed successfully cannot be reprocessed. The endpoint returns 422 with code ALREADY_PROCESSED.
Key Concepts
- Source types categorize your research for better synthesis context. The AI uses this metadata to weight different kinds of evidence appropriately.
- File size limit is 100 MB per upload. Empty files are rejected with a
400. - Usage limits are enforced per workspace based on your plan. If you hit the file upload limit, the API returns
402with codeUSAGE_LIMIT_EXCEEDED. - Workspace access is checked on every operation. You must be a member of the workspace to upload, view, or delete sources.
What's Next
Once your sources are processed, move on to the Synthesis guide to extract structured insights.
Was this helpful?