cURL
curl --fail-with-body https://api.pre.dev/v1/embeddings \
-H "Authorization: Bearer $PREDEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "openai/text-embedding-3-small", "input": ["pre.dev builds software from a spec", "credits pay for model calls"]}'import os
from openai import OpenAI
client = OpenAI(base_url="https://api.pre.dev/v1", api_key=os.environ["PREDEV_API_KEY"])
result = client.embeddings.create(
model="openai/text-embedding-3-small",
input=["pre.dev builds software from a spec", "credits pay for model calls"],
)
print(len(result.data[0].embedding))import OpenAI from 'openai';
const client = new OpenAI({ baseURL: 'https://api.pre.dev/v1', apiKey: process.env.PREDEV_API_KEY });
const result = await client.embeddings.create({
model: 'openai/text-embedding-3-small',
input: ['pre.dev builds software from a spec', 'credits pay for model calls'],
});
console.log(result.data[0].embedding.length);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pre.dev/v1/embeddings",
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([
'model' => 'openai/text-embedding-3-small',
'input' => [
'pre.dev builds software from a spec',
'credits pay for model calls'
]
]),
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.pre.dev/v1/embeddings"
payload := strings.NewReader("{\n \"model\": \"openai/text-embedding-3-small\",\n \"input\": [\n \"pre.dev builds software from a spec\",\n \"credits pay for model calls\"\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.pre.dev/v1/embeddings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"openai/text-embedding-3-small\",\n \"input\": [\n \"pre.dev builds software from a spec\",\n \"credits pay for model calls\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pre.dev/v1/embeddings")
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 \"model\": \"openai/text-embedding-3-small\",\n \"input\": [\n \"pre.dev builds software from a spec\",\n \"credits pay for model calls\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
0.0123,
-0.0456,
0.0789
]
},
{
"object": "embedding",
"index": 1,
"embedding": [
-0.0211,
0.0302,
0.0118
]
}
],
"model": "openai/text-embedding-3-small",
"usage": {
"prompt_tokens": 13,
"total_tokens": 13
}
}Embeddings
Embeddings and rerank
POST /v1/embeddings and POST /v1/rerank, with the embedding model list.
POST
/
v1
/
embeddings
cURL
curl --fail-with-body https://api.pre.dev/v1/embeddings \
-H "Authorization: Bearer $PREDEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "openai/text-embedding-3-small", "input": ["pre.dev builds software from a spec", "credits pay for model calls"]}'import os
from openai import OpenAI
client = OpenAI(base_url="https://api.pre.dev/v1", api_key=os.environ["PREDEV_API_KEY"])
result = client.embeddings.create(
model="openai/text-embedding-3-small",
input=["pre.dev builds software from a spec", "credits pay for model calls"],
)
print(len(result.data[0].embedding))import OpenAI from 'openai';
const client = new OpenAI({ baseURL: 'https://api.pre.dev/v1', apiKey: process.env.PREDEV_API_KEY });
const result = await client.embeddings.create({
model: 'openai/text-embedding-3-small',
input: ['pre.dev builds software from a spec', 'credits pay for model calls'],
});
console.log(result.data[0].embedding.length);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pre.dev/v1/embeddings",
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([
'model' => 'openai/text-embedding-3-small',
'input' => [
'pre.dev builds software from a spec',
'credits pay for model calls'
]
]),
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.pre.dev/v1/embeddings"
payload := strings.NewReader("{\n \"model\": \"openai/text-embedding-3-small\",\n \"input\": [\n \"pre.dev builds software from a spec\",\n \"credits pay for model calls\"\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.pre.dev/v1/embeddings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"openai/text-embedding-3-small\",\n \"input\": [\n \"pre.dev builds software from a spec\",\n \"credits pay for model calls\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pre.dev/v1/embeddings")
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 \"model\": \"openai/text-embedding-3-small\",\n \"input\": [\n \"pre.dev builds software from a spec\",\n \"credits pay for model calls\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
0.0123,
-0.0456,
0.0789
]
},
{
"object": "embedding",
"index": 1,
"embedding": [
-0.0211,
0.0302,
0.0118
]
}
],
"model": "openai/text-embedding-3-small",
"usage": {
"prompt_tokens": 13,
"total_tokens": 13
}
}POST https://api.pre.dev/v1/embeddings takes the OpenAI-compatible embeddings request and returns the embeddings response. GET /v1/embeddings/models lists embedding models with credit prices; it is free and not rate-limited.
curl --fail-with-body https://api.pre.dev/v1/embeddings \
-H "Authorization: Bearer $PREDEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "openai/text-embedding-3-small", "input": ["pre.dev builds software from a spec", "credits pay for model calls"]}'
import OpenAI from 'openai';
const client = new OpenAI({ baseURL: 'https://api.pre.dev/v1', apiKey: process.env.PREDEV_API_KEY! });
const result = await client.embeddings.create({
model: 'openai/text-embedding-3-small',
input: ['pre.dev builds software from a spec', 'credits pay for model calls'],
});
console.log(result.data[0].embedding.length, result.usage);
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.pre.dev/v1", api_key=os.environ["PREDEV_API_KEY"])
result = client.embeddings.create(
model="openai/text-embedding-3-small",
input=["pre.dev builds software from a spec", "credits pay for model calls"],
)
print(len(result.data[0].embedding), result.usage)
data[].embedding, model, and usage. The call is charged from its metered usage, reported in x-predev-credits-charged.
Rerank
POST /v1/rerank ranks documents against a query. Send a model, a query, and documents; the response returns the documents ordered by relevance with a score for each.
curl --fail-with-body https://api.pre.dev/v1/rerank \
-H "Authorization: Bearer $PREDEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "cohere/rerank-v3.5",
"query": "how are gateway calls billed",
"documents": [
"Credits are computed from the metered usage of each call.",
"Streams settle when they end.",
"Catalog reads are free."
]
}'
GET /v1/models or GET /v1/models/public. These ids work today: cohere/rerank-v3.5, cohere/rerank-4-fast, cohere/rerank-4-pro, voyageai/rerank-2.5, voyageai/rerank-2.5-lite, and qwen/qwen3-reranker-8b. Rerank calls are billed like any other inference call. See the rerank reference.Authorizations
apiKeyAuthxApiKey
The workspace API key (pdk_…) from Integrations → Built-in in the pre.dev dashboard.
Headers
Attribute this call to one of the workspace's projects. An id the workspace does not own is ignored.
Body
application/json
An id from GET /v1/embeddings/models.
Example:
"openai/text-embedding-3-small"
Text to embed, or an array of texts. Multimodal models also take content objects.
Output size, on models that support it.
Available options:
float, base64 For models that distinguish queries from documents, for example search_query or search_document.
Was this page helpful?

