V2 endpoint — requires Pro, Team, or Enterprise plan.
Ingest an array of artifacts in a single request. Supports async indexing with job IDs so your application doesn’t block on indexing completion.
Request
Array of artifacts to ingest. Each artifact follows the same shape as /v1/ingest. Type of artifact: chat_turn, tool_call, tool_result, document, note, meeting_transcript, email, calendar_event, or attachment.
The artifact content. Structure depends on artifact_type.
ISO 8601 timestamp. Defaults to now.
Access control: visibility (public, private, restricted), allowed_actors, denied_actors, rbac_tags.
Deduplicate: same key = same artifact, no duplicate ingestion.
Scope to a conversation session.
Scope to a thread within a session.
The agent or user producing these artifacts.
When true, returns job IDs immediately instead of waiting for indexing to finish. Use GET /v2/jobs/ to track progress.
Response — synchronous
Workspace these artifacts were ingested into.
One entry per artifact. UUID of the stored artifact.
UUIDs of the indexed spans (chunks).
Response — async (async_index: true)
One entry per artifact queued for indexing.
Examples
Synchronous batch
Async with job tracking
curl
from nined.memory import MemoryClientV2
client = MemoryClientV2(
base_url = "https://api.9dlabs.xyz" ,
api_key = "your-key" ,
workspace_id = "ws_ops" ,
)
result = client.ingest([
{
"artifact_type" : "document" ,
"raw_payload" : { "title" : "Deploy Runbook" , "content" : "Step 1: verify staging..." },
},
{
"artifact_type" : "note" ,
"raw_payload" : { "content" : "Post-mortem: DB failover took 4 minutes." },
},
{
"artifact_type" : "chat_turn" ,
"raw_payload" : { "role" : "user" , "content" : "Can we reduce failover time?" },
},
])
for item in result[ "ingested" ]:
print ( f "Stored { item[ 'artifact_id' ] } ( { len (item[ 'span_ids' ]) } spans)" )
{
"workspace_id" : "ws_ops" ,
"ingested" : [
{
"artifact_id" : "a1b2c3d4-..." ,
"span_ids" : [ "s1a2b3c4-..." , "s5e6f7g8-..." ],
"created" : "2025-03-30T12:00:00Z"
}
]
}
Use idempotency_key on each artifact when retrying a failed batch. Artifacts with a key you’ve already ingested are returned immediately without creating duplicates.