Skip to main content
POST
/
messages
Create message (Anthropic)
curl --request POST \
  --url https://api.llmrouter.app/v1/messages \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "model": "<string>",
  "messages": [
    {
      "content": "<string>",
      "name": "<string>"
    }
  ],
  "temperature": 1,
  "max_tokens": 123,
  "stream": false,
  "gateway": {
    "zdr": true,
    "order": [
      "<string>"
    ],
    "only": [
      "<string>"
    ],
    "planningTriggerScore": 0.5,
    "imageGenerationModel": "<string>",
    "tags": [
      {
        "name": "<string>",
        "description": "<string>",
        "models": [
          "<string>"
        ]
      }
    ],
    "chatHistoryCompression": {
      "enabled": false,
      "score": 0.6
    },
    "mediaOptimization": false,
    "toolOptimization": {
      "enabled": false,
      "acceptScore": 0.5,
      "alwaysInclude": [
        "<string>"
      ]
    },
    "redact": {
      "email": true,
      "phone": true,
      "ip": true,
      "uuid": true,
      "token": true,
      "credit_card": true,
      "iban": true,
      "ssn": true,
      "mac": true,
      "custom": [
        "<string>"
      ]
    }
  }
}
'
import requests

url = "https://api.llmrouter.app/v1/messages"

payload = {
    "model": "<string>",
    "messages": [
        {
            "content": "<string>",
            "name": "<string>"
        }
    ],
    "temperature": 1,
    "max_tokens": 123,
    "stream": False,
    "gateway": {
        "zdr": True,
        "order": ["<string>"],
        "only": ["<string>"],
        "planningTriggerScore": 0.5,
        "imageGenerationModel": "<string>",
        "tags": [
            {
                "name": "<string>",
                "description": "<string>",
                "models": ["<string>"]
            }
        ],
        "chatHistoryCompression": {
            "enabled": False,
            "score": 0.6
        },
        "mediaOptimization": False,
        "toolOptimization": {
            "enabled": False,
            "acceptScore": 0.5,
            "alwaysInclude": ["<string>"]
        },
        "redact": {
            "email": True,
            "phone": True,
            "ip": True,
            "uuid": True,
            "token": True,
            "credit_card": True,
            "iban": True,
            "ssn": True,
            "mac": True,
            "custom": ["<string>"]
        }
    }
}
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({
    model: '<string>',
    messages: [{content: '<string>', name: '<string>'}],
    temperature: 1,
    max_tokens: 123,
    stream: false,
    gateway: {
      zdr: true,
      order: ['<string>'],
      only: ['<string>'],
      planningTriggerScore: 0.5,
      imageGenerationModel: '<string>',
      tags: [{name: '<string>', description: '<string>', models: ['<string>']}],
      chatHistoryCompression: {enabled: false, score: 0.6},
      mediaOptimization: false,
      toolOptimization: {enabled: false, acceptScore: 0.5, alwaysInclude: ['<string>']},
      redact: {
        email: true,
        phone: true,
        ip: true,
        uuid: true,
        token: true,
        credit_card: true,
        iban: true,
        ssn: true,
        mac: true,
        custom: ['<string>']
      }
    }
  })
};

