Skip to main content
POST
/
insert
Insert
curl --request POST \
  --url https://api.example.com/insert \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "content": "<string>",
  "title": "<string>",
  "tags": [
    "<string>"
  ],
  "metadata": {}
}
'
{
  "success": true,
  "job_id": "job_abc123",
  "message": "Content queued for processing"
}
Insert text content into Vrin. The content is chunked, facts are extracted (entities, relationships, attributes), and everything is indexed for retrieval. Insertion is asynchronous — the endpoint returns a job_id immediately and processes in the background.
Authorization
string
required
Bearer token. Example: Bearer vrin_abc123
content
string
required
Text content to insert.
title
string
default:"Untitled"
Document title for search results and source attribution.
tags
string[]
default:"[]"
Tags for categorization.
metadata
object
default:"{}"
Arbitrary metadata attached to the document.
{
  "success": true,
  "job_id": "job_abc123",
  "message": "Content queued for processing"
}

Job status polling

After receiving the job_id, poll the status endpoint:
GET /job-status/{job_id}
{
  "job_id": "job_abc123",
  "status": "extracting",
  "progress": 0.65,
  "message": "Extracting facts from chunks..."
}

Job status values

StatusDescription
pendingJob is queued
chunkingSplitting content into chunks
extractingExtracting facts with LLM
storingWriting to graph + vector store
completedProcessing finished successfully
failedProcessing failed (see error_details)

Completed job

{
  "job_id": "job_abc123",
  "status": "completed",
  "progress": 1.0,
  "data": {
    "facts_extracted": 18,
    "chunks_created": 3,
    "document_id": "doc_xyz"
  }
}

SDK usage

The Python SDK handles polling automatically:
# Synchronous (waits for completion)
result = client.insert("content...", title="My Document")

# Asynchronous (returns job_id)
job_id = client.insert("content...", wait=False)
status = client.get_job_status(job_id)