Skip to main content

Chat

Messages

POST /v1/messages in the Anthropic Messages shape, for the Anthropic SDK.

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

POST https://api.pre.dev/v1/messages accepts the Anthropic Messages request body and returns the Anthropic response. Use it with the Anthropic SDK: set the client’s baseURL to https://api.pre.dev, without /v1, because the SDK appends /v1/messages itself. Pass the pre.dev key as the API key; the SDK’s x-api-key header is accepted.

Model ids are the catalog ids exactly as listed by GET /v1/models, so anthropic/claude-sonnet-5 rather than a native Anthropic model name. Any chat model in the catalog works through this shape, not only Anthropic’s.

curl --fail-with-body https://api.pre.dev/v1/messages \
  -H "x-api-key: $PREDEV_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "max_tokens": 256,
    "messages": [{ "role": "user", "content": "Give me a haiku about deploys." }]
  }'
import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic({
  baseURL: 'https://api.pre.dev', // no /v1: the Anthropic SDK appends /v1/messages itself
  apiKey: process.env.PREDEV_API_KEY!,
});

const message = await client.messages.create({
  model: 'anthropic/claude-sonnet-5',
  max_tokens: 256,
  messages: [{ role: 'user', content: 'Give me a haiku about deploys.' }],
});
console.log(message.content);
import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.pre.dev",
    api_key=os.environ["PREDEV_API_KEY"],
)

message = client.messages.create(
    model="anthropic/claude-sonnet-5",
    max_tokens=256,
    messages=[{"role": "user", "content": "Give me a haiku about deploys."}],
)
print(message.content)

Streaming

Set stream: true, or use client.messages.stream() in the SDKs, for Anthropic-style server-sent events. Credits settle when the stream ends; a disconnect still charges what the model generated. See streaming.

Tools, system prompts, and images

Use the Anthropic system, tools, and content-block formats, with Anthropic models or any other chat model in the catalog.

Headers and billing

The same x-predev-request-id, x-predev-credits-charged, and x-predev-credits-remaining headers are returned, and x-predev-project-id attributes usage. Calls are charged from the model’s metered usage, as on pricing.

curl --fail-with-body https://api.pre.dev/v1/messages \  -H "x-api-key: $PREDEV_API_KEY" \  -H "Content-Type: application/json" \  -d '{"model": "anthropic/claude-sonnet-5", "max_tokens": 100, "messages": [{"role": "user", "content": "Give me a haiku about deploys."}]}'
import osfrom anthropic import Anthropicclient = Anthropic(base_url="https://api.pre.dev", api_key=os.environ["PREDEV_API_KEY"])message = client.messages.create(    model="anthropic/claude-sonnet-5",    max_tokens=100,    messages=[{"role": "user", "content": "Give me a haiku about deploys."}],)print(message.content[0].text)
import Anthropic from '@anthropic-ai/sdk';const client = new Anthropic({ baseURL: 'https://api.pre.dev', apiKey: process.env.PREDEV_API_KEY });const message = await client.messages.create({  model: 'anthropic/claude-sonnet-5',  max_tokens: 100,  messages: [{ role: 'user', content: 'Give me a haiku about deploys.' }],});console.log(message.content);
package mainimport (  "fmt"  "net/http"  "io/ioutil"  "strings")func main() {  url := "https://api.pre.dev/v1/messages"  body := strings.NewReader(`{    "model": "anthropic/claude-sonnet-5",    "max_tokens": 100,    "stream": false,    "messages": [      {        "role": "user",        "content": "Give me a haiku about deploys."      }    ]  }`)  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": "anthropic/claude-sonnet-5",  "max_tokens": 100,  "stream": false,  "messages": [    {      "role": "user",      "content": "Give me a haiku about deploys."    }  ]}""");HttpClient client = HttpClient.newBuilder()  .connectTimeout(Duration.ofSeconds(10))  .build();HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()  .uri(URI.create("https://api.pre.dev/v1/messages"))  .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": "anthropic/claude-sonnet-5",  "max_tokens": 100,  "stream": false,  "messages": [    {      "role": "user",      "content": "Give me a haiku about deploys."    }  ]}""", Encoding.UTF8, "application/json");var client = new HttpClient();var response = await client.PostAsync("https://api.pre.dev/v1/messages", 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/messages";  let body = r#"{    "model": "anthropic/claude-sonnet-5",    "max_tokens": 100,    "stream": false,    "messages": [      {        "role": "user",        "content": "Give me a haiku about deploys."      }    ]  }"#;  let res = client    .post(url)    .header("Content-Type", "application/json")    .body(body)    .send()    .await?    .text()    .await?;  println!("{}", res);  Ok(())}
{  "id": "pdg-043293a6-d1a8-4695-81fe-603ad4661ebb",  "type": "message",  "role": "assistant",  "model": "anthropic/claude-sonnet-5",  "content": [    {      "type": "text",      "text": "Green checks line up\nThe pipeline hums, then goes quiet\nProduction wakes up"    }  ],  "stop_reason": "end_turn",  "stop_sequence": null,  "usage": {    "input_tokens": 14,    "output_tokens": 19  }}
POST
/v1/messages

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

The message. With stream: true, Anthropic-style server-sent events (text/event-stream) instead.

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?