Upsert a RAG document
curl --request POST \
--url https://api.veryfront.com/projects/{project_reference}/rag/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"expected_revision": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"type": "<string>",
"metadata": {}
}
'import requests
url = "https://api.veryfront.com/projects/{project_reference}/rag/documents"
payload = {
"title": "<string>",
"expected_revision": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"type": "<string>",
"metadata": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
expected_revision: '<string>',
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
source: '<string>',
type: '<string>',
metadata: {}
})
};
fetch('https://api.veryfront.com/projects/{project_reference}/rag/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.veryfront.com/projects/{project_reference}/rag/documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'expected_revision' => '<string>',
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'source' => '<string>',
'type' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.veryfront.com/projects/{project_reference}/rag/documents"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"expected_revision\": \"<string>\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.veryfront.com/projects/{project_reference}/rag/documents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"expected_revision\": \"<string>\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/projects/{project_reference}/rag/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"expected_revision\": \"<string>\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"document": {
"revision": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"source": "<string>",
"type": "<string>",
"metadata": {},
"created_at": "<string>",
"updated_at": "<string>"
}
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}Upsert a RAG document
Creates a project RAG document record or updates an existing record by ID.
POST
/
projects
/
{project_reference}
/
rag
/
documents
Upsert a RAG document
curl --request POST \
--url https://api.veryfront.com/projects/{project_reference}/rag/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"expected_revision": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"type": "<string>",
"metadata": {}
}
'import requests
url = "https://api.veryfront.com/projects/{project_reference}/rag/documents"
payload = {
"title": "<string>",
"expected_revision": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "<string>",
"type": "<string>",
"metadata": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
expected_revision: '<string>',
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
source: '<string>',
type: '<string>',
metadata: {}
})
};
fetch('https://api.veryfront.com/projects/{project_reference}/rag/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.veryfront.com/projects/{project_reference}/rag/documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'expected_revision' => '<string>',
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'source' => '<string>',
'type' => '<string>',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.veryfront.com/projects/{project_reference}/rag/documents"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"expected_revision\": \"<string>\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.veryfront.com/projects/{project_reference}/rag/documents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"expected_revision\": \"<string>\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/projects/{project_reference}/rag/documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"expected_revision\": \"<string>\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"document": {
"revision": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"source": "<string>",
"type": "<string>",
"metadata": {},
"created_at": "<string>",
"updated_at": "<string>"
}
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}Authorizations
bearerAuthapiKeyAuth
Use a JWT bearer token or a Veryfront API key in the Authorization header.
Path Parameters
Project ID or slug.
Body
application/json
Document title shown to operators and AI agents.
Minimum string length:
1Require this existing document revision. Null creates only if absent; omit for the original unconditional upsert behavior. A stale revision returns 412.
Pattern:
^[a-f0-9]{64}$Existing document ID to update. Omit to create a new document.
Optional upstream source reference such as a file path or URL.
Optional document type label used for retrieval metadata.
Optional structured metadata to persist alongside the document.
Show child attributes
Show child attributes
Response
Created or updated RAG document.
Created or updated RAG document.
Show child attributes
Show child attributes