fetch('https://api.llmrouter.app/v1/messages', 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.llmrouter.app/v1/messages",
  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' => '<string>',
    'messages' => [
        [
                'content' => '<string>',
                'name' => '<string>'
        ]
    ],
    'temperature' => 1,
    'max_tokens' => 123,
    'stream' => false,
    'gateway' => [
        'zdr' => true,
        'order' => [
                '<string>'
        ],
        'only' => [
                '<string>'
        ],
        'planningTriggerScore' => 0.5,
        'imageGenerationModel' => '<string>',
        'tags' => [
                [
                                'name' => '<string>',
                                'description' => '<string>',
                                'models' => [
                                                                '<string>'
                                ]
                ]
        ],
        'chatHistoryCompression' => [
                'enabled' => false,
                'score' => 0.6
        ],
        'mediaOptimization' => false,
        'toolOptimization' => [
                'enabled' => false,
                'acceptScore' => 0.5,
                'alwaysInclude' => [
                                '<string>'
                ]
        ],
        'redact' => [
                'email' => true,
                'phone' => true,
                'ip' => true,
                'uuid' => true,
                'token' => true,
                'credit_card' => true,
                'iban' => true,
                'ssn' => true,
                'mac' => true,
                'custom' => [
                                '<string>'
                ]
        ]
    ]
  ]),
  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.llmrouter.app/v1/messages"

	payload := strings.NewReader("{\n  \"model\": \"<string>\",\n  \"messages\": [\n    {\n      \"content\": \"<string>\",\n      \"name\": \"<string>\"\n    }\n  ],\n  \"temperature\": 1,\n  \"max_tokens\": 123,\n  \"stream\": false,\n  \"gateway\": {\n    \"zdr\": true,\n    \"order\": [\n      \"<string>\"\n    ],\n    \"only\": [\n      \"<string>\"\n    ],\n    \"planningTriggerScore\": 0.5,\n    \"imageGenerationModel\": \"<string>\",\n    \"tags\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"models\": [\n          \"<string>\"\n        ]\n      }\n    ],\n    \"chatHistoryCompression\": {\n      \"enabled\": false,\n      \"score\": 0.6\n    },\n    \"mediaOptimization\": false,\n    \"toolOptimization\": {\n      \"enabled\": false,\n      \"acceptScore\": 0.5,\n      \"alwaysInclude\": [\n        \"<string>\"\n      ]\n    },\n    \"redact\": {\n      \"email\": true,\n      \"phone\": true,\n      \"ip\": true,\n      \"uuid\": true,\n      \"token\": true,\n      \"credit_card\": true,\n      \"iban\": true,\n      \"ssn\": true,\n      \"mac\": true,\n      \"custom\": [\n        \"<string>\"\n      ]\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.llmrouter.app/v1/messages")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"model\": \"<string>\",\n  \"messages\": [\n    {\n      \"content\": \"<string>\",\n      \"name\": \"<string>\"\n    }\n  ],\n  \"temperature\": 1,\n  \"max_tokens\": 123,\n  \"stream\": false,\n  \"gateway\": {\n    \"zdr\": true,\n    \"order\": [\n      \"<string>\"\n    ],\n    \"only\": [\n      \"<string>\"\n    ],\n    \"planningTriggerScore\": 0.5,\n    \"imageGenerationModel\": \"<string>\",\n    \"tags\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"models\": [\n          \"<string>\"\n        ]\n      }\n    ],\n    \"chatHistoryCompression\": {\n      \"enabled\": false,\n      \"score\": 0.6\n    },\n    \"mediaOptimization\": false,\n    \"toolOptimization\": {\n      \"enabled\": false,\n      \"acceptScore\": 0.5,\n      \"alwaysInclude\": [\n        \"<string>\"\n      ]\n    },\n    \"redact\": {\n      \"email\": true,\n      \"phone\": true,\n      \"ip\": true,\n      \"uuid\": true,\n      \"token\": true,\n      \"credit_card\": true,\n      \"iban\": true,\n      \"ssn\": true,\n      \"mac\": true,\n      \"custom\": [\n        \"<string>\"\n      ]\n    }\n  }\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.llmrouter.app/v1/messages")

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\": \"<string>\",\n  \"messages\": [\n    {\n      \"content\": \"<string>\",\n      \"name\": \"<string>\"\n    }\n  ],\n  \"temperature\": 1,\n  \"max_tokens\": 123,\n  \"stream\": false,\n  \"gateway\": {\n    \"zdr\": true,\n    \"order\": [\n      \"<string>\"\n    ],\n    \"only\": [\n      \"<string>\"\n    ],\n    \"planningTriggerScore\": 0.5,\n    \"imageGenerationModel\": \"<string>\",\n    \"tags\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"models\": [\n          \"<string>\"\n        ]\n      }\n    ],\n    \"chatHistoryCompression\": {\n      \"enabled\": false,\n      \"score\": 0.6\n    },\n    \"mediaOptimization\": false,\n    \"toolOptimization\": {\n      \"enabled\": false,\n      \"acceptScore\": 0.5,\n      \"alwaysInclude\": [\n        \"<string>\"\n      ]\n    },\n    \"redact\": {\n      \"email\": true,\n      \"phone\": true,\n      \"ip\": true,\n      \"uuid\": true,\n      \"token\": true,\n      \"credit_card\": true,\n      \"iban\": true,\n      \"ssn\": true,\n      \"mac\": true,\n      \"custom\": [\n        \"<string>\"\n      ]\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
{
  "id": "<string>",
  "type": "message",
  "role": "assistant",
  "model": "<string>",
  "content": [
    {
      "type": "text",
      "text": "<string>"
    }
  ],
  "stop_reason": "<string>",
  "stop_sequence": "<string>",
  "usage": {
    "input_tokens": 123,
    "output_tokens": 123,
    "planning_usage_details": {
      "prompt_tokens": 123,
      "completion_tokens": 123,
      "total_tokens": 123,
      "cost": 123
    }
  }
}
{
  "error": {
    "message": "<string>"
  }
}

Authorizations

Authorization
string
header
required

LLM Router API Key (e.g., sk-llmr-...)

Body

application/json

Accepts any additional properties supported by the upstream model (e.g., tools, top_p, response_format).

model
string
required

ID of the model to use (e.g., anthropic/claude-3-5-sonnet)

messages
object[]
required
temperature
number
default:1
max_tokens
integer
stream
boolean
default:false
gateway
object

Custom LLM Router configurations injected into the request.

Response

Successful response

id
string
type
string
default:message
role
string
default:assistant
model
string
content
object[]
stop_reason
string
stop_sequence
string
usage
object