How it works
1
Reviews become judgments
Every review decision your users make in your app is recorded as a judgment: the decision, the reasoning, who decided, and what they decided on. This happens automatically. There is no “create judgment” endpoint.
2
You add knowledge
Ingest your guidelines, standards, and policy docs. Memory converts each file to markdown, extracts rules, and embeds it.
3
You query both
Use
search for raw decision records, ask for a written answer with citations, and suggest for a recommendation on a new item.4
Memory derives insights
Reviewer profiles, decision patterns, stats, and alerts build up from those judgments over time.
A new workspace starts empty.
ask returns an empty answer with confidence: 0 until enough review history exists. Memory returns nothing rather than inventing an answer.Quickstart
Every endpoint is aPOST under https://api.velt.dev/v2/. The examples below read your API key and Auth Token from $VELT_API_KEY and $VELT_AUTH_TOKEN.
Add a knowledge source
Base64-encode a file and send it. Ingestion runs in the background and returns a Poll with that Files up to 5 MB go inline. For files up to 30 MB, call Get Upload URL,
sourceId.sourceId until status is completed or failed:PUT the bytes to the returned uploadUrl, then ingest with { "source": "fileRef", "fileRef": "<gs:// URI>", "mimeType": "..." }.Search past decisions
Use Each result carries the
search when you want the underlying records instead of a written answer.reasoning, decision, confidence, who decided (actionUser), and a similarity score.Narrow your results
Add these fields tosearch and ask to control what Memory reads.
All endpoints
Search and Ask
Knowledge
Ingest · Ingest Status · Upload URL · Search · List · Rules · Update · Download · Delete
Insights
Alerts
List · Dismiss · Mark Actioned · Get Config · Update Config
Good to know
- Judgments are read-only. They come from your users’ review activity, so a new workspace has none until people start reviewing. Comments from older SDK clients are enriched into Memory too, including a one-time backfill of historical data.
- Ingestion is asynchronous.
ingestreturnsprocessing. Pollingest-statusuntil it iscompletedorfailed. - Supported file types: PDF, CSV, Excel (
.xlsx), and plain text. - File limits: 5 MB inline, 30 MB by reference.
- Duplicate uploads report the original source’s status, so a duplicate can stay
processinguntil the original finishes.completedalways means safe to download. - Knowledge rate limits, per API key per minute:
knowledge/ingest-status600,knowledge/search120,knowledge/upload-url100,knowledge/ingest30,knowledge/delete30. Going over returnsRESOURCE_EXHAUSTED, so keep bulk imports and status polling under those ceilings.
Errors
On a validation error, every memory endpoint returns
details.issues alongside message and status, listing each failing field.
The most common INVALID_ARGUMENT causes:
filters.annotationIdwithoutorganizationId.documentIdwithoutorganizationIdonknowledge/ingestorknowledge/upload-url.- A
dateRangewhosestartis after itsend. - An unsupported file type, or an inline file over 5 MB. Use Get Upload URL for larger files.
- An unrecognized field on
knowledge/ingest,knowledge/upload-url,knowledge/ingest-status,knowledge/delete, orknowledge/search. These five reject unknown keys, so a typo likebas64fails instead of being ignored.knowledge/searchis workspace-wide and rejectsorganizationIdanddocumentId.

