Skip to main content

Embeddings

Embeddings and rerank

POST /v1/embeddings and POST /v1/rerank, with the embedding model list.

posthttps://api.pre.dev/v1/embeddingsTry it

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)

The response is the standard embeddings response: 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."
    ]
  }'

Rerank models are not returned by 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.

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 osfrom openai import OpenAIclient = 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);
package mainimport (  "fmt"  "net/http"  "io/ioutil"  "strings")func main() {  url := "https://api.pre.dev/v1/embeddings"  body := strings.NewReader(`{    "model": "openai/text-embedding-3-small",    "input": [      "pre.dev builds software from a spec",      "credits pay for model calls"    ]  }`)  req, _ := http.NewRequest("POST", url, body)  req.Header.Add("Content-Type", "application/json")  res, _ := http.DefaultClient.Do(req)  defer res.Body.Close()  body, _ := ioutil.ReadAll(res.Body)  fmt.Println(res)  fmt.Println(string(body))}
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpResponse.BodyHandlers;import java.time.Duration;import java.net.http.HttpRequest.BodyPublishers;var body = BodyPublishers.ofString("""{  "model": "openai/text-embedding-3-small",  "input": [    "pre.dev builds software from a spec",    "credits pay for model calls"  ]}""");HttpClient client = HttpClient.newBuilder()  .connectTimeout(Duration.ofSeconds(10))  .build();HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()  .uri(URI.create("https://api.pre.dev/v1/embeddings"))  .header("Content-Type", "application/json")  .POST(body)  .build();try {  HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());  System.out.println("Status code: " + response.statusCode());  System.out.println("Response body: " + response.body());} catch (Exception e) {  e.printStackTrace();}
using System;using System.Net.Http;using System.Text;var body = new StringContent("""{  "model": "openai/text-embedding-3-small",  "input": [    "pre.dev builds software from a spec",    "credits pay for model calls"  ]}""", Encoding.UTF8, "application/json");var client = new HttpClient();var response = await client.PostAsync("https://api.pre.dev/v1/embeddings", body);var responseBody = await response.Content.ReadAsStringAsync();
use reqwest::{Result, Client};async fn main() -> Result<()> {  let client = Client::new();  let url = "https://api.pre.dev/v1/embeddings";  let body = r#"{    "model": "openai/text-embedding-3-small",    "input": [      "pre.dev builds software from a spec",      "credits pay for model calls"    ]  }"#;  let res = client    .post(url)    .header("Content-Type", "application/json")    .body(body)    .send()    .await?    .text()    .await?;  println!("{}", res);  Ok(())}
{  "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
/v1/embeddings

Authorization

AuthorizationBearer <token>

The workspace API key (pdk_…) from Integrations → Built-in in the pre.dev dashboard.

In: header

Header Parameters

x-predev-project-id?string

Attribute this call to one of the workspace's projects. An id the workspace does not own is ignored.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

One embedding per input, in input order.

TypeScript Definitions

Use the response body type in TypeScript.

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

Was this page helpful?