curl --request POST \
--url https://api.evermind.ai/api/v2/object/sign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objectList": [
{
"fileId": "file-1",
"fileName": "photo.jpg",
"fileType": "image"
}
]
}
'import requests
url = "https://api.evermind.ai/api/v2/object/sign"
payload = { "objectList": [
{
"fileId": "file-1",
"fileName": "photo.jpg",
"fileType": "image"
}
] }
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({objectList: [{fileId: 'file-1', fileName: 'photo.jpg', fileType: 'image'}]})
};
fetch('https://api.evermind.ai/api/v2/object/sign', 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.evermind.ai/api/v2/object/sign",
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([
'objectList' => [
[
'fileId' => 'file-1',
'fileName' => 'photo.jpg',
'fileType' => 'image'
]
]
]),
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.evermind.ai/api/v2/object/sign"
payload := strings.NewReader("{\n \"objectList\": [\n {\n \"fileId\": \"file-1\",\n \"fileName\": \"photo.jpg\",\n \"fileType\": \"image\"\n }\n ]\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.evermind.ai/api/v2/object/sign")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"objectList\": [\n {\n \"fileId\": \"file-1\",\n \"fileName\": \"photo.jpg\",\n \"fileType\": \"image\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evermind.ai/api/v2/object/sign")
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 \"objectList\": [\n {\n \"fileId\": \"file-1\",\n \"fileName\": \"photo.jpg\",\n \"fileType\": \"image\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"request_id": "<string>",
"status": 123,
"result": {
"data": {
"objectList": [
{
"fileId": "<string>",
"fileName": "<string>",
"fileType": "<string>",
"objectKey": "<string>",
"objectUrl": "<string>",
"objectSignedInfo": {
"url": "<string>",
"fields": {},
"maxSize": 123
}
}
]
}
}
}{}{}{}{}Get multimodal upload URLs
Presign a direct-to-storage upload for multimodal data.
POST the file to the returned URL yourself, then reference the returned object key as a message’s content uri (/api/v2/memory/add) or as a document’s content uri (…/documents).
Uploading first and passing the key is the only path that gets a non-text item parsed — see base64 on the content object. The Python SDK’s upload() does both steps in one call.
curl --request POST \
--url https://api.evermind.ai/api/v2/object/sign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objectList": [
{
"fileId": "file-1",
"fileName": "photo.jpg",
"fileType": "image"
}
]
}
'import requests
url = "https://api.evermind.ai/api/v2/object/sign"
payload = { "objectList": [
{
"fileId": "file-1",
"fileName": "photo.jpg",
"fileType": "image"
}
] }
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({objectList: [{fileId: 'file-1', fileName: 'photo.jpg', fileType: 'image'}]})
};
fetch('https://api.evermind.ai/api/v2/object/sign', 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.evermind.ai/api/v2/object/sign",
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([
'objectList' => [
[
'fileId' => 'file-1',
'fileName' => 'photo.jpg',
'fileType' => 'image'
]
]
]),
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.evermind.ai/api/v2/object/sign"
payload := strings.NewReader("{\n \"objectList\": [\n {\n \"fileId\": \"file-1\",\n \"fileName\": \"photo.jpg\",\n \"fileType\": \"image\"\n }\n ]\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.evermind.ai/api/v2/object/sign")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"objectList\": [\n {\n \"fileId\": \"file-1\",\n \"fileName\": \"photo.jpg\",\n \"fileType\": \"image\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evermind.ai/api/v2/object/sign")
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 \"objectList\": [\n {\n \"fileId\": \"file-1\",\n \"fileName\": \"photo.jpg\",\n \"fileType\": \"image\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"request_id": "<string>",
"status": 123,
"result": {
"data": {
"objectList": [
{
"fileId": "<string>",
"fileName": "<string>",
"fileType": "<string>",
"objectKey": "<string>",
"objectUrl": "<string>",
"objectSignedInfo": {
"url": "<string>",
"fields": {},
"maxSize": 123
}
}
]
}
}
}{}{}{}{}Authorizations
API key issued by EverOS, sent as Authorization: Bearer <api_key>.
Body
Objects to sign for upload. At most 50 per request
(status: 1007 if exceeded). Each fileId must be unique within
the request (status: 1009 on duplicates).
1 - 50 elementsShow child attributes
Show child attributes
Response
Envelope response (MMS returns HTTP 200 for every business outcome;
only unmatched routes return 404). status: 0 means success and
result.data is a SignResponse. Non-zero status values seen on
this endpoint:
20003— request body bind failure (malformed JSON).2018— parameter validation failed (e.g. missingobjectList,fileId,fileName, orfileType);result.datais the validator error string.1012—mms-tokenmissing, invalid, expired, or revoked (emitted by the auth middleware before the handler runs).1013— token lacks the requiredobject:signscope.1007—objectListexceeds the per-request limit of 50.1002—fileTypenot one of image/video/file.1009— duplicatefileIdwithin the request.1004— S3 operation failed (bucket unavailable).1005— presigned POST generation failed.2015— object metadata persistence failed.20001— unhandled internal server error.
Response envelope for the sign endpoint. The result.data shape
depends on status:
status: 0(success) —result.datais aSignResponse, as modelled below.status: 2018(validation failed) —result.datais a plain string carrying the validator error message, not aSignResponse.- all other non-zero statuses —
result.dataisnull.
Generated clients should treat result.data as populated only when
status is 0.
Was this page helpful?